是否在加载时解析/解释Javascript?(IE)

Ada*_*dam 8 javascript performance internet-explorer

我知道,例如,当Chrome下载Javascript文件时,它会被解释并进行JIT.

我的问题是,当IE6,7,8首先下载一个Javascript文件时,整个事情是解析和解释的吗?

我的理解是,只有顶级函数签名和在全局范围内执行的任何内容都在加载时进行了解析.然后在执行时解析函数体和其余部分.

如果它们在加载时被完全解析,您认为延迟下载和解析函数体的时间节省了多少?

Jas*_*rff 5

它们在加载时完全解析.(当然,IE必须解析脚本以了解每个函数体的结束位置.)在开源实现中,每个函数都被编译为字节码,甚至同时编译为机器代码,我想IE的工作方式是一样的.

如果你的页面实际加载速度太慢,你可以推迟加载你可能不会使用的100K脚本,这可能有助于你的加载时间.或者不 - 请参阅下面的更新.

(Trivia:像Sunspider这样的JS基准测试通常不会测量解析和编译代码所需的时间.)

更新 - 自从我发布这个答案后,情况发生了变化!实现仍会在加载时解析每个脚本,至少足以检测标准所要求的任何语法错误.但是他们有时会推迟编译函数,直到它们被调用为止.


Jam*_*yke 2

是的,在所有浏览器上,如果使用标签完成资源下载,则会阻止页面上的其他所有内容(CSS 下载、其他 JS 下载、渲染)<script>

如果您在页面开头或整个页面加载所有 javascript,您会看到卡顿,因为请求大约需要 50 毫秒,而库文件或类似文件的解析可能会超过 100 毫秒。使用 100 毫秒作为标准,任何更大的值都会被用户视为“滞后”。

节省的时间可能可以忽略不计,但如果页面加载时出现暂停,用户体验的轻微损失可能会很大,具体取决于您的情况。

请参阅LABjs 网站,获取大量文章以及关于延迟加载和解析的好处的精彩解释。