推迟为JQuery加载解析JavaScript

时间:2012-03-19 19:21:45

标签: javascript jquery performance jquery-deferred pagespeed

在使用Google Page Speed测试网站时,我发现我无法摆脱Defer parsing of JavaScript。我删除了所有的javascript代码,只剩下一个小代码

<script defer type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('.test').click(function(){
            $(this).slideDown();
        });
    });
</script>

甚至没有任何jquery代码,只需将jQuery文件单独加载为

<script defer type="text/javascript" src="jquery.min.js"></script>

仍然会收到Defer parsing of JavaScript的警告。

4 个答案:

答案 0 :(得分:10)

@samsaffron撰写了一篇关于推迟jQuery的好文章 - http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax

答案 1 :(得分:4)

我找到this documentation page,其中说明:

  

要使用此技术,您应首先识别onload事件之前文档实际未使用的所有JavaScript函数。对于包含超过25个未调用函数的任何文件,将所有这些函数移动到单独的外部JS文件中。这可能需要对代码进行一些重构以解决文件之间的依赖关系。 (对于包含少于25个未调用函数的文件,重构的努力是不值得的。)

     

然后,在包含文档的头部插入一个JavaScript事件侦听器,强制在onload事件之后加载外部文件。您可以通过任何常用的脚本方式执行此操作,但我们建议使用非常简单的脚本化DOM元素(以避免跨浏览器和同域策略问题)。这是一个例子(其中“deferredfunctions.js”包含要延迟加载的函数)

我从中理解:您应该从onload事件处理程序“懒惰加载”jQuery(请参阅上面的链接以获取有关如何执行此操作的示例)。

答案 2 :(得分:2)

不应该是

<script defer='defer' type="text/javascript" src="jquery.min.js"></script>

而不是提供空defere属性使用defer ='defer'

答案 3 :(得分:1)

只需将其添加到您的脚本async示例:

<script type="text/javascript" async src="jquery.min.js"></script>