How to optimize Avada JavaScript imports
Avada’s ThemeFusion Builder has a plethora of built-in options, giving creators virtually limitless design possibilities. The downside is that, even though typically only a handful of the options are used on any given page, every option’s associated JavaScript file still gets imported, adding to page load time.
Builder Element Options
Individual builder elements can be disabled via the Avada Builder Options page (not to be confused with Global Options page), but there’s a catch – this only hides the elements from the builder insert menu, and does not null their JavaScript import.
One Possible Solution
After much searching, I found a solution to selectively import JavaScript builder dependencies on the Themefusion help forum. By adding the following lines into your child theme’s functions.php
file, it is possible to now pick and choose exactly which JavaScript files get imported.
<?php // Source Credit Link: https://theme-fusion.com/forums/topic/unnecessary-js-files-load-even-when-fusion-elements-disabled/#post-648617 // Selectively disable Avada's JS plugin imports add_action( 'wp_enqueue_scripts', 'custom_disable_theme_js' ); // List Avada's plugins, followed by their dependencies function custom_disable_theme_js() { Fusion_Dynamic_JS::deregister_script('avada-comments'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('avada-general-footer'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('avada-mobile-image-hover'); // Requires: jquery, modernizr Fusion_Dynamic_JS::deregister_script('avada-quantity'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('avada-scrollspy'); // Requires: avada-header, fusion-waypoints, bootstrap-scrollspy Fusion_Dynamic_JS::deregister_script('avada-select'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('avada-sidebars'); // Requires: jquery, modernizr, jquery-sticky-kit Fusion_Dynamic_JS::deregister_script('avada-tabs-widget'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('bootstrap-collapse'); // Requires: none Fusion_Dynamic_JS::deregister_script('bootstrap-modal'); // Requires: none Fusion_Dynamic_JS::deregister_script('bootstrap-popover'); // Requires: bootstrap-tooltip, cssua Fusion_Dynamic_JS::deregister_script('bootstrap-scrollspy'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('bootstrap-tab'); // Requires: bootstrap-transition Fusion_Dynamic_JS::deregister_script('bootstrap-tooltip'); // Requires: none Fusion_Dynamic_JS::deregister_script('bootstrap-transition'); // Requires: none Fusion_Dynamic_JS::deregister_script('cssua'); // Requires: fusion-animations, fusion-parallax, bootstrap-popover, fusion-popover, fusion-button Fusion_Dynamic_JS::deregister_script('fusion-alert'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('fusion-blog'); // Requires: jquery, packery, isotope, fusion-lightbox, fusion-flexslider, jquery-infinite-scroll, images-loaded Fusion_Dynamic_JS::deregister_script('fusion-button'); // Requires: jquery, cssua Fusion_Dynamic_JS::deregister_script('fusion-carousel'); // Requires: jquery-caroufredsel, jquery-touch-swipe Fusion_Dynamic_JS::deregister_script('fusion-chartjs'); // Requires: none Fusion_Dynamic_JS::deregister_script('fusion-column-bg-image'); // Requires: jquery, modernizr Fusion_Dynamic_JS::deregister_script('fusion-count-down'); // Requires: jquery, fusion-animations, jquery-count-down Fusion_Dynamic_JS::deregister_script('fusion-equal-heights'); // Requires: jquery, modernizr Fusion_Dynamic_JS::deregister_script('fusion-flexslider'); // Requires: jquery-flexslider Fusion_Dynamic_JS::deregister_script('fusion-image-before-after'); // Requires: jquery, jquery-event-move Fusion_Dynamic_JS::deregister_script('fusion-lightbox'); // Requires: jquery-lightbox, jquery-mousewheel Fusion_Dynamic_JS::deregister_script('fusion-parallax'); // Requires: jquery, cssua, jquery-request-animation-frame Fusion_Dynamic_JS::deregister_script('fusion-popover'); // Requires: cssua, bootstrap-popover Fusion_Dynamic_JS::deregister_script('fusion-recent-posts'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('fusion-sharing-box'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('fusion-syntax-highlighter'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('fusion-testimonials'); // Requires: jquery, jquery-cycle Fusion_Dynamic_JS::deregister_script('fusion-title'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('fusion-tooltip'); // Requires: bootstrap-tooltip, jquery-hover-flow Fusion_Dynamic_JS::deregister_script('fusion-video-bg'); // Requires: fusion-video-general, jquery-fitvids Fusion_Dynamic_JS::deregister_script('fusion-video-general'); // Requires: jquery-fitvids Fusion_Dynamic_JS::deregister_script('fusion-waypoints'); // Requires: jquery-waypoints, modernizr Fusion_Dynamic_JS::deregister_script('images-loaded'); // Requires: none Fusion_Dynamic_JS::deregister_script('isotope');! // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-appear'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-caroufredsel'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-count-down'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-count-to'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-cycle'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-easing'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-easy-pie-chart'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-event-move'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-fade');! // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-fitvids'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-flexslider'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-fusion-maps'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-hover-flow'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-hover-intent'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-infinite-scroll'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-lightbox'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-mousewheel'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-placeholder'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-request-animation-frame'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-sticky-kit'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-touch-swipe'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('jquery-waypoints'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('lazysizes'); // Requires: jquery Fusion_Dynamic_JS::deregister_script('packery');! // Requires: jquery, isotope Fusion_Dynamic_JS::deregister_script('modernizr'); // Requires: none Fusion_Dynamic_JS::deregister_script('jquery-to-top'); Fusion_Dynamic_JS::deregister_script('vimeo-player'); }
In this snippet, no JS files are being imported, taking an approach of selective inclusion. To activate an import, simply comment out the line of the plugin you want to load in your theme (by adding //
at the start of the line). Beneath each element is an additional line which lists out that plug-in’s dependencies. Stay mindful of what you’re excluding so as to be sure that all of your desired plug-ins still work.
The Preferred Solution
This is good news for performance junkies, but again, there’s another catch. Within Avada Global Options, under the Performance tab, there is a toggle to “Enable JS Compiler.” With this active, “all the javascript files are combined.” It would make sense to also have this checked on, in addition to the select JS imports, but upon doing so, every single JavaScript file gets added to the bundle – not just the files that were selectively imported via the functions.php
file.
Therefore, it is redundant to selectively import JS partials and also toggle the “JS Compiler” on at the same time. It is not only redundant though – it is also detrimental to your development process, because any JS partial that was deregistered becomes unusable within the Avada Fusion Builder.
In sum
To get the best Avada JavaScript performance, always have the “Enable JS Compiler” option on. While it is enticing to explicitly import only what is needed, when done so, every plugin will be called with its own <script>. This leads to numerous fetches, slowing down load time.
Related Post
If you’re looking for a new or refreshed website, contact me today and let’s get started.
3 thoughts on “How to optimize Avada JavaScript imports”
Hi this is amazingly useful, but im guessing now 3 years on it is out of date. Do you have an up to date version with the current scripts and their dependencies please?
Honestly I just use the JS Compiler option now (which combines them all together), because it’s really hard to discern exactly what scripts rely on each other. Also because even if you null a script’s import, its options aren’t hidden on the front end which can become confusing as you build your site