0

我正在优化我的网站,我正在使用谷歌分析工具来检查分数。

我参考了许多文章并在 stackoverflow.com 上进行了研究,但没有得到任何合适的解决方案。

我的问题是我已将所有 .js 文件放在页面末尾靠近正文标记的位置,但分析显示Defer Javascript并提供了 js 文件列表。

aspx 文件中的代码如下所示:

<body>  
    <script type="text/javascript" src="js/default.js"></script>

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

    <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

    <script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-35073844-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

    </script>

</body>

我也尝试了defer 属性,但分数没有变化。

我还尝试了 javascript代码,如下所示:

<script type="text/javascript">

 // Add a script element as a child of the body
 function downloadJSAtOnload() {
 var element = document.createElement("script");
 element.src = "js/jquery.prettyPhoto.js";
 document.body.appendChild(element);
 }

 // Check for browser support of event handling capability
 if (window.addEventListener)
 window.addEventListener("load", downloadJSAtOnload, false);
 else if (window.attachEvent)
 window.attachEvent("onload", downloadJSAtOnload);
 else window.onload = downloadJSAtOnload;

</script> 

但仍然没有任何变化。

我可以获得一些关于延迟 javascript 的链接以彻底理解它吗?

我对javascript没有太多经验。

请帮忙。谢谢你。

4

1 回答 1

0

您没有提及您测试过的浏览器,因为历史上并非所有浏览器都支持 defer,但现在支持要好得多(http://caniuse.com/script-defer

Aarron Peters 写了一篇关于推迟 JS 直到 onload 被解雇的好帖子http://www.aaronpeters.nl/blog/why-loading-third-party-scripts-async-is-not-good-enough

他的代码基本上是这样的:

<script>
(function(w, d, s) {
  function go(){
    var js, fjs = d.getElementsByTagName(s)[0], load = function(url, id) {
    if (d.getElementById(id)) {return;}
       js = d.createElement(s); js.src = url; js.id = id;
       fjs.parentNode.insertBefore(js, fjs);
    };
    load('//connect.facebook.net/en_US/all.js#appId=272697932759946&xfbml=1', 'fbjssdk');
    load('https://apis.google.com/js/plusone.js', 'gplus1js');
    load('//platform.twitter.com/widgets.js', 'tweetjs');
  }
  if (w.addEventListener) { w.addEventListener("load", go, false); }
  else if (w.attachEvent) { w.attachEvent("onload",go); }
}(window, document, 'script'));
</script>

就我个人而言,我更喜欢一种以声明方式指定元素被推迟到的点的方式,例如defer="onload",但这会带来一些问题。

于 2013-02-16T11:36:30.313 回答