1. 不同标签页通讯
本质原理就是去运用一些可以 共享的中间介质
,因此比较常用的有 以下方法
- 通过父页面
window.open()
和子页面postMessage
- 异步下,通过
window.open('about: blank')
和tab.location.href
= ‘*’ 设置同域下共享的 localStorage
与监听window.onstorage
- 重复写入相同的值无法触发 , 会受到浏览器隐身模式等的限制
- 设置
共享 cookie
与不断轮询脏检查(setInterval)
- 借助服务端或者中间层实现
2. 浏览器架构
用户界面(The user interface)
: 包括地址栏、前进/后退按钮、书签菜单等。除了浏览器主窗口显示的您请求的页面外,其他显示的各个部分都属于用户界面。浏览器引擎(The browser engine)
: 在用户界面和呈现引擎之间传送指令呈现引擎(The rendering engine)
:负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。网络(Networking)
: 用于网络调用,比如 HTTP 请求。其接口与平台无关,并为所有平台提供底层实现JavasScript 解释器(JavaScript interpreter)
:用于解析和执行 JavaScript 代码。用户界面后端(UI backend)
: 用于绘制基本的窗口小部件,比如组合框和窗口。其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。数据存储组成(Data storage)
: 这是持久层。浏览器需要在硬盘上保存各种数据,例如 Cookie。新的 HTML 规范 (HTML5) 定义了“网络数据库”,这是一个完整(但是轻便)的浏览器内数据库。
3. 浏览器下事件循环(Event Loop)
事件循环是指: 执行一个宏任务,然后执行清空微任务列表
,循环再执行宏任务,再清微任 务列表
- 微任务 microtask(jobs): promise / ajax / Object.observe(该方法已废弃)
- 宏任务 macrotask(task): setTimout / script / IO / UI Rendering
4. 从输入 url 到展示的过程
- DNS 解析
浏览器根据请求的 URL 交给 DNS 域名解析,找到真实 IP - TCP 三次握手建立连接
- 发送请求,分析 url,设置请求报文(