0

    浏览器(一)

    2023.07.12 | admin | 129次围观

    早期的浏览器

    早期的浏览器是一个单进程多线程的架构,线程大致分为页面线程、网络线程以及其它线程。页面线程主要负责解析HTML,进行渲染、执行JavaScript代码、扩展插件的执行;而网络线程主要用于发送请求网络数据;其他的线程还包括浏览器的缓存处理等等。

    单进程多线程的缺点在哪里?

    (1)页面线程的执行效率低:因为一个线程的执行是同步的,必须从上到下顺序执行。页面线程要进行JS代码的执行、页面的解析和渲染、插件的执行。

    (2)页面不稳定:由于多个线程是共享同一个进程的资源和内存,当由于一个线程出现崩溃的时候,所有的线程都会崩溃。由于浏览器的插件是别人编写的,而不是官方的,所以插件的不稳定容易造成页面线程的崩溃,进而导致整个浏览器进程的崩溃。

    现代浏览器的架构

    现代的浏览器采用多进程的架构浏览器工作原理是怎样的,一共分为五个进程,分别是主进程、网络进程、GPU进程、插件进程和渲染进程。

    1、主进程的任务为管理浏览器的界面、用户交互、管理子进程、提供存储功能

    2、网络进程用于发送网络请求

    3、GPU进程用于对3D CSS仅从加速

    浏览器(一)

    4、插件进程:插件划分为独立的进程,防止插件不稳定造成的页面崩溃。插件进程是在一个沙箱中运行,解决了插件不安全的问题。

    5、渲染进程(内核):页面的渲染、JS的解析与执行。

    渲染进程

    1、渲染进程是一个多线程的进程,它运行在沙箱里。(因为网页很不稳定,黑客很容易往网页里注入代码)。它的核心是主线程中的渲染引擎和JS引擎。

    2、JS引擎与渲染引擎都是运行在主线程里,两者不能同时执行,因为同一线程是同步执行的,不同的线程之间才可以并行处理。JS引擎与渲染引擎共用一个线程。

    渲染主线程的工作原理

    渲染主线程首先会进入一个死循环,这个死循环就是事件循环。在这个循环中,他会查看任务队列的队头,执行队头的任务,当执行完任务,又会回到循环中取出队头的任务进行执行。如果队头的任务是执行渲染工作浏览器工作原理是怎样的,则通知渲染引擎执行;若为JS代码,则通知JS引擎进行执行。如果渲染引擎执行到

    1、若JS引擎执行到费时的JavaScript代码,页面造成了卡顿怎么解决?

    如果遇到费时的操作,例如定时器、网络请求、用户的交互等,则将这些费时的操作交给其他的线程或者其他的进程执行,JS引擎继续执行后续的代码。当其他的线程执行完之后,再将回调函数放入到任务队列当中。例如:执行到Ajax网络请求的代码,则将它交给网络进程执行,JS引擎继续执行网络请求后续的代码。网络进程执行完之后,将回调函数放入任务队列中。

    思考:JS为什么是单线程的?

    如果JS为多线程,那么想想多个JS线程对同一个DOM节点进行操作时,那么DOM节点就不知道如何改变了。JS引擎与渲染引擎放入到同一个线程中也是这一个原因。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论