How can I defer or async javascript in OpenCart - Stack Overflow

I have OpenCart application. Javascripts are loaded in settings.php inside path 'catalogcontroll

I have OpenCart application. Javascripts are loaded in settings.php inside path '/catalog/controller//settings.php with similar codes as:

 $this->document->addScript('catalog/view/theme/<theme>/lib/lazy/jquery.lazy.1.6.min.js');
    $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/actual/jquery.actual.min.js', 'header');
    $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/hover-intent/jquery.hoverIntent.min.js', 'footer');

Here, 'theme' means theme name that is installed. I want to defer or async these javascript loading in OpenCart, how can I do it?

I know that addScript syntax has 1s parameter as file, second location, 3rd defer and 4th async where defer and async can be boolean. I have tried statement as below to see defer false and async true:

 $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/hover-intent/jquery.hoverIntent.min.js', 'footer', false, true);

but I am not sure if this will work or not. Please suggest

I have OpenCart application. Javascripts are loaded in settings.php inside path '/catalog/controller//settings.php with similar codes as:

 $this->document->addScript('catalog/view/theme/<theme>/lib/lazy/jquery.lazy.1.6.min.js');
    $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/actual/jquery.actual.min.js', 'header');
    $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/hover-intent/jquery.hoverIntent.min.js', 'footer');

Here, 'theme' means theme name that is installed. I want to defer or async these javascript loading in OpenCart, how can I do it?

I know that addScript syntax has 1s parameter as file, second location, 3rd defer and 4th async where defer and async can be boolean. I have tried statement as below to see defer false and async true:

 $this->journal2->minifier->addScript('catalog/view/theme/<theme>/lib/hover-intent/jquery.hoverIntent.min.js', 'footer', false, true);

but I am not sure if this will work or not. Please suggest

Share Improve this question asked Aug 4, 2015 at 10:23 Ritesh KumarRitesh Kumar 2,2332 gold badges21 silver badges32 bronze badges 3
  • The defer and async flags will just add an attribute with the same name to the resulting <script> tag. What is your actual problem and what are you trying to achieve? Because async loading of JavaScript can result in some problems and must be done correctly. For example: a piece of code wants to use a library which isn't loaded yet. – alesc Commented Jan 16, 2016 at 15:29
  • I want to reduce javascript loading time in OpenCart. When OpenCart home page loads it has approx 27 javascript files that gets loaded which makes loading slow. I want someway to make loading fast. Thanks. – Ritesh Kumar Commented Jan 17, 2016 at 2:40
  • Please, for future users to know, accept an answer, if any, that best solve your question. If my answer is unclear or still didn't help, feel free to ask. – Asons Commented Jan 27, 2016 at 10:41
Add a ment  | 

2 Answers 2

Reset to default 3 +25

Here is a script I've been using for quite some time, in the head element.

With this you get good control of your loading of files, and can start loading anything after all the DOM is loaded, just make sure the files is not required anywhere in the DOM upon load.

<head>
    <title></title>
    <link rel='stylesheet' type='text/css' href='css.css' />
    <script type='text/javascript'>         

        var DomLoaded = {
            done: false, onload: [],
            loaded: function () {
                if (DomLoaded.done) return;
                DomLoaded.done = true;
                if (document.removeEventListener) { document.removeEventListener('DOMContentLoaded', DomLoaded.loaded, false); }
                for (i = 0; i < DomLoaded.onload.length; i++) DomLoaded.onload[i]();
            },
            load: function (fireThis) {
                this.onload.push(fireThis);
                if (document.addEventListener) {
                    document.addEventListener('DOMContentLoaded', DomLoaded.loaded, false);
                } else {
                    /*IE<=8*/
                    if (/MSIE/i.test(navigator.userAgent) && !window.opera) {
                        (function () {
                            try { document.body.doScroll('up'); return DomLoaded.loaded(); } catch (e) { }
                            if (/loaded|plete/.test(document.readyState)) return DomLoaded.loaded();
                            if (!DomLoaded.done) setTimeout(arguments.callee, 10);
                        })();
                    }
                }
                /* fallback */
                window.onload = DomLoaded.loaded;
            }
        };

        DomLoaded.load(function () {
            var d = document;
            var h = d.getElementsByTagName('head')[0];
            var s = d.createElement('script');
            s.setAttribute('type', 'text/javascript');
            s.setAttribute('async', true);
            s.setAttribute('defer', true);
            s.setAttribute('src', '/path/to/scripts.js');
            h.appendChild(s);
        });

    </script>
</head>

And here is a good article which describes a few more ways to speed things up, and one of them is bining your js files into 1, or 2-3-4, based on which one needs which. The benefit is less http request.

http://exisweb/web-site-optimization-making-javascript-load-faster

And google is filled with articles

https://www.google./search?q=speed%20up%20loading%20javascript%20files&rct=j

For reducing page load times, you must do two mainly things

  1. Reduce number of requests
  2. Reduce package sizes

For reducing number of requests, you may merge all javascripts & css to one file. You should also applying lazy load images (This helps reduce package size too)

If you are running a VPS, you may try to install mod_pagespeed (developed by google) - It will help decrease a lot page load time.

I am not sure if you have used gtmetrix. or http://www.webpagetest/ for reviewing your site speed yet.

For my experience, lazy load JavaScript will not help you much

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745101542a4611303.html

相关推荐

  • How can I defer or async javascript in OpenCart - Stack Overflow

    I have OpenCart application. Javascripts are loaded in settings.php inside path 'catalogcontroll

    11小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信