- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
PAGE1
PAGE1
前端性能优化:减少重绘和重排:图片优化:减少重绘与重排的策略
1前端性能优化基础
1.1理解浏览器渲染流程
在探讨前端性能优化之前,理解浏览器如何渲染页面是至关重要的。浏览器的渲染流程可以分为以下几个关键步骤:
解析HTML:浏览器从上到下解析HTML文档,构建DOM树。
解析CSS:同时,浏览器解析CSS样式,创建CSSOM(CSS对象模型)。
构建渲染树:将DOM树和CSSOM结合,创建渲染树,其中包含了所有可见元素及其样式。
布局:计算元素的几何信息,如位置、大小等,这个过程称为布局或回流(reflow)。
绘制:将渲染树中的信息绘制到屏幕上,这个过程称为重绘(repaint)。
复合:如果页面包含透明层或使用了CSS3D变换,浏览器会进行层的复合,将不同层的内容合并到最终的屏幕上。
1.1.1重绘与重排的概念与影响
重排(Reflow)
重排发生在布局阶段,当页面的几何信息发生变化时,如元素尺寸、位置或内容的改变。这通常是因为:
添加或删除DOM元素。
元素尺寸或位置的CSS属性改变。
内联元素的文本内容变化。
重绘(Repaint)
重绘发生在绘制阶段,当元素的视觉属性发生变化,但其几何信息保持不变时。这可能由于:
背景颜色或图像的改变。
边框颜色或样式的改变。
元素的可见性变化。
1.1.2减少重绘与重排的策略
使用CSS动画代替JavaScript动画
示例代码:
/*使用CSS动画*/
.example{
transition:background-color0.5sease;
}
//使用JavaScript动画
letelement=document.querySelector(.example);
element.style.backgroundColor=red;
解释:CSS动画和过渡可以由浏览器的GPU加速,而JavaScript动画通常需要CPU处理,这可能导致更频繁的重排和重绘。
利用will-change属性
示例代码:
.example{
will-change:transform;
}
解释:will-change属性告诉浏览器预期元素的哪些属性可能会改变,从而让浏览器提前优化这些属性的渲染。这可以减少不必要的重排和重绘。
避免使用position:absolute和position:relative
示例代码:
/*避免使用*/
.example{
position:absolute;
left:0;
top:0;
}
解释:绝对定位和相对定位的元素会触发重排,因为它们可能会影响其他元素的位置。尽量使用position:fixed或position:sticky,或者使用Flexbox和Grid布局来避免重排。
使用translate3d或translateZ
示例代码:
.example{
transform:translate3d(10px,20px,0);
}
解释:使用translate3d或translateZ可以将元素置于自己的图层上,从而避免影响其他元素的重排。这在动画元素时特别有用。
利用display:contents
示例代码:
.parent{
display:contents;
}
解释:display:contents使元素表现得像其内容直接是其父元素的子元素,这可以减少DOM树的深度,从而减少重排。
避免强制同步布局
示例代码:
letelement=document.querySelector(.example);
element.offsetWidth;//强制同步布局
解释:访问某些DOM属性,如offsetWidth、offsetHeight等,会触发浏览器的同步布局,导致页面性能下降。尽量避免在性能敏感的代码中使用这些属性。
使用requestAnimationFrame
示例代码:
letelement=document.querySelector(.example);
functionanimate(){
element.style.transform=`translateX(${Math.sin(Date.now()/1000)*50}px)`;
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
解释:requestAnimationFrame确保动画在下一帧渲染前执行,这比使用setTimeout或setInterval更高效,因为它与浏览器的刷新率同步,减少不必
您可能关注的文档
- 前端框架和库:D3.js:D3.js与响应式设计.docx
- 前端框架和库:D3.js:D3.js中的动画与过渡.docx
- 前端框架和库:D3.js:D3.js中的色彩与样式.docx
- 前端框架和库:D3.js:SVG图形绘制基础.docx
- 前端框架和库:D3.js:数据绑定与更新模式.docx
- 前端框架和库:D3.js:数据可视化基础理论.docx
- 前端框架和库:D3.js:数据可视化中的交互技术.docx
- 前端框架和库:D3.js:轴与刻度绘制.docx
- 前端框架和库:jQuery:jQueryAjax请求与数据处理.docx
- 前端框架和库:jQuery:jQueryDOM操作与动画效果.docx
- 前端性能优化:减少重绘和重排:异步渲染与requestAnimationFrame详解.docx
- 前端性能优化:减少重绘和重排:优化JavaScript:避免强制同步布局.docx
- 前端性能优化:减少重绘和重排:字体加载与优化:避免FOIT与FOUT.docx
- 前端性能优化:减少重绘和重排的布局算法与技巧.docx
- 前端性能优化:懒加载:CSS懒加载策略与实践.docx
- 前端性能优化:懒加载:JavaScript懒加载技术详解.docx
- 前端性能优化:懒加载:懒加载原理与实现机制.docx
- 前端性能优化:懒加载:懒加载在移动端的优化策略.docx
- 前端性能优化:懒加载:视频懒加载优化技巧.docx
- 前端性能优化:懒加载常见问题与解决方案.docx
文档评论(0)