如何系统地优化页面性能
创始人
2024-05-26 07:23:45
0

页面优化,其实就是要让页面更快地显示和响应。由于一个页面在它不同的阶段,所侧重的关注点是不一样的,所以如果要讨论页面优化,就要分析一个页面生存周期的不同阶段。

通常一个页面有三个阶段:加载阶段、交互阶段和关闭阶段

  • 加载阶段,是指从发出请求到渲染出完整页面的过程,影响到这个阶段的主要因素有网络和 JavaScript 脚本。
  • 交互阶段,主要是从页面加载完成到用户交互的整合过程,影响到这个阶段的主要因素是 JavaScript 脚本。
  • 关闭阶段,主要是用户发出关闭指令后页面所做的一些清理操作。

如何来进行页面优化,一个大的原则就是让单个帧的生成速度变快

1. 减少 JavaScript 脚本执行时间

有时 JavaScript 函数的一次执行时间可能有几百毫秒,这就严重霸占了主线程执行其他渲染任务的时间。针对这种情况我们可以采用以下两种策略:

  • 一种是将一次执行的函数分解为多个任务,使得每次的执行时间不要过久。
  • 另一种是采用 Web Workers。你可以把 Web Workers 当作主线程之外的一个线程,在 Web Workers 中是可以执行 JavaScript 脚本的,不过 Web Workers 中没有 DOM、CSSOM 环境,这意味着在 Web Workers 中是无法通过 JavaScript 来访问 DOM 的,所以可以把一些和 DOM 操作无关且耗时的任务放到 Web Workers 中去执行。

总之,在交互阶段,对 JavaScript 脚本总的原则就是不要一次霸占太久主线程。

2. 避免强制同步布局

所谓强制同步布局,是指 JavaScript 强制将计算样式和布局操作提前到当前的任务中。

3. 避免布局抖动

还有一种比强制同步布局更坏的情况,那就是布局抖动。所谓布局抖动,是指在一次 JavaScript 执行过程中,多次执行强制布局和抖动操作。

4. 合理利用 CSS 合成动画

合成动画是直接在合成线程上执行的,这和在主线程上执行的布局、绘制等操作不同,如果主线程被 JavaScript 或者一些布局任务占用,CSS 动画依然能继续执行。所以要尽量利用好 CSS 合成动画,如果能让 CSS 处理动画,就尽量交给 CSS 来操作。另外,如果能提前知道对某个元素执行动画操作,那就最好将其标记为 will-change,这是告诉渲染引擎需要将该元素单独生成一个图层。

5. 避免频繁的垃圾回收

JavaScript 使用了自动垃圾回收机制,如果在一些函数中频繁创建临时对象,那么垃圾回收器也会频繁地去执行垃圾回收策略。这样当垃圾回收操作发生时,就会占用主线程,从而影响到其他任务的执行,严重的话还会让用户产生掉帧、不流畅的感觉。

所以要尽量避免产生那些临时垃圾数据。那该怎么做呢?可以尽可能优化储存结构,尽可能避免小颗粒对象的产生。

此文章为2月Day14学习笔记,内容来源于极客时间《浏览器工作原理与实践》,推荐该课程。

相关内容

热门资讯

灿辉·晶萃173美学样板间品鉴... (转自:上海楼市情报)7月2日,徐泾一场美学样板间的媒体品鉴会,揭开了大虹桥高端人居新纪元。在无数期...
2025年第二批IPO现场检查...   来源:投行最前线  7月3日,中国证券业协会公布了2025年第二批IPO现场检查名单,本次共抽查...
时政微观察丨青年大有可为   7月2日,中华全国青年联合会第十四届委员会全体会议、中华全国学生联合会第二十八次代表大会隆重开幕...
人乐退:公司股票将在7月4日被... 上证报中国证券网讯(记者骆民)人乐退公告,公司股票已被深圳证券交易所决定终止上市。公司股票于2025...
天航一客机滑行时发出巨响,乘客... 7月2日,有网友发视频称,从呼和浩特飞往乌海的天津航空 GS7833次航班飞机在滑行时发出一声巨大声...
持牌消金转型深水区:上半年19... 中经记者 郑瑜 北京报道在宏观经济持续推动消费复苏的背景下,消费金融被认为是金融服务与实体消费的关键...
黄河再添新大桥!宁夏中卫黑山峡... 原标题:黄河再添新大桥!宁夏中卫黑山峡黄河大桥主桥顺利合龙来源:人民日报客户端7月3日,随着最后一块...
化解跨国企业数据本地化痛点 辉... 中经记者 谭伦 上海报道随着AI与云技术的演进融合,在全球企业加速数字化转型的浪潮中,数据基础设施建...
润欣科技:截至6月30日公司的... 证券日报网讯润欣科技7月3日在互动平台回答投资者提问时表示,截至6月30日,公司的股东人数是83,4...
美元人民币盘中上涨102点 07月03日消息,美元人民币盘中上涨102点,涨幅0.14%,截止20:48,报7.1724。