Web页面的生命周期函数

2021/9/21 html

Web 页面的生命周期图

document 有 readyState 属性来描述 document 的 loading 状态 readystatechange 事件是跟踪文档状态的变更。

  • 首先请求页面(文档)完成,这里忽略 loading(可以理解为速度很快)。
  • 此刻,执行同步 js 脚本。在此期间,文档要进行加载并且解析,但资源任在加载中。
  • 等到文档结束加载并且解析后,此时会触发 readystatechange 事件,通过 document.readyState 输出得 interactive
  • 并且还会触发 DOMContentLoaded 事件,只不过要比前者慢。(此时资源还并没有全部加载完成)
  • 等到资源加载完成后,会再次触发 readystatechange 此时 document 状态为 complete 。
  • 接下来就是 触发 load() 事件(此时资源就完全加载完成)

因此: 一般来说,大多数的操作我们都应该放在 DOMContentLoaded 事件中执行,而不要放在 window.onload 中执行。

其他事件

  • beforeunload 页面关闭之前会被触发
  • onpageshow 在用户浏览网页时触发
    • 与 onload 的区别
      
      • onload 事件在页面从浏览器缓存中读取时不触发
      • onpageshow 事件在每次加载页面时触发
  • unload 当用户最终离开时会触发该事件
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <body>
    <script>
      var output = "";

      function print() {
        document.getElementById("main").innerHTML += output;
      }

      function append(data) {
        output += data + " <br />";
      }

      document.addEventListener("readystatechange", function () {
        append("readyState : " + document.readyState);
      });

      document.addEventListener("DOMContentLoaded", function () {
        append("DOMContentLoaded");
      });

      window.onload = function () {
        append("window onload");
        print();
      };

      append("script executed");
    </script>
    <div id="main"></div>

    <iframe
      src="https://v3.bootcss.com/components/"
      height="35"
      onload="append('iframe onload')"
    ></iframe>

    <div>
      <img
        src="https://i.loli.net/2021/09/21/jGoJ7puVWx3abct.png"
        onload="append('image onload')"
      />
    </div>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49