Skip to content

4ready与load事件

一个是ready一个是load,这两个到底有什么区别呢?

ready与load谁先执行: 大家在面试的过程中,经常会被问到一个问题:ready与load那一个先执行,那一个后执行? 答案是ready先执行,load后执行。

DOM文档加载的步骤: 要想理解为什么ready先执行,load后执行就要先了解下DOM文档加载的步骤:

(1) 解析HTML结构。 (2) 加载外部脚本和样式表文件。 (3) 解析并执行脚本代码。 (4) 构造HTML DOM模型。 //ready (5) 加载图片等外部文件。 (6) 页面加载完毕。 //load

结论:

ready与load的区别就在于资源文件的加载,ready构建了基本的DOM结构,所以对于代码来说应该越快加载越好

我们看看jQuery是如何处理文档加载时机的问题:

<script> jQuery.ready.promise = function(obj) { if (!readyList) { readyList = jQuery.Deferred();

if (document.readyState === 'complete') {
  // Handle it asynchronously to allow scripts the opportunity to delay ready
  setTimeout(jQuery.ready)
} else {
  document.addEventListener('DOMContentLoaded', completed, false);
  window.addEventListener('load', completed, false);
}

}

return readyList.promise(obj); } </script>

jQuery的ready是通过promise给包装过的,这也是jQuery擅长的手法,统一了回调体系,以后我们会重点谈到。 可见jQuery兼容的具体策略:针对高级的浏览器,我们当前很乐意用DOMContentLoaded事件了,省时省力。

共 20 个模块,1301 篇 Markdown 文档。