渲染引擎也称内核是浏览器的核心。
浏览器是一个运行在操作系统上的应用程序,每个应用程序必须至少启动一个进程来执行其功能,每个程序往往又会执行很多任务,那么进程就会创建很多线程来执行这些小的任务。
当我们在启动某个应用程序的时,就会创建一个进程来执行任务代码,同时会为该进程分配内存空间,该应用程序的状态都保存在该内存空间里。当应用关闭时,该内存空间就会被回收。
程序可以启动更多的进程来执行任务,由于每个进程分配的内存空间是独立的,如果两个进程之间需要传递某些数据,则需要进程通信管道IPC来传递。很多应用程序都是多进程的结构,这样是为了避免某一个进程卡死,影响整个应用程序,因为进程之间相互独立,一个进程卡死不会影响用户使用另一个进程。
进程可以将任务分成更多细小的任务,然后通过创建多个线程并行执行不同的任务,同一个进程之间的线程是可以直接通信共享数据的.
目前的浏览器都是多进程的结构,但是早期的浏览器都是单进程的结构。 但这一个进程也有多个线程:
但是单进程结构有几个问题: ① 不稳定:其中一个线程卡死,会导致整个进程出问题。比如你打开多个标签页,其中一个标签页卡死,可能会导致整个浏览器无法运行。 ② 不安全:浏览器之间是可以共享数据的,那么js线程就可以访问浏览器里的所有数据 ③ 不流畅:一个进程需要负责太多事情,导致运行效率不佳
为了解决早期浏览器的问题,现代浏览器采用了多进程架构,根据进程功能不同来分解浏览器:
解决方案: js、重排、重构都是在主线程上执行的,如果浏览器不断的重排、重绘,浏览器会在每一帧(浏览器滚动是以帧为单位的动画)上都进行计算布局、绘制的操作。若在上一帧的js还没有执行完,就滚动到了下一帧,会导致下一帧动画没有及时渲染,就会造成页面卡顿。
SafeBrowsing(谷歌内部的站点安全系统):通过检查该站点的数据来检测该站点是否安全,比如通过查看站点IP是否在谷歌的黑名单之内。