File tree Expand file tree Collapse file tree 2 files changed +9
-3
lines changed Expand file tree Collapse file tree 2 files changed +9
-3
lines changed Original file line number Diff line number Diff line change @@ -53,6 +53,8 @@ JavaScript 在并发编程上一个重要特点是“Run To Completion”。在
53
53
执行很多 JS...(20ms)-> 空闲 -> 绘制(32ms)-> ...
54
54
```
55
55
56
+ 例如下面的脚本在保持 JavaScript 忙的状态(持续 5s)下每隔 1s 新增一行 DOM 内容。
57
+
56
58
``` html
57
59
<div id =" message" ></div >
58
60
<script >
@@ -73,6 +75,10 @@ while (true) {
73
75
</script >
74
76
```
75
77
78
+ 可以观察到虽然每秒都会写一次 DOM,但在 5s 结束后才会全部渲染出来,明显耗时脚本阻塞了渲染。
79
+
80
+ ![ js block render] ( /assets/img/blog/dom/js-block-render.gif )
81
+
76
82
# 测量渲染帧间隔
77
83
78
84
浏览器的渲染间隔其实是很难测量的。即使通过 [ clientHeight] [ client-size ] 这样的接口也只能强制进行Layout,是否 Paint 上屏仍未可知。
@@ -119,10 +125,10 @@ nextFrame()
119
125
在编写涉及到布局的脚本时,常常会多次读写样式。比如:
120
126
121
127
``` javascript
122
- # 触发一次 Layout
128
+ // 触发一次 Layout
123
129
var h = div .clientHeight
124
130
div .style .height = h + 20
125
- # 再次触发 Layout
131
+ // 再次触发 Layout
126
132
var w = div .clientWidth
127
133
div .style .width = w + 20
128
134
```
@@ -131,7 +137,7 @@ div.style.width = w + 20
131
137
如果把交错的读写分隔开,就可以减少触发 Layout 的次数:
132
138
133
139
``` javascript
134
- # 触发一次 Layout
140
+ // 触发一次 Layout
135
141
var h = div .clientHeight
136
142
var w = div .clientWidth
137
143
div .style .height = h + 20
You can’t perform that action at this time.
0 commit comments