JavaScript在这种情况下是如何工作的?

JavaScript在这种情况下是如何工作的?,javascript,Javascript,为了提高速度,我正在尝试决定是将JavaScript放在网站的中还是放在之前。我更喜欢head,不关心额外的HTTP请求,只关心这个脚本的行为 以下是背靠背加载的两段代码片段(Google Analytics): 脚本1: // Loaded externally: // <script type="text/javascript" src="google_analytics_1.js"></script> var gaJsHost = ( ( "https:"

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

以下是背靠背加载的两段代码片段(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"
) );
// Loaded externally:
// <script type="text/javascript" src="google_analytics_2.js"></script>

try {
    var pageTracker = _gat._getTracker( "UA-0000000-0" );
    pageTracker._trackPageview();
}
catch( err ) { }
//外部加载:
// 
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_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"
) );
// Loaded externally:
// <script type="text/javascript" src="google_analytics_2.js"></script>

try {
    var pageTracker = _gat._getTracker( "UA-0000000-0" );
    pageTracker._trackPageview();
}
catch( err ) { }
//外部加载:
// 
试一试{
var pageTracker=_gat._getTracker(“UA-0000000-0”);
页面跟踪器。_trackPageview();
}
捕获(错误){}
对于上面的代码,JavaScript是否会延迟发送页面的其余部分,直到它检索到
ga.js
,还是说,“好的,我已经收到了对
ga.js
的请求,现在我将继续发送页面的其余部分,同时等待下载到客户端…”


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

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

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


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

Wow,真的吗!?听到这个消息我有点惊讶你的问题不是很清楚。JavaScript不会将任何页面“发送”到任何地方。JavaScript是浏览器正在加载(和执行)的页面的一部分。JavaScript代码可以在解析页面时修改页面,这就是您的
document.write()
调用在第一个代码段中所做的。当您修改文档并在其中写入
标记时,浏览器的行为就像脚本标记一直是HTML的一部分一样。浏览器下载文档部分的顺序(或者是否并行)完全取决于浏览器。好的,哈哈。这基本上与hminaya的答案完全相反。是吗?@Jeff:这取决于他的回答,他的回答有点不清楚,所以取决于他是指下载还是解析,这两种解释都可以。解析肯定被延迟了,但下载没有。谢谢你。因此,为了实现更快加载页面的目标,我应该将脚本放在
上方,而不是放在头部。是吗?是的,通过将脚本放在页面的最后,您的页面将在请求外部脚本之前加载并显示。在理想情况下,您可能希望所有脚本都在头部,但要使您的页面对其他服务器可能存在的问题不那么敏感,您必须使用有效的方法。不久前我自己在页面上移动了一些外部脚本,因为我们的页面出现了问题,因为脚本加载时间太长。