2023.7电脑编程技巧与维护图2事件循环处理过程1概述近年,随着连接互联网越来越便利、网络速度越来越快,除一些特定的行业领域,以前基于C/S架构的桌面应用程序基本上都迁移到基于互联网浏览器的应用开发上。现在前端浏览器的应用程序开发与以前传统的前端开发有很大不同,前端软件的功能越来越复杂,开发架构也非常多,例如,Vue、React和Angular等,不管使用哪种架构进行前端应用程序开发,浏览器底层对各种消息事件处理逻辑都是一致的。因此,要想熟练地开发各种前端应用,就必须熟悉JS引擎对各种消息事件的处理过程。2浏览器的架构及渲染进程的事件循环以谷歌公司的开源Chromium浏览器为例,说明浏览器的进程结构,如图1所示。Chromium有一个浏览器主进程Brower,它负责管理整个浏览器界面,启动网络进程Net、负责处理底层显示驱动的GPU进程、第三方插件进程Plugin和渲染进程Renderer,每打开一个网页标签就启动一个渲染进程Renderer,渲染进程之间不会相互影响,也就是说如果某个网页在操作过程中崩溃了,则不会影响别的网页标签运行,整个浏览器还可以正常运行。如图1所示,渲染进程在启动过程中,会分别启动JS引擎线程、Event事件触发线程、定时器(Timer)触发线程、HTTP异步请求线程和负责渲染的GUI线程。其中,谷歌公司的高性能JS引擎就在JS引擎线程中运行,此线程负责执行同步代码或从任务队列中提取异步回调函数。JS引擎线程的事件循环处理过程如图2所示,JS引擎线程先执行同步代码,遇到异步API函数,将异步API函数发送至如图1所示的相应线程。例如,处理Promise对象时,先执行里面的同步代码,当Promise对象状态由pending变为fulfilled或rejected时,将then()或catch()程序段中的回调处理函数由事件触发线程加入微任务队列中。JS引擎线程执行setTimeout或setIntervalAPI函数时,将定时器setTimeout或set-IntervalAPI发送至定时器触发线程。定时器触发线程只负责计时,不会处理对应的回调函数,当定时时间到,定时器触发线程会将回调函数发送至事件触发线程,由事件触发线程将回调函数加入宏任务队列中。基金项目:江西省教育厅科学技术研究项目重点项目(项目编号:GJJ213301)。作者简介:邓杰海(1975—),男,副教授,高级工程师,硕士,研究方向为软件开发、数据库编程等。分析浏览器底层事件循环处理机制邓杰海,刘志强,房宏焘(江西中医药高等专科学校网络与教育技术中心,江西抚州344000)摘要:进行前端浏览器程序开发时,...