Skip to content

Commit

Permalink
No commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
haigeno1 committed Aug 19, 2022
1 parent d798bc6 commit 41e4046
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
12 changes: 12 additions & 0 deletions test1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
function f(arr, target) {
let res = []
let obj = {}
for (let i = 0; i < arr.length; i++) {
obj[target - arr[i]] = arr[i]
if (obj[arr[i]] !== undefined) {
res.push([arr[i], obj[arr[i]]])
}
}
return res.length === 1
}
console.log(f([0, 1, 2, 3, 4, 8, 10, 12], 3));
21 changes: 21 additions & 0 deletions 浏览器-网络/浏览器渲染.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@ DOM 和 CSSOM 通常是并行构建的,所以 CSS 加载不会阻塞 DOM 的解
然而,由于 Render Tree 是依赖于 DOM Tree 和 CSSOM Tree 的,所以他必须等待到 CSSOM Tree 构建完成,也就是 CSS 资源加载完成(或者 CSS 资源加载失败)后,才能开始渲染。因此,CSS 加载会阻塞 Dom 的渲染。
因此,样式表会在后面的 js 执行前先加载执行完毕,所以css 会阻塞后面 js 的执行。

阻塞渲染
style标签的样式:
由HTML解析器解析(异步解析);
不阻塞浏览器渲染(可能会出现闪屏(解析一点,显示一点现象);
不阻塞DOM解析。
link引入的外部css样式(推荐使用)
由CSS解析器解析(同步解析);
阻塞浏览器渲染(可以利用这种阻塞避免闪屏);
阻塞其后js语句的执行:
原因:如果后面js的内容是获取元素的样式,例如宽高等属性,如果不等样式解析完毕,后面的js就获得了错误的信息,由于浏览器也不知道后续js的具体内容,所以只好等前面所有样式解析完毕,再执行js。例如:firefox在样式加载和解析过程,会禁止所有脚本。(webkit内核的浏览器只会在js尝试访问样式属性或者可能受到未加载的样式影响时才会禁止脚本。
不阻塞DOM的解析:
原因:DOM解析和CSS解析是两个并行的线程。
js阻塞
阻塞DOM解析:
原因:浏览器不知道后续脚本的内容,如果先去解析了下面的DOM,而随后js删除了后面的所有DOM,做了无用功。浏览器无法预估脚本具体做了什么操作,索性全部暂停,等脚本执行完,浏览器再继续向下解析。
阻塞页面的渲染:
原因:js中也可以给DOM设置样式,浏览器同样等该脚本执行完再继续干活,避免做无用功。
阻塞后续js的执行:
原因:维护依赖关系,例如:必须先引入jQuery再引入bootstrap。
如果script脚本加了defer:浏览器会发送请求加载js,但是不会阻塞DOM解析,等DOM解析完,再执行js。
如果script加了async:浏览器会发送请求加载js,不阻塞DOM解析,等js加载过来了,就先停止DOM解析,去执行js(谁先回来先执行谁),等js执行完,继续DOM解析。


DOMContentLoaded 与 load 的区别 ?
Expand Down

0 comments on commit 41e4046

Please sign in to comment.