Review
- 2024-10-05 11:09
[!Summary]
一、Introduction #
- JS大任务拆解
- 使用Web Worker:耗时长、非关键逻辑的计算拆离
- 使用 WebAssembly:运行效率更高,耗时更低
- AOT技术:将计算过程提前
- 优化数据结构和算法:避免嵌套循环
- 使用事件委托,代替大量的事件订阅
- 注意程序的局部性
switch性能由于if-else,switch被编译成跳转表,可以避免比较开销- 善用查找表数据结构(Array, Object, Map, Set)
- 避免长时间执行JS逻辑的任务,不要连续占用JS线程时间过长
- 使用
requestAnimationFrame优化视觉变化 - 善用 Web Workers
- 善用 Bit Operation
- 不要覆盖原生方法
- 降低 CSS 选择器的复杂性、层级
- 优先使用
flexboxlayout - 善用
transform,opacity实现动画 - 避免 CSS 样式表达式
- 减少内联JS和CSS使用,尽可能使用外部的JS和CSS文件
- a标签配置
noopener nofollow noreferrer - 优化 HTML 代码结构
- 优化 CSS 文件结构
- JS 避免全局变量
- JS 减少DOM操作
- 使用虚拟DOM
- 缓存变量:将频繁使用的变量缓存起来,避免重复计算
- 善用异步编程:Promise/Async/Generator
- 内存管理:及时释放不再使用的变量
<a href="https://example.com" target="_blank" rel="noopener noreferrer">点击跳转</a>noopener:阻止新窗口访问原始窗口(当一个链接在新窗口中打开时,新窗口可以通过window.opener属性访问到原始窗口)noopener属性将window.opener设置为null,阻止了这种攻击。noreferrer:阻止浏览器发送Referer头,保护用户隐私。nofollow: 告诉搜索引擎“请忽略这个链接”