热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最大限度的减少浏览器的重新布局(Reflow&Repaint)

减少浏览器重新布局是优化web性能的一个重要手段。这是因为重新布局是浏览器在请求网络资源后所做的一个必要的工作,这也是浏览器渲染web页面的重要机制(详情可参考浏览器的运行原理)。

减少浏览器重新布局是优化web性能的一个重要手段。这是因为重新布局是浏览器在请求网络资源后所做的一个必要的工作,这也是浏览器渲染web页面的重要机制(详情可参考浏览器的运行原理)。在浏览器获得新的资源后,它会重新计算文档中个元素的位置和形状,以便刷新web页面(可以是部分内容,也可以是全部),这个过程就是重新布局,有的人把这个过程称为web页面的重绘。

但是在重新布局的过程中,浏览器会阻止用户在浏览器中的其它操作,那么很显然,了解重新布局对于提升web应用的性能很重要,尤其是它可以显著的提升用户的体验效果。当然除了了解重新布局外,我们还需要了解各种文档属性对浏览器重新布局的影响因素,如:DOM深度、CSS规则,以及样式的改变等。

有的时候,对HTML文档中的单个元素进行重新布局可能会影响到它的父级元素,或者它的兄弟元素,以及它的子元素的重新布局。

触发浏览器重新布局的因素

  1. 用户操作
  • 页面的初始化加载
  • 调整浏览器窗口的大小
  1. HTML文档修改
  • 使用js修改样式而引起的计算,如:margin: 0 auto;
  • 在DOM中添加或移除元素
  • 修改某个元素的类(class & id)

那么,有没有一个规范可以缩短页面进行重新布局的呢?答案是肯定的。

减少浏览器重新布局的规范

  1. 减少不必要的 DOM 深度。在 DOM 树中的一个级别进行修改可能会致使该树的所有级别(上至根节点,下至所修改节点的子级)都随之变化。这会导致花费更多的时间来执行重排。
  2. 尽可能减少 CSS 规则的数量,并移除未使用的 CSS 规则。
  3. 如果你想进行复杂的渲染修改(如:动画),请在浏览器重新布局流程外执行此操作。你可以使用 position-absolute 或 position-fixed 来实现此目的。
  4. 避免使用不必要且复杂的 CSS 选择器,尤其是后代选择器,因为此类选择器会消耗更多的 CPU 处理能力来执行选择器匹配。

具体的开发中要注意的地方可参考下面两篇文章,它们会告诉你如何书写css会有效减少浏览器重新布局。

参考资料

前端性能优化:细说浏览器渲染的重排与重绘

回流 & 重绘:CSS性能让你的Javascript慢了吗?


推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 绑定完成的汗青绑定的基础是propertyChange事宜。怎样得知viewModel成员值的转变一直是开辟MVVM框架的主要题目。主流框架的处置惩罚有一下三大类:别的开辟一套AP ... [详细]
  • 媒介这里大部份是本身碰到过的状况,另有一部份自创了偕行的文章,假如人人有碰到别的坑,迎接提出来一同研讨。学问要点1.Meta标签1.制止用户缩放页面,页面强迫让文档的宽度与装备的宽 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
author-avatar
小刺猬HF
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有