【问题标题】:Which is the load, rendering and execution order of elements in a HTML page?HTML 页面中元素的加载、渲染和执行顺序是什么?
【发布时间】:2014-03-31 18:02:53
【问题描述】:

我发现这很好 post at kirupa.com,但我想深入了解 DOM、脚本、CSS、图像、IFrame 等元素的加载、渲染和执行顺序。

到现在我已经理解了下一个顺序:

  1. DOM
  2. JS(我猜 JS 是内联的还是外部的,如果是外部的,我猜 DOM 加载会中断,直到 JS 被加载、渲染和执行)
  3. 内部 CSS? (或者是一起渲染的 DOM 加载。)
  4. 外部 CSS
  5. 外部图片

根据文章 '虽然外部样式表不会被加载,但内联和外部脚本都会。' 但根据MDM '样式表加载会阻止脚本执行'强>。所以脚本是先加载的,但只有在所有 css 可用后才执行?

我可以认为顺序取决于浏览器的实现,或者有什么标准可以做到这一点?

有专家会告诉我们正确的顺序吗?

提前致谢!

【问题讨论】:

  • 您可以使用 Chrome DevTools 查看页面上元素的加载(网络选项卡)和呈现(时间线选项卡)的顺序。
  • 样式表仅阻止<script> 执行跟随样式表链接的<script> 块。否则 <script> 块会被同步加载和解析(除非存在“defer”或“async”属性,并且它们是相当新的)。
  • 这当然取决于浏览器本身,每个brand 都会以他们认为会优化或使您的浏览体验比其他浏览器更好的方式实现他们的浏览器。也就是说,我会想象它们在很大程度上是相同的,几乎没有变化。见stackoverflow.com/a/1795502/148998
  • 是的@shenku 我也认为每个实现都有一个最小变化的标准,否则我们开发人员会在我们已经拥有的浏览器上试验更多的错误。必须是订单。

标签: javascript html css definition


【解决方案1】:

我相信订单是这样的:

  1. 下载 HTML 文档
  2. 开始HTML解析
  3. 开始下载在 HTML 中遇到的外部文件(JavaScript、CSS、图像)
  4. 下载外部文件后解析(或者如果它们是内联的并且不需要下载)
    • 如果文件是脚本,则按照它们在 HTML 中出现的顺序运行它们
      • 如果他们现在尝试访问 DOM,他们会抛出错误
      • 在它们运行时,它们会阻止任何其他渲染,这就是为什么一些脚本被放在正文底部的原因
    • 对于 CSS 文件,按照它们在 HTML 中出现的顺序保存样式规则
    • 如果它们是图片,则显示它们
    • 如果加载失败,则不使用此文件继续
  5. 结束 HTML 解析
  6. 创建 DOM - 包括我们目前拥有的所有样式
  7. 在 DOM 完全构建并加载并运行脚本时执行 DOMContentLoaded 事件
    • 即使没有完成所有其他外部文件(图像、css)的下载(从第 4 步开始)也会发生
    • 在 Chrome F12 开发者工具中,这由网络视图上的蓝线表示
    • 将开始运行您添加到此事件的任何内容,例如window.addEventListener("DOMContentLoaded", doStuff, true);
  8. 开始将文档绘制到显示窗口(任何已加载的样式)
  9. 所有外部文件加载完毕后执行window.onload事件
    • 在 Chrome F12 开发者工具中,这由网络视图上的红线表示
    • 这将开始运行jQuery ready函数$(document).ready(function(){ ... });
    • 将开始运行您添加到此事件的任何代码,例如window.addEventListener("load", doStuff, true);
  10. 重新绘制文档,包括任何新的图像和样式

请注意,动态添加到您的页面(由其他脚本)的脚本的执行顺序很复杂,而且基本上是不确定的。 (在这里查看答案load and execute order of scripts

【讨论】:

  • 感谢您明确解释命令。我有个问题。在第 9 步中,当 css 和 img 文件加载时,window.onload 是否永远不会触发?如果下载返回错误,是否会触发 window.onload ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2010-12-20
  • 2015-06-21
  • 1970-01-01
  • 2011-09-20
  • 2017-08-08
相关资源
最近更新 更多