directory search
Attributes accesskey (attribute) class (attribute) contenteditable (attribute) contextmenu (attribute) data-* (attribute) dir (attribute) draggable (attribute) dropzone (attribute) Global attributes hidden (attribute) id (attribute) itemid (attribute) itemprop (attribute) itemref (attribute) itemscope (attribute) itemtype (attribute) lang (attribute) slot (attribute) spellcheck (attribute) style (attribute) tabindex (attribute) title (attribute) translate (attribute) Elements a abbr address area article aside audio b base bdi bdo blockquote body br button canvas caption cite code col colgroup data datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 head header hr html i iframe img input input type="button" input type="checkbox" input type="color" input type="date" input type="datetime"-local input type="email" input type="file" input type="hidden" input type="image" input type="month" input type="number" input type="password" input type="radio" input type="range" input type="reset" input type="search" input type="submit" input type="tel" input type="text" input type="time" input type="url" input type="week" ins kbd label legend li link main map mark menu menuitem meta meter nav noscript object ol optgroup option output p param picture pre progress q rp rt rtc ruby s samp script section select slot small source span strong style sub summary sup table tbody td template textarea tfoot th thead time title tr track u ul var video wbr Miscellaneous Attributes Block-level elements CORS enabled image CORS settings attributes Element Inline elements Kinds of HTML content Link types Microdata Optimizing your pages for speculative parsing Preloading content Reference Supported media formats Using the application cache Obsolete acronym applet basefont big blink center command content dir element font frame frameset hgroup image input type="datetime" isindex keygen listing marquee nextid noframes plaintext strike tt xmp
characters

传统上,在浏览器中,HTML解析器已经在主线程上运行,并在</script>标记后被阻塞,直到脚本从网络中检索并执行。Firefox 4及更高版本中的HTML解析器支持对主线程进行推测性解析。在脚本被下载和执行时,它会提前解析。与Firefox 3.5和3.6中一样,HTML解析器会为流中发现的脚本,样式表和图像启动推测加载。但是,在Firefox 4及更高版本中,HTML解析器还推测性地运行HTML树构建算法。好处在于,当推测成功时,不需要重新分析已经扫描的用于脚本,样式表和图像的传入文件的部分。不利的一面是,当投机失败时,失去更多的工作。

这份文件可以帮助您避免那些使猜测失败并减缓页面加载速度的对象。

投机加载成功

只有一个规则可以使链接脚本,样式表和图像的投机加载成功:

  • 如果使用<base>元素来覆盖页面的基本URI,请将该元素放置在文档的非脚本部分中。不要通过document.write()或添加它document.createElement()

避免丢失tree builder的输出

document.write()更改树构建器状态时,推测树构建失败,使得</script>标记之后的推测状态在document.write()解析所有插入的内容时不再成立。但是,只有不寻常的用途document.write()会造成麻烦。以下是要避免的事情:

  • 不要写不平衡的树。<script>document.write("<div>");</script>不好。<script>document.write("<div></div>");</script>没问题。

  • 不要写未完成的标记。<script>document.write("<div></div");</script>不好。

  • 不要以回车完成你的编码。<script>document.write("Hello World!\r");</script>不好。<script>document.write("Hello World!\n");</script>没问题。

  • 请注意,写入平衡标签可能会导致其他标签被推断,导致写入不平衡。例如<script>document.write("<div></div>");</script>head元素内部将被解释为<script>document.write("</head><body><div></div>");</script>不平衡。

  • 不要格式化表格的一部分。<table><script>document.write("<tr><td>Hello World!</td></tr>");</script></table>不好。但是,<script>document.write("<table><tr><td>Hello World!</td></tr></table>");</script>没关系。

  • TODO:其他格式化元素内的document.write。

Previous article: Next article: