MarginLon MarginLon
首页
  • Web

    • Web基础
    • Web布局
    • CodeSnippet
  • Vue

    • Vue
  • React

    • React
  • Node.js

    • Node.js
  • 技术文档
  • UI组件库
  • 动画库
  • 图形库
  • 桌面端
  • 学习笔记
  • 生活笔记
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

MarginLon

http://info.cern.ch
首页
  • Web

    • Web基础
    • Web布局
    • CodeSnippet
  • Vue

    • Vue
  • React

    • React
  • Node.js

    • Node.js
  • 技术文档
  • UI组件库
  • 动画库
  • 图形库
  • 桌面端
  • 学习笔记
  • 生活笔记
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据类型 类型检测 类型转换
  • 精度问题
  • 堆栈内存 函数底层运行机制 块级作用域
  • GC机制 闭包作用域 let/const/var
  • 闭包应用
  • DOM
  • BOM
  • This指向
  • 浏览器渲染机制 CRP优化 事件循环机制
    • 1.浏览器渲染机制 CRP优化
    • 2.事件循环机制
  • 函数防抖节流
  • 模块化 柯里化
  • 构造函数 原型
  • CLASS
  • 工厂设计模式 深浅拷贝 深浅合并
  • Iterator/Generator
  • Promise/ Async/ Await
  • HTTP/跨域
  • API
  • AJAX
  • 事件
  • 《JavaScript高级程序设计(第4版)》
MarginLon
2022-04-13
目录

浏览器渲染机制 CRP优化 事件循环机制

  • 1.浏览器渲染机制 CRP优化
  • 2.事件循环机制

# 1.浏览器渲染机制 CRP优化

  • 从服务器基于HTTP网络请求回来的数据

    • 16进制的文件流
    • 浏览器解析 => HTML字符串
    • 按照W3C规则识别为HTML标签
    • 节点Nodes
    • 生成DOM树
  • 浏览器线程:

    • GUI渲染线程
    • JS引擎线程
    • HTTP线程
    • 定时器监听线程
    • DOM监听线程
    • ...
  • 访问页面,请求回来一个HTML文档,浏览器自上而下渲染

    • 遇到style,GUI直接渲染
      • 少量CSS可以内嵌
    • 遇到link,HTTP线程请求资源文件信息,同时GUI继续向下渲染
      • HTTP请求有数量限制,越少越好,link放在头部,为了在没有渲染DOM时,通知HTTP请求CSS,提高渲染速度。
    • 遇到@import, HTTP线程请求资源文件信息,GUI暂时停止。
      • 避免使用@import
  • 遇到<script src = 'xxx.js'>,阻碍GUI继续渲染。

    • defer:请求JS资源是异步的,GUI渲染完,JS渲染
    • async:请求JS资源是异步的,此时GUI继续渲染,JS请求回来,GUI暂停,JS渲染
    • 多个JS请求按顺序渲染,但设置async时,先请求回先渲染
    • js放在底部,防止GUI被阻止,放在非底部尽量设置defer/async defer和async
  • Webkit浏览器预测解析:chrome的预加载扫描器html-preload-scanner通过扫描节点中的 “src” , “link”等属性,找到外部连接资源后进行预加载,避免了资源加载的等待时间,同样实现了提前加载以及加载和执行分离。

  • DOM Tree(DOMContentLoaded事件触发) => 执行JS? => CSSOM Tree -> RENDER TREE渲染树 -> Layout布局计算[回流/重排] -> Painting绘制[重绘]{ 分层绘制 }

    • 页面第一次渲染,必定一次回流和重绘
    • 如果元素的位置和大小改变,浏览器需要重新计算在视口中的位置和大小信息,重新计算的过程时回流重绘
    • 普通样式改变,位置和大小不变,只需要重绘
  • 减少回流:

    • 基于vue/react
    • 分离读写操作
      • 新浏览器:渲染队列 => 1.修改样式的代码结束 2.遇到获取元素样式的代码 => 触发回流重绘
    • 样式集中改变
    • 元素批量修改
      • createDocumentFragment()
      • 模板字符串拼接
    • 动画应用到absoluted和fixed的元素上,脱离文档流

# 2.事件循环机制

JS:单线程异步编程

  • EventLoop
  • EventQueue
  • WebAPi
  • macrotask
    • 定时器
    • 事件队列
    • xmlHttpRequest/Fetch
    • setImmediate [Node]
    • ...
  • microtask
    • requestAnimationFrame
    • Promise.then/catch/finally
    • async/await
    • queueMicrotask
    • process.nextTick [Node]
    • MutationObsever
    • ... 宏任务微任务
编辑 (opens new window)
上次更新: 2023/04/01, 15:26:22
This指向
函数防抖节流

← This指向 函数防抖节流→

最近更新
01
KnockoutJS
11-12
02
综述
10-17
03
前言
10-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 MarginLon | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式