通过父页面window.open() 和子页面postMessage
- 异步下,通过
window.open('about: blank') 和 tab.location.href = '*'
设置同域下共享的localStorage 与监听window.onstorage
- 重复写入相同的值无法触发
- 会受到浏览器隐身模式等的限制
设置共享cookie 与不断轮询脏检查(setInterval )
借助服务端或者中间层实现
2. 浏览器架构
- 用户界面
- 主进程
-
内核
- 渲染引擎
-
JS 引擎
-
事件触发线程
- 网络异步线程
- 定时器线程
3. 浏览器下事件循环(Event Loop)
事件循环是指: 执行一个宏任务,然后执行清空微任务列表,循环再执行宏任务,再清微任务列表
- 微任务
microtask(jobs) : promise / ajax / Object.observe
- 宏任务
macrotask(task) : setTimout / script / IO / UI Rendering
4. 从输入 url 到展示的过程
- DNS 解析
- TCP 三次握手
- 发送请求,分析 url,设置请求报文(头,主体)
- 服务器返回请求的文件 (html)
-
浏览器渲染
5. 重绘与回流
当元素的样式发生变化时,浏览器需要触发更新,重新绘制元素。这个过程中,有两种类型的操作,即重绘与回流。
回流必定触发重绘,重绘不一定触发回流。重绘的开销较小,回流的代价较高。
最佳实践:
|