- 博客(5)
- 收藏
- 关注
原创 浏览器是如何渲染页面的?-面试题
渲染主线程解析遇到link引入的css文件时,如果当前的css文件没有下载完成,主线程会直接跳过,继续解析后续的HTML,当预解析线程下载和解析完成css文件后,再通知主线程去生成CSSOM树,这就是css不会阻塞HTML解析的根本原因。渲染主线程解析HTML字符串,生产DOM树和CSSOM树,在解析的过程中,遇到css解析css,遇到js执行js,在解析开始前,会开启一个预解析线程去查找并下载所有的外部css文件和js文件。分层的好处在于,将来某一层改变后,可以仅对该层进行绘制,提高了效率。
2025-08-23 15:56:24
585
原创 了解js的异步吗?-面试题
所以浏览器采用了异步的方式来避免,当渲染主线程执行某些任务时,如计时器、网络请求、事件回调,渲染主线程会通知其他线程来处理这些任务,自身立即结束对该任务的执行,当其他线程处理完成后,将事先传递的回调函数包装成任务放到消息队列的末尾,等待主线程的调度执行。这就造成了一方面繁重的渲染主线程白白的消耗时间,另一方面无法及时的渲染和更新页面,给用户造成页面卡死的现象。JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个(一个标签页一个渲染主线程)。异步实现了不会阻塞的渲染主线程。
2025-08-23 11:11:52
232
原创 阐述一下事件循环-面试题
在W3C的标准中,任务是有类型的,相同类型的任务必须放在同一个队列,不同类型的任务可以放在不同的队列。不同的队列有不同的优先级,每一次事件循环,由浏览器自行决定取哪个队列的任务执行,但是浏览器中必须有一个微队列,微队列中的任务一定具有最高的优先级,必须最先调用。在浏览器的源码中,渲染主线程会开启一个不会结束的for循环,每一次循环取出消息队列中的第一个任务执行,其他线程只需要在合适的时候将任务添加到消息队列的末尾即可。过去把消息队列简单的分为宏队列和微队列,现在已无法满足复杂的浏览器环境。
2025-08-22 22:12:19
127
原创 Chrome插件开发实战:从入门到进阶
(注:每个章节应包含代码片段展示,例如Manifest配置示例、API调用范式、构建配置文件等,配合流程图说明关键架构设计)
2025-08-22 18:08:09
540
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅