3.5 向 60 fps 进发(一):JavaScript 优化、Styles 优化 及 Layout 优化

发布于 2022-04-27 12:35:13 字数 5378 浏览 1092 评论 0

不管 JS 还是 CSS 的部分,决定优化措施之前,先 profile 代码性能,找出瓶颈。这些东西是变化的,以实际性能分析数据说话。要养成「优化前先 profile」的意识

It’s important to use “tools not rules!” because architectures change and bugs get fixed. Memorizing rules isn’t going to cut it when that happens. - Paul Lewis

JavaScript

因为有 JIT 的存在,你写的代码并不一定就是执行的代码。你是猜不到的,所以尽量不要做 micro-optimizations,效率很低

尽快运行 JS。它可能会导致整个渲染流程重新开始,必须在最开始尽早跑完。animation 阶段只有16ms,除去浏览器的调度开支,你所能用的只有10ms,留给 JS 的只有3-4ms 左右

使用 WebWorker 多线程进行无论如何需要很长耗时的工作。它与主渲染线程不会互相影响,仅通过消息来通信,类似于订阅者模式

Styles 优化

下面的原则,涉及大量元素的改动、选择时才尤为明显。数据量小的应用随便玩都不会遇到性能瓶颈的,就可以随意点

  • 元素样式的改变,对性能的影响基本来说是线性的。也就是说,减少改动的元素,对性能有线性的改善作用

  • 有的「样式改变」对性能影响较大,有些较小,这是可以理解的,有轻重
  • 选择同一个元素,不同选择器性能也不同,越简单越直接性能越好。一般来说,绝对定位(id/class)> 相对定位(nth:child) & 逻辑关系定位(not:empty

最佳实践

总结起来就两点:

  • 减少改动的元素
  • 降低选择器的复杂度

Layout 优化

本来自然顺序就是先 JS 再 styles 再 layout。如果你在 JS 中执行一些触发 layout 的动作然后又执行了一些触发 styles 的动作,会导致什么呢?这次 layout 被无效化了。一两次可能无所谓,不过如果你是在循环中做这个事情,那就是不好的实践了。

最佳实践

  • 不要在循环中 同时 触发 Styles 和 Layout 流程

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文