首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浏览器层面优化前端性能(2):Reader引擎线程与模块分析优化点

Reader 引擎线程与模块分析首先是网页内容,加载完输入HTML解释器,解释后构成DOM树,这期间如果遇到JavaScript代码就交给JavaScript引擎去处理,如果网页中包含CSS,就交给CSS...解释器;DOM树简历时候,渲染引擎接收来自CSS解释器样式信息,构建一个新你日不会吐模型,该模型由布局模块计算模型内部各个元素位置和大小信息渲染流程有四个主要步骤:解析HTML生成DOM树 -...这种绘制方式好处是,使用tranforms来实现移动效果元素将会被正常绘制,同时不会触发对其他元素绘制。...减少绘制区域通常需要对动画效果进行精密设计,以保证各自绘制区域之间不会有太多重叠,或者想办法避免对页面中某些区域执行动画效果。...性能方面考虑,最理想渲染流水线是没有布局和绘制环节,只需要做渲染层合并即可:之前也参看:《关于css3之transform一些坑总结-transform对普通元素N多渲染》对用户输入事件处理去抖动避免使用运行时间过长输入事件处理函数

1.2K20

浏览器渲染原理及流程

这种绘制方式好处是,使用transform来实现移动效果元素将会被正常绘制,同时不会触发其他元素绘制。 2....减少绘制区域,简化绘制复杂度 浏览器会把相邻区域渲染任务合并在一起进行,所以需要对动画效果进行精密设计,以保证各自绘制区域不会有太多重叠。...使用transform/opacity实现动画效果 使用transform/opacity实现动画效果,会跳过渲染流程布局和绘制环节,只做渲染层合并。...提升动画效果中元素 应用动画效果元素应该被提升到其自有的渲染层,但不要滥用。...避免使用运行时间过长输入事件处理函数 理想情况下,当用户和页面交互,页面的渲染层合并线程将接收到这个事件并移动元素。这个响应过程是不需要主线程参与,不会导致JavaScript、布局和绘制过程发生。

4.5K32
您找到你想要的搜索结果了吗?
是的
没有找到

解读新一代 Web 性能体验和质量指标

LCP 考虑哪些元素 LCP 目前并不会计算所有元素,因为这样会使这个指标变得非常复杂,它现在只关注下面的元素元素 元素元素 元素 通过 url...页面上最大元素绘制面积最大元素,所谓绘制面积可以理解为每个元素在屏幕上 “占地面积”,如果元素延伸到屏幕外,或者元素被裁切了一部分,被裁切部分不算入在内,只有真正显示在屏幕里才算数。...如果元素被删除,LCP算法将不再考虑该元素,如果被删除元素刚好是 “绘制面积” 最大元素,则使用新绘制面积” 最大元素创建一个新性能条目。...例如,以下所有 HTML 元素都需要在响应用户交互之前等待主线程上正在进行任务完成: 文本输入框,复选框和单选按钮(,) 选择下拉菜单() 链接(<a...,所以回调函数中提供了下面三个参数: name:指标名称 id:本地分析id delta:当前值和上次获取值差值 因此你只需要每次上报 delta (当前值和上次获取值差值),而不需要报告新值。

1.9K31

深度剖析浏览器渲染性能原理,你到底知道多少

为了保证页面的渲染效果,需要充分了解浏览器是如何处理HTML/JavaScript/CSS。 渲染流程分为几步? ?...优化 JavaScript 执行效率 降低样式计算范围和复杂度 避免大规模、复杂布局 简化绘制复杂度、减少绘制区域 优先使用渲染层合并属性、控制层数量 对用户输入事件处理函数去抖动(移动设备)...这种绘制方式好处是,使用transform来实现移动效果元素将会被正常绘制,同时不会触发其他元素绘制。...减少绘制区域 浏览器会把相邻区域渲染任务合并在一起进行,所以需要对动画效果进行精密设计,以保证各自绘制区域不会有太多重叠。...这个响应过程是不需要主线程参与,不会导致JavaScript、布局和绘制过程发生。 ?

1.3K20

CSS animation和transition性能探究

这两个线程一起工作完成绘制页面的任务: 主线程 合成线程 主线程需要做任务如下: 运行Javascript 计算HTML元素CSS样式 layout (relayout) 将页面元素绘制成一张或多张位图...在很长一段时间内,主线程都在忙于运行Javascript绘制大型元素。...当它忙碌时候,它就没空响应用户输入了。 换个角度说,合成线程一直在尝试保证对用户输入响应。它会在页面改变时每秒绘制60次页面,即使页面还不完整。...那么为什么transform动画会和height动画差别这么大呢? 依据规范,CSS transform属性并不会触发当前元素或附近元素relayout。...设计意图 所以这是否意味着我们不应该使用height动画呢? 当然不是。有时这就是设计需求,并且动画也可以足够快。可能你元素是隔离,并且不会导致其他部分页面触发relayout。

1.3K10

看不完那种!前端170面试题+答案学习整理(良心制作)

它有三个属性: 1. border-box表示背景边框开始绘制 2. padding-box表示背景在边框内部绘制 3. content-box表示背景内容部分绘制 background-origin...27.如何用原生JavaScript实现jqueryready方法 $(document).ready()在dom绘制完毕后就执行,而不必等到页面加载完毕。...BFC 类似一个“结界”,如果一个 DOM 元素具有 BFC,那么它内部元素不会影响外面的元素;外面的元素不会影响到其内部元素。...重绘是指一个元素外观改变所触发浏览器行为,浏览器会根据元素新属性重新绘制,使元素呈现新外观。 触发重绘条件:改变元素外观属性。...它和async区别是,同样在HTML解析期间下载外部js文件,但是下载完成后不会立即执行js脚本文件,而是等到HTML解析完成后才执行它。

11.4K50

前端性能优化之谈谈常见性能指标及上报策略

/dom/mutationobserver.html 注意 FP与FCP这两个指标之间主要区别是:FP是当浏览器开始绘制内容到屏幕上时候,只要在视觉上开始发生变化,无论是什么内容触发视觉变化,在这一刻...相比之下,FCP指的是浏览器首次绘制来自DOM内容。例如:文本,图片,SVG,canvas元素等,这个时间点叫FCP。 FP和FCP可能是相同时间,也可能是先FP后FCP。...然后,自定义一个计算公式,比如根据元素类型进行权重取值(div 权重1,img 权重2等), 然后取元素与可视区域交叉区域面积、可见度、 权重值之间乘积为元素评分。...FID 含义 FID,全称 First Input Delay,翻译为首次输入延迟,是测量用户首次与您站点交互时时间(即当他们单击链接/点击按钮/使用自定义JavaScript驱动控件时)到浏览器实际能够回应这种互动时间...(click/touch/keydown)绑定通用统计逻辑事件,开始调用时event.timeStamp取开始处理时间(这个时间就是首次输入延迟时间),在事件处理中注册requestIdleCallback

2.6K10

要实现60FPS动画, 你需要了解这些

JavaScript: 执行 JavaScript 来触发一些视觉变化效果 Style: 计算元素匹配 css 选择器, 应用各规则计算元素最终样式 Layout: 根据元素样式, 计算元素占据空间大小和在屏幕中所处位置...Paint: 向元素可视部分填充像素, 包括文本 / 图像 / 边框 / 阴影, 绘制一般是在多个层上完成 Composite: 将不同层按正确顺序绘制到屏幕上 要保证60FPS, 需要在 16ms...CSS 动画省略了 JavaScript 执行耗时, 只用了 0.49ms 时间就完成了一帧绘制 接下来思考一个问题, 如果主线程被阻塞了, CSS动画会有什么表现呢?...image 利用硬件加速优化 CSS 动画 使用硬件加速是很简单, 只需要把动画中变化属性, margin-left 改为 transform 即可 @keyframes animate {...使用硬件加速后, 绘制过程将不再占用主线程, 直接在 GPU 上完成 因此, 点击按钮阻塞主线程, 也并不会影响动画, 你可以亲自试一试 使用 JS 动画 首先使用 setInterval 实现动画循环

1.2K10

【Web动画】CSS3 3D 行星运转 && 浏览器渲染原理

绘制渲染树(Painting) 简单解释一下,通过请求得到 HTML 经过解析(HTML parser)生成 DOM Tree。...如果内容不会改变,那么就没有必要重绘(repaint)层。 这样做意义在于:花在重绘上时间可以用来做别的事情,例如运行 JavaScript,如果绘制时间很长,还会造成动画故障与延迟。...层在第一次被绘制出来之后将不会被改变,但对于 Web 动画,页面的 DOM 元素是在不断变换,如果层内容在变换过程中发生了改变,那么层将会被重绘(repaint)。...总结 那么浏览器是如何 DOM 元素到最终动画展示呢?...改变元素 width 可能比改变其 transform 要多一些开销。如 box-shadow 属性,渲染角度来讲十分耗性能,原因就是与其他样式相比,它们绘制代码执行时间过长。

2.5K70

面试题之敲入 URL 到浏览器渲染完成

它会历史记录,书签等地方,找到已经输入字符串可能对应 url ,找到同输入地址很匹配项,然后给出智能提示,让你可以补全 url 地址。...布局 render 树( Layout / reflow ),负责各元素尺寸、位置计算 5. 绘制 render 树( paint ),绘制页面像素信息 6....2.5.1 构造 DOM 树 浏览器在解析html文件时, 是WebKit 中 HTML 解释器将网络或者本地磁盘获取 HTML 网页和资源字节流解释成 DOM 树结构。具体过程如下 : ?...当网页有用户交互或者动画等动作时候,通过 CSSDOM 等技术,JavaScript 代码同样可以非常方便地修改 CSS 代码,WebKit 此时需要重新解释样式并重复以上这一过程。...布局计算是一个递归过程,因为一个节点大小通常需要先计算它子女节点位置,大小等信息。 当用户 网页动画、翻滚网页、JavaScript 代码通过 CSSDOM 等操作时还会有重新布局。

72210

现代浏览器探秘(part3):渲染

HTML标准(https://html.spec.whatwg.org/)将HTML文档解析为DOM。 你可能已经注意到,将HTML提供给浏览器从不会引发错误。 例如,缺少结束标记是有效HTML。...图8:页面元素HTML标记顺序出现,会导致错误渲染图像,因为没有考虑z-index 在此绘制步骤中,主线程遍历布局树以创建绘制记录。...绘制记录是绘制过程一个注释,如“背景优先,然后是文本,最后是矩形”。 如果你使用JavaScript绘制元素,那么可能对此过程很熟悉。 ?...图10:DOM + Style,布局和绘制生成顺序 如果要为元素设置动画,则浏览器必须在每个帧之间运行这些操作。...图13:在动画时间轴上运行较小JavaScript块 合成 你会如何绘制一个页面? 现在浏览器知道文档结构,每个元素样式,页面的几何形状和绘制顺序,它是如何绘制页面的?

1.3K10

IT课程 HTML基础 015_HTML5新特性

、nav、section 新表单控件,比如 calendar、date、time、email、url、search HTML5 元素用于在网页中绘制图形。... 元素基于 JavaScript 绘图 API,可以用于创建各种图形,包括图表、图形、动画等。...SVG 图形还可以使用 CSS 和 JavaScript 进行操作和动画化。 Canvas 是基于 JavaScript 绘图 API,可以创建位图图形。...这意味着 Canvas 图形不能无损缩放,但可以使用 JavaScript 创建更复杂图形。Canvas 图形还可以使用 JavaScript 进行操作和动画化。...JavaScript 进行操作和动画图形 Canvas 适用于场景: 需要创建复杂图形场景,例如游戏、动画 需要使用 JavaScript 进行复杂操作场景 HTML5表单 HTML5 引入了一些新输入类型和属性

7310

HTMLCSSJS 是如何在浏览器中,渲染成你看到页面?【图解Chrome】

HTML 文档解析成 DOM 是完全依照于 HTML 协议。并且在 HTML 协议中,浏览器不会对错误 HTML 进行错误提示。例如,缺少结束 标签时,这依然是一个有效 HTML。...[image.png] 例如:z-index属性将改变元素层级,在这种情况下,按 HTML 中编写元素顺序进行绘制,将导致渲染结果和预期不符。...例如,如果布局树中某些内容发生变动,则需要为文档中受影响部分,重新生成“绘制记录”。 [image.png] 为元素设置动画,浏览器必须在每一帧之间执行这些操作。...[image.png] 如图所示,在动画时间轴上,运行较小 JavaScript 块。 #合成(Compositing) #如何绘制一个页面?...如果需要再次计算不会或者重新绘制,则必须涉及到主线程。 小结 在这篇文章中,我们研究了解析到合成渲染流程,更多关于网站优化问题可以关注一下。

4.7K50

Canvas学习系列一:初识canvas

1. canvas介绍 Canvas元素出现,可以说开启Web世界绘制动画,图形大门,其功能非常强大 canvas 元素HTML5中功能最强大元素,它能力主要是通过Canvas中Context...该对象canvas本身获取。...当我们用canvas属性width,height时实际上我们同时修改了元素大小与绘图表面的大小 当我们用CSS来设定时,是会修改canvas元素大小,不会影响绘图表面的大小,这时浏览器就会对绘图表面缩放...,可以 0 到 1 区间内选择图片质量。   ...Chrome支持“image/webp”类型 尽管在默认情况下canvas对象是一副位图,但是并不是HTMLimg元素,所以我们可以利用toDataURL方法创建一幅表示canvas图像;也可以利用此方法创建和操作缓冲

1.1K30

「一道面试题」输入URL到渲染全面梳理中-页面渲染篇

绘制 或 栅格化 绘制 过程中有一种绘制叫 重绘,也就是下我们要说 重绘(Repaint) 元素发生改变只是影响了元素一些外观之类时候(例如,背景色,边框颜色,文字颜色等),此时只需要应用新样式绘制这个元素就可以了...( Chrome ) 最常用方式是 transform opacity 属性 / 过渡动画 (需要动画执行过程中才会创建合成层,动画没有开始或结束后元素还会回到之前状态) will-chang...最好用完后就释放) 等元素 还有以前 flash 插件等等 通俗一点,假如我们给一个元素加了 transform 属性吧,那么该元素不会影响也不会依赖文档流,也不会造成重绘...对您有帮助的话,动动小手,点个在看鼓励下吧,当然,个人理解,如有不正,欢迎指出,不胜感激 ❝参考 ( 参考了很多帖子,贴了三个认为比较好,推荐大家看一看 ) 输入URL到页面加载过程?...hl=zh-cn#set-the-viewport [3]输入URL到页面加载过程?

75620

像素是怎样练成

也就是在上面架构图中content ❞ 常见类型包括文本、图像、HTML元素(包围文本标记语言)、CSS(定义HTML元素表现方式)和JavaScript(可以「动态修改上述所有内容」)。...❝可以看到「一个真实网页是由数千行HTML、CSS和JavaScript代码纯文本形式所组成」 网页「源代码是渲染器Renderer输入」 ❞ ---- 何为像素Pixels ❝像素Pixels...色相取值范围是0到360,饱和度和亮度取值范围是0%到100% HSLA表示法 hsla(0, 100%, 50%, 0.5) 与HSL表示法类似,增加了一个Alpha通道来表示透明度,取值范围也是...0.0到1.0 ---- Chrome渲染过程是反复进行 ❝渲染过程可以被描述为:将 HTML/CSS/JavaScript等数据类型进行转换,并且输入到 OpenGL 以被调用,以显示像素。...下面我们直接看看在页面中通过新增不同动画效果而合成视觉效果 通过移动构建图层 通过滚动构建视图 通过Zoom(缩放)构建视图 ---- 合成线程接收输入事件 ---- 图层提升(Layer

22920

浏览器工作原理 - 页面

动画依然能执行原因) 分块 分层宏观上提升了渲染效率,分块则是微观层面提升了渲染效率。...利用分层技术优化代码 在于元素几何形状变换、透明度或者缩放操作,如果使用 JavaScript 来写,会牵涉整个渲染流水线,所以 JavaScript 绘制效率会非常低下。...这也是 CSS 动画JavaScript 动画高效原因。...CSS 动画依然能继续执行 要尽量利用好 CSS 合成动画,如果能让 CSS 处理动画,就尽量交给 CSS 来操作 如果知道某个元素将来可能执行动画操作,也可以通过标记 will-change 将元素抽取单独图层...DOM 和 CSS 进行隔离,实现元素和样式私有化 可以将影子 DOM 看做一个作用域,内部样式和元素不会影响到全局样式和元素 在全局环境下,要访问影子 DOM 内部样式或者元素需要通过约定好接口

82520

浏览器原理学习笔记05—浏览器中页面渲染

布局树结构是过滤不显示元素 DOM 树结构,渲染引擎会进行样式计算和计算布局完成布局树构建,最后进行绘制工作。...页面实现一些复杂动画效果等,如果没有采用分层机制,布局树直接生成目标图片,当每次页面有很小变化时都会触发重排或重绘机制,"牵一发而动全身"严重影响页面的渲染效率。...即便如此,计算机内存上传纹理到 GPU 内存操作还是会比较慢,Chrome 在首次合成图块时会先使用一个低分辨率图片并显示,然后合成器继续绘制正常比例网页内容,完成后替换当前显示低分辨率内容。...[mq0vfh3g9w.png] 图片、音频、视频等文件不会阻塞页面的首次渲染,而 JavaScript、首次请求 HTML 文件、CSS 文件会阻塞首次渲染(构建 DOM 需要 HTMLJavaScript...但是组件内 JavaScript不会隔离,因为 JavaScript 语言本身已经能够很好地实现组件化。

1.5K199

浏览器渲染之回流重绘

布局是一个递归过程。根渲染对象是HTML元素开始,然后递归遍历部分或全部树结构,每渲染对象都会调用需要进行布局子代 layout 或 paint 方法。...绘制顺序 绘制顺序其实就是元素进入堆栈样式上下文顺序。这些堆栈会后往前绘制,因此这样顺序会影响绘制。...网页布局模式意味着一个元素可能影响其他元素,例如 元素宽度一般会影响其子元素宽度以及树中各处节点,因此对于浏览器来说,布局过程是经常发生绘制绘制是填充像素过程。...2.JS / CSS > 样式 > 绘制 > 合成 如果修改了背景图片、文字颜色或阴影等不会影响页面布局属性,则浏览器会跳过布局,但是后面的绘制以及后面的流程还是会执行。...这使开发者能够在主事件循环上执行后台和低优先级工作,而不会影响延迟关键事件,如动画输入响应。

1.6K40
领券