“不”字;text/javascript“;类型';d<;脚本>;标签阻止下载时加载的DOMContentLoaded?

“不”字;text/javascript“;类型';d<;脚本>;标签阻止下载时加载的DOMContentLoaded?,javascript,html,performance,script-tag,head.js,Javascript,Html,Performance,Script Tag,Head.js,通常,外部文件javascripts会阻止窗口加载和DOMContentLoaded事件,例如,如果我们有: <script src="http://so.me/file.js"></script> 我知道它会下载但不会执行资源,但在下载时,页面渲染器是否会像上面那样停止?您可以尝试一下,但我猜它会。您可以通过与Google Analytics和Facebook Connect编写对DOM的异步脚本引用相同的方式来解决这个问题 例如: <!-- Google An

通常,外部文件javascripts会阻止
窗口
加载
DOMContentLoaded
事件,例如,如果我们有:

<script src="http://so.me/file.js"></script>

我知道它会下载但不会执行资源,但在下载时,页面渲染器是否会像上面那样停止?

您可以尝试一下,但我猜它会。您可以通过与Google Analytics和Facebook Connect编写对DOM的异步脚本引用相同的方式来解决这个问题

例如:

<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script>
    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
    s.parentNode.insertBefore(g,s)}(document,'script'));
</script>

var_gaq=[[''u setAccount','UA-XXXXX-X'],[''u trackPageview'];
(函数(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g、 src=('https:'==location.protocol?'//ssl':'//www')+'.google analytics.com/ga.js';
s、 parentNode.insertBefore(g,s)}(文档,'script');

如果您担心脚本引用阻塞,可以使用相同的方法。

您可以尝试一下,但我猜会的。您可以通过与Google Analytics和Facebook Connect编写对DOM的异步脚本引用相同的方式来解决这个问题

例如:

<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script>
    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
    s.parentNode.insertBefore(g,s)}(document,'script'));
</script>

var_gaq=[[''u setAccount','UA-XXXXX-X'],[''u trackPageview'];
(函数(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g、 src=('https:'==location.protocol?'//ssl':'//www')+'.google analytics.com/ga.js';
s、 parentNode.insertBefore(g,s)}(文档,'script');

如果您担心脚本引用被阻塞,您可以使用相同的方法。

您在寻找:
这样脚本就不会暂停加载网站的其余部分?

您在寻找:
这样脚本就不会暂停加载网站的其余部分吗?

Ryan Fioravanti发了一封邮件他称之为构建高性能移动Web应用程序,在这里他使用了这种精确的技术来下载脚本,但阻止它们被执行。然后,他将通过将脚本附加到
DOM
来执行脚本

看他解释的部分

他解释说,页面呈现时间明显加快,这是因为JavaScript没有执行并阻止页面呈现过程

页面渲染器是否会如上所述停止

我的答案是否定的。也许有人对浏览器内部结构有更详细的了解,可以给你一个明确的答案。

Ryan Fioravanti有一个名为“构建高性能移动Web应用程序”的建议,他使用这种技术下载脚本,但阻止脚本被执行。然后,他将通过将脚本附加到
DOM
来执行脚本

看他解释的部分

他解释说,页面呈现时间明显加快,这是因为JavaScript没有执行并阻止页面呈现过程

页面渲染器是否会如上所述停止


我的答案是否定的。也许有人对浏览器内部结构有更详细的了解,可以给你一个明确的答案。

内核的解决方案可能就是你想要的

您可以使用

  • 延迟:并行加载并按顺序执行
    • 几乎所有浏览器都支持,包括IE的旧版本。然而,执行顺序并不总是得到遵守,即使它应该得到遵守
  • 异步:并行加载并尽快执行
    • 除IE外,几乎所有浏览器都支持IE,IE仅在IE10中添加了对IE的支持
Landon的解决方案与使用
async
的解决方案相同,只是您通过编程控制事情

…也就是说,几乎所有的现代浏览器都默认使用defer方法,不管您是否指定了某些内容。尝试在FF或Chrome中以经典方式加载一组脚本,同时查看其开发工具(或Fiddler)中的瀑布图,您将看到它们并行加载所有脚本,即使您没有要求它们:)

完善的解决方案(应适用于任何浏览器):


window.onload=函数(){
var s=document.createElement(“脚本”);
s、 type=“text/javascript”;
s、 src=”http://so.me/file.js";
document.getElementsByTagName(“head”)[0]。appendChild;
}
然后,如果您愿意这样做,您也可以将脚本粘贴在文档末尾的
之前


任何你在
之前坚持的内容都会导致渲染停止,但这并不意味着这是一个问题。页面是从上到下呈现的。因此,一旦你进入
,即使
onload
尚未启动,最终用户已经可以看到您的页面了。

内核的解决方案可能就是您想要的

您可以使用

  • 延迟:并行加载并按顺序执行
    • 几乎所有浏览器都支持,包括IE的旧版本。然而,执行顺序并不总是得到遵守,即使它应该得到遵守
  • 异步:并行加载并尽快执行
    • 除IE外,几乎所有浏览器都支持IE,IE仅在IE10中添加了对IE的支持
Landon的解决方案与使用
async
的解决方案相同,只是您通过编程控制事情

…也就是说,几乎所有的现代浏览器都默认使用defer方法,不管您是否指定了某些内容。尝试在FF或Chrome中以经典方式加载一组脚本,同时查看其开发工具(或Fiddler)中的瀑布图,您将看到它们并行加载所有脚本,即使您没有要求它们:)

精制梭罗
<html>
   <head></head>
   <body>


      <script>
         window.onload = function() {
            var s  =  document.createElement("script");
            s.type = "text/javascript";
            s.src  = "http://so.me/file.js";

            document.getElementsByTagName("head")[0].appendChild(s);
         }
      </script>
   </body>
</html>