浏览器导航渲染流程(从输入 URL 到页面展示,这中间发生了什么

2021-02-25  本文已影响0人  一个记事本

转自---> 前端食堂

这是一道十分常见的面试题

image.png

流程

浏览器的网络进程会先查找缓存中是否存在该资源,有的话直接返回,如果没有的话会发起 URL 请求

image.png

目前 Chrome 的浏览器包括如下进程:

HTML渲染流程

    在上图中一并画了出来,需要经过以下几个阶段:构建 DOM 树--->样式计算--->布局--->分层--->绘制--->分块--->光栅化--->合成

DNS

DNS 的解析是一个递归流程,顺序如下图中数字标记所示:


image.png

JS 栈 垃圾数据回收

function hello () {
    let name = '数据'
}
hello()
console.log(name) // Uncaught ReferenceError: name is not defined   在执行上下文时,存放在栈内存中的name地址和数据【内存块】已经回收掉了,所以在全局上下文中是访问不到。
function hello () {
    let name = '前端食堂'
    let food = { name: '回锅肉' } 
    function world () {
        var description = { slogan: '吃好每一顿饭' }
    }
    world()
}
hello()

上面的代码所对应的内存堆栈空间如下图所示:


image.png

栈中的垃圾回收比较简单,当一个函数执行结束后,JavaScript 引擎会通过向下移动 ESP 来销毁函数调用栈中所保存的执行上下文,ESP 就是记录当前执行状态的指针。

为了降低全停顿所带来的卡顿,V8 引擎采用了增量标记(Incremental Marking) 算法进行优化,将标记过程分为一个个小任务,这些小任务的执行时间比较短,可以穿插在其他的 JavaScript 任务中间执行,这样就不会有明显的卡顿了。

当然,V8 所采用的优化方案不只这一种,而是多种方案综合使用的,除了增量回收还有并行回收、并发回收等。

并行回收:垃圾回收器会使用多个辅助线程来并行执行垃圾回收
并发回收:回收线程在执行 JavaScript 的过程中,辅助线程在后台执行垃圾回收
如果你了解【** React 的 Concurrent 模式中时间切片的原理 **】,它的实现思想是不是与增量标记算法有异曲同工之妙呢。

上一篇 下一篇

猜你喜欢

热点阅读