提问人:Jeff 提问时间:10/31/2009 更新时间:10/31/2009 访问量:113
JavaScript 在这种情况下如何表现?
How does JavaScript behave in this situation?
问:
为了加快速度,我正在尝试决定是将我的 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.js
ga.js
我的直觉告诉我它是线性的,并且页面将被延迟,直到客户端完全下载。是吗?ga.js
答:
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
是的,通过将脚本放在页面的最后,您的页面将在请求外部脚本之前加载并显示。在理想情况下,你会希望所有的脚本都在脑海中,但为了使你的页面对其他服务器可能遇到的问题不那么敏感,你必须选择有效的脚本。不久前,我自己将一些外部脚本移到了页面下方,因为我们的页面出现了问题,因为脚本加载时间太长。
评论
document.write()
<script>