JavaScript 在这种情况下如何表现?

How does JavaScript behave in this situation?

提问人:Jeff 提问时间:10/31/2009 更新时间:10/31/2009 访问量:113

问:

为了加快速度,我正在尝试决定是将我的 JavaScript 放在我的网站中还是放在我的网站之前。我更喜欢头部,不关心额外的HTTP请求,只关心这个脚本的行为。<head></body>

以下是两个代码片段,它们是背靠背加载的 (Google Analytics):

脚本 1:

// Loaded externally:
// <script type="text/javascript" src="google_analytics_1.js"></script>

var gaJsHost = (
    ( "https:" == document.location.protocol ) ?
    "https://ssl." :
    "http://www."
);

document.write( unescape(
    "%3Cscript src='" +
    gaJsHost +
    "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"
) );

脚本 2:

// Loaded externally:
// <script type="text/javascript" src="google_analytics_2.js"></script>

try {
    var pageTracker = _gat._getTracker( "UA-0000000-0" );
    pageTracker._trackPageview();
}
catch( err ) { }

使用上面的代码,JavaScript 是否会延迟发送页面的其余部分,直到它检索到,或者它是否说,“好吧,我已经收到了排队请求,现在我将继续发送页面的其余部分,同时等待它下载到客户端......”?ga.jsga.js

我的直觉告诉我它是线性的,并且页面将被延迟,直到客户端完全下载。是吗?ga.js

JavaScript的

评论

0赞 Daniel Pryden 10/31/2009
你的问题不是很清楚。JavaScript 不会在任何地方“发送”任何页面。JavaScript 是浏览器正在加载(和执行)的页面的一部分。JavaScript 代码可以在分析页面时对其进行修改,这是调用在第一个代码片段中执行的操作。当您修改文档并在其中写入标签时,浏览器的行为就好像脚本标签始终是 HTML 的一部分一样。浏览器下载文档部分的顺序(或是否并行下载)完全取决于浏览器。document.write()<script>

答:

0赞 Hector Minaya 10/31/2009 #1

不。它不会被拖延。它将对第一个请求进行排队并继续处理第二个请求,实际上是浏览器处理它。

评论

0赞 Jeff 10/31/2009
哇,真的吗!?听到这个消息,我有点惊讶。=)
0赞 Guffa 10/31/2009 #2

加载 ga.js 文件时,页面的解析将暂停,但服务器将继续发送页面的其余部分。加载并执行脚本后,它将继续执行页面的其余部分。

因此,脚本和页面的其余部分将并行加载,但在处理脚本之前,它不会触及页面的任何其余部分。

评论

0赞 Jeff 10/31/2009
好的,哈哈。这基本上与hminaya的答案完全相反。右?
0赞 Guffa 10/31/2009
@Jeff:也就是说,他的回答有点不清楚,所以根据他指的是下载还是解析,可以用任何一种方式来解释。解析肯定会延迟,但下载不会延迟。
0赞 Jeff 10/31/2009
谢谢Guffa。因此,为了清楚起见,为了实现我让页面加载速度更快的目标,我应该将脚本放在上面而不是头部。右?</body>
0赞 Guffa 10/31/2009
是的,通过将脚本放在页面的最后,您的页面将在请求外部脚本之前加载并显示。在理想情况下,你会希望所有的脚本都在脑海中,但为了使你的页面对其他服务器可能遇到的问题不那么敏感,你必须选择有效的脚本。不久前,我自己将一些外部脚本移到了页面下方,因为我们的页面出现了问题,因为脚本加载时间太长。