浏览器渲染与内核
时间:2022-07-24
本文章向大家介绍浏览器渲染与内核,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
浏览器渲染与内核
浏览器内核可以分成两部分:渲染引擎与JS
引擎。最开始渲染引擎与JS
引擎并没有明确的区分,但随着JS
引擎越来越独立,内核就越来越倾向于只指渲染引擎。
渲染过程
不同浏览器内核的渲染方式不同,但整体流程基本一致
- 自上而下,首先解析
HTML
标签,生成DOM Tree
- 在解析到
<link>
或者<style>
标签时,开始解析CSS
,生成CSSOM
,值的注意的是此时解析HTML
标签与解析CSS
是并行执行的 - 当遇到
<script>
标签后,浏览器会立即开始解析脚本,并停止解析文档,因为脚本有可能会改动DOM
与CSS
,继续解析会浪费资源,所以应当将<script>
标签放于<body></body>
后 - 当
DOM Tree
与CSSOM
生成后,将两者结合进行布局,计算它们的大小位置等布局信息,形成一个能够表示这所有信息的内部表示模型,可称为渲染树render tree
- 根据计算好的信息绘制整个页面,系统会遍历渲染树,并调用
paint
方法,将内容显示在屏幕上。
重绘
当render tree
中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color
,则就叫称为重绘。
回流
当render tree
中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流,也可以称为重新布局。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建render tree
。
内核
-
IE
浏览器:Trident
内核,也是俗称的IE
内核 -
Chrome
浏览器:统称为Chromium
内核或Chrome
内核,以前是Webkit
内核,现在是Blink
内核 -
Firefox
浏览器:Gecko
内核,俗称Firefox
内核 -
Safari
浏览器:Webkit
内核 -
Opera
浏览器:最初是自己的Presto
内核,后来是Webkit
,现在是Blink
内核
JS引擎
JS
引擎的作用比较统一,在浏览器的实现中必须含有DOM
(文档对象模型,是W3C
组织推荐的处理XML
的标准编程接口)和BOM
(浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象,例如window
对象)。浏览器一般使用公共API
来创建对象来负责将DOM
对象反射进JavaScript
。JS
引擎负责对JavaScript
进行解释、编译和执行,以使网页达到一些动态的效果。
引擎
-
Chrome
浏览器:V8
引擎 -
Safari
浏览器:JavaScriptCore
引擎 -
Firefox
浏览器:TraceMonkey
引擎 -
Opera
浏览器:Carakan
引擎 -
IE3~IE8
浏览器:JScript
引擎 -
Edge
浏览器:Chakra
引擎
参考
https://segmentfault.com/a/1190000010298038
https://imweb.io/topic/56841c864c44bcc56092e3fa
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 路径寻优
- Milvus 实战 | 基于 Milvus 的 CORD-19 论文检索引擎
- Laravel 8 新特性和功能优化速览
- Linux 搭建 我的世界(MC) 基岩版服务器
- 虚函数、析构函数、静态函数、多态
- 一日一技:pylint除了检查代码风格,还能做这件事情
- Manjaoro ifconfig问题
- 面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!
- 内网渗透 | 内网中的信息收集
- 通过命令下载执行恶意代码的几种姿势
- CS如何配置通过CDN上线
- Height transition
- 【DB笔试面试861】在Oracle中,有哪些常见组件?
- 【DB笔试面试862】在Oracle中,如何安装DBMS_NETWORK_ACL_ADMIN包?
- 【DB宝19】在Docker中使用MySQL高可用之MHA