什么是推测性解析?

11

我读到Firefox 3.5在其解析器中有一个新功能?

Gecko布局引擎的改进,包括用于更快内容呈现的预测性解析。

能否简单解释一下这个功能。


请参阅来自 MDN 的 Speculative Parsing 文档和其他 DOM 性能技巧 - KyleMit
2个回答

25
这与bugzilla中的条目有关:https://bugzilla.mozilla.org/show_bug.cgi?id=364315 在该条目中,Anders Holbøll建议:
当遇到引用外部文件的脚本标签时,浏览器不会尝试加载script标记后的任何元素,直到外部脚本文件被加载。这使得引用多个或大型JavaScript文件的网站变慢。
在这里,首先加载file1.js,然后按顺序加载file2.js。然后并行加载img1.gif、img2.gif和file3.js。当file3.js完全加载后,将加载img3.gif。
有人可能会认为,由于js文件可以包含类似"document.write('<!--');"的内容,因此在脚本执行之前无法知道脚本标记后面的任何内容是否会显示。
但我认为更有可能会显示内容。而且在现今的页面中,通常会引用许多外部JavaScript文件(ajax库、统计和广告),这会导致当前行为下页面加载被串行化。
因此,基本上,HTML解析器继续读取HTML文件并加载引用的链接,即使由于脚本而被阻止渲染。

它被称为“推测性”,因为脚本可能会执行一些操作,例如设置CSS参数,如“display: none”或注释以下HTML的部分,并通过这样做使某些加载不必要... 然而,在95%的使用情况下,大多数引用将被加载,因此解析器通常猜测正确。


4
这篇文章(http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax)因为在HackerNews上受到了关注,并包含了这个问题的链接。至少,这就是我来到这里的方式。 - vinod
1
我来到这里是因为 Stack Overflow 是我的报纸。 - Fabrício Matté
我认为外部文件指的是从服务器加载的任何JS文件? - emilly

3

我认为这意味着当浏览器通常会阻止(例如对于脚本标签)时,它将继续解析HTML。直到缺失的部分被加载,它才会创建实际的DOM,但它会开始在后台获取脚本文件和样式表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接