如何在OpenCart

时间:2015-08-04 10:23:24

标签: javascript opencart deferred

我有OpenCart应用程序。 Javascripts在settings' /catalog/controller//settings.php中的settings.php中加载,代码如下:

 $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');

在这里,&#39;主题&#39;表示已安装的主题名称。我想在OpenCart中推迟或异步这些javascript加载,我该怎么办?

我知道addScript语法有1s参数作为文件,第二个位置,第三个延迟和第四个异步,其中defer和async可以是boolean。 我已经尝试过如下语句来看看推迟false和async true:

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

但我不确定这是否有效。请建议

2 个答案:

答案 0 :(得分:3)

这是我在head元素中使用了很长时间的脚本。

通过这种方式,您可以很好地控制文件的加载,并且可以在加载所有DOM后开始加载任何内容,只需确保在加载时DOM中的任何位置都不需要这些文件。

<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|complete/.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>

这是一篇很好的文章,它描述了一些加快速度的方法,其中之一就是将你的js文件组合成1或2-3-4,根据哪一个需要。好处是http请求更少。

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

谷歌充满了文章

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

答案 1 :(得分:0)

为了减少页面加载时间,你必须做两件事

  1. 减少请求数量
  2. 减小包装尺寸
  3. 为减少请求数量,您可以合并所有javascripts&amp; css到一个文件。您还应该应用lazy load images(这有助于减小包装尺寸)

    如果你正在运行VPS,你可以尝试安装mod_pagespeed(由谷歌开发) - 这将有助于减少很多页面加载时间。

    我不确定您是否使用过gtmetrix.com或http://www.webpagetest.org/ 用于审核您的网站速度。

    根据我的经验,延迟加载JavaScript对你没有多大帮助