You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 多线程进行无论如何需要很长耗时的工作。它与主渲染线程不会互相影响,仅通过消息来通信,类似于订阅者模式
垃圾回收♻️(GC)的东西。没讲太深,听不太懂,忽略不计
requestAnimationFrame()
。这个东西具体是个什么不太清楚,但大概是讲,每帧时间是16ms,但如果你的 JS 在帧中间再开始,可能整个渲染流程还没结束这帧就跑完了。这个函数就是确保浏览器调度的时候,能在帧的最开始运行 JS。但我还是不懂Styles 优化
下面的原则,涉及大量元素的改动、选择时才尤为明显。数据量小的应用随便玩都不会遇到性能瓶颈的,就可以随意点
nth:child
) & 逻辑关系定位(not:empty
)最佳实践
总结起来就两点:
Layout 优化
本来自然顺序就是先 JS 再 styles 再 layout。如果你在 JS 中执行一些触发 layout 的动作然后又执行了一些触发 styles 的动作,会导致什么呢?这次 layout 被无效化了。一两次可能无所谓,不过如果你是在循环中做这个事情,那就是不好的实践了。
最佳实践
The text was updated successfully, but these errors were encountered: