跳至內容
野空文庫
使用者工具
登入
網站工具
搜尋
工具
顯示頁面
舊版
反向連結
最近更新
多媒體管理器
網站地圖
登入
>
最近更新
多媒體管理器
網站地圖
您在這裏:
root
»
learn
»
how-does-browser-work
learn:how-does-browser-work
本頁是唯讀的,您可以看到原始碼,但不能更動它。您如果覺得它不應被鎖上,請詢問管理員。
# 瀏覽器原理筆記 Browser 是 multiprocessing ,包含: * **Browser process**:浏览器的 main process,只有一个。负责浏览器界面显示,与用户交互。负责各个页面的管理,创建和销毁其他 process。将 Renderer process 得到的内存中的 Bitmap,绘制到用户界面上。网络资源的管理,下载等 * **GPU process**:最多一个,用于 3D 绘制。我们常说的启动硬件加速渲染使用的 process,就是這個 * **Renderer process**:多个,默认每个Tab 頁为一个 renderer process。其中包含:GUI 渲染线程、js 引擎线程、事件触发线程、定时触发器线程、异步 http 请求线程等 * **其他 process**:如 extension process 等 其中,Renderer process 有下面這些: ### 1. GUI renderer thread - 负责渲染浏览器界面,解析HTML、CSS、构建 DOM 树和 RenderObject 树,布局和绘制等 - 当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行 - GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时 GUI 线程会被挂起(相当于被冻结了),GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。 ### 2. JS engine thread - 如V8引擎。JS内核,负责处理 Javascript 脚本程序 - JS 引擎负责解析、运行 Javascript 脚本 - JS 引擎一直等待着任务队列中任务的到来,然后加以处理 - 一个Tab页(renderer进程)中无论什么时候都只有一个 JS 线程 - GUI渲染线程与JS引擎线程是互斥的,所以如果 JS 执行的时间过长,会导致页面渲染加载阻塞。 ### 3. 事件觸發 thread - 可以理解为 JS 引擎事务处理不过来,分出来一部分(事件触发部分),需要浏览器另开一个线程来协助。事件触发线程归属于浏览器而不是JS引擎,用来控制事件循环 - 当JS引擎执行代码块如 AJAX异步请求时,会将对应任务添加到事件线程中,当对应的事件符合触发条件被触发时,该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理 - 由于JS的单线程关系,所以这些待处理队列中的事件都得排队等待JS引擎处理 ### 定時觸發器 thread - setInterval与setTimeout所在线程 - 浏览器定时计数器并不是由JavaScript引擎计数的 ---- 因为JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确 因此通过单独线程来计时并触发定时(计时完毕后,添加到事件队列中,等待JS引擎空闲后执行) - 注意,W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算 4ms ### 异步 http 请求 thread - 在XMLHttpRequest在连接后是通过浏览器新开一个线程请求 - 将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中。再由JavaScript引擎执行 ## Ref - <https://zhuanlan.zhihu.com/p/396351215> - <https://ithelp.ithome.com.tw/m/articles/10242047>
learn/how-does-browser-work.txt
· 上一次變更: 2024/12/22 21:17 由
127.0.0.1
頁面工具
顯示頁面
舊版
反向連結
回到頁頂