提高javascript性能的12条建议

80 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

制作网站或app时,最重要的一个方面是性能。没有人希望应用程序崩溃或网页无法加载,用户的等待时间也不能太长。根据Kissmetrics的数据,47%的用户希望网站在2秒内加载,如果加载过程超过3秒,40%的用户将离开网站。在创建web应用程序时,应该始终考虑性能。以下是12种有效提高应用程序性能的方法:

1. 在浏览器中缓存

有两种方法。第一个是使用JavaScript缓存API。第二种是使用HTTP协议缓存。 代码常常访问特定对象。通过将重复访问对象存储到用户定义的变量中,可以有效实现性能提升。

2.定义执行环境

虽然对所有Javascript引擎的所有版本进行性能测试和优化在实际工作中是不现实的。但是,仅仅在单一环境中进行测试更不是一个好的做法,因为这只会获得片面的结果。因此,建立多个环境并测试代码是否正常运行非常重要。

3.删除未使用的JavaScript代码

这一步不仅可以减少传输时间,还可以减少浏览器分析和编译代码所需的时间。要做到这一点,我们必须考虑以下几点:

  • 如果检测到一个用户没有使用的功能,最好将与其所有相关的JavaScript代码一起删除,这样网站的加载速度会更快,用户会有更好的体验。
  • 也可能是因为错误地引用了一个不必要的库,或者依赖项提供了浏览器中原生就能使用的功能

4.避免使用太多内存

我们应该尽量将内存使用限制在确实需要的范围内。每当浏览器请求使用新内存时,浏览器的垃圾收集器就会执行。如果这种情况经常发生,页面将运行缓慢。

5.延迟加载不必要的JavaScript

用户希望快速查看页面,但不太可能在页面初始加载时所有功能都可用。如果用户必须执行某个操作才能执行某个功能(例如,通过单击元素或更改选项卡),则可以将延迟加载该功能到初始页面加载之后。 通过这种方式,您可以避免加载和编译导致的页面延迟初始展示。等页面完全加载后,我们就可以开始加载这些功能,这样当用户开始交互时,它们就可以立即使用。在RAIL模型中,谷歌建议延迟加载以50ms为单位完成,这样就不会影响用户与页面的交互。

6.避免内存泄漏

如果发生了内存泄漏,加载的页面将使用越来越多的内存,最终会占用设备的所有可用内存,并严重影响性能。 在Chrome开发工具中,你可以通过在 Performance选项卡中记录时间线来分析你的网站是否存在内存泄漏。通常,内存泄漏来自页面中已经删除的DOM片段,但有一些变量仍然引用它们,因此垃圾收集器无法消除它们。

7.当需要执行很耗时的代码,请使用web workers

根据MDN文档:“Web Workers使在后台线程中运行脚本操作成为可能,该线程与Web应用程序的主执行线程是分开的。这样做的好处是,耗时的代码可以在单独的线程中执行,从而允许主线程运行脚本操作。从而避免阻塞。” Web workers允许代码在不阻塞用户界面线程的情况下执行处理器密集型计算。Web Workers允许您生成新线程,并将工作委派给这些线程以获得高效性能。

8.如果多次访问某个DOM元素,请将其保存在局部变量中

访问DOM很慢。如果要多次读取元素的内容,最好将其保存在局部变量中。但重要的是要记住,如果以后要删除DOM的值,那么变量应该设置为“null”,这样就不会导致任何内存泄漏。

9.优先访问局部变量

JavaScript首先搜索变量是否存在于当前作用域,然后在更高级别的作用域内逐步搜索,直到全局变量。将变量保存为局部变量可以让JavaScript更快地访问它们。 定义函数作用域时,在没有前置变量声明的局部变量中,在每个变量前面加上let或const是很重要的,这样可以防止不必要的查找并加快代码的速度。

10.避免使用全局变量

11.实现其他语言中的优化

  • 始终使用计算复杂度最低的算法,以最佳数据结构解决任务
  • 避免递归调用
  • 简化数学公式
  • 使条件始终更可能为真,以便更好地利用处理器的推测性执行
  • 在可以替换某些操作时使用位级运算符,因为这些运算符使用的处理器周期更少

12.使用工具检测问题

Lighthouse是一个很好的网页性能工具,它可以帮助您审查性能、可访问性、最佳实践和SEO。Google PageSpeed旨在帮助开发者了解网站的性能优化和潜在改进的地方。这些组件用于识别网站是否符合谷歌的网络性能最佳实践。 在Chrome中,您还可以使用主菜单中的 More Tools 选项来查看每个选项卡使用的内存和CPU。对于更高级的分析,您可以使用Firefox或Chrome中的开发者工具 Performance 视图来分析不同的指标,例如:

image.png

devtools的性能分析允许您在加载页面时分析CPU消耗、网络和其他指标,以便识别和修复问题。

image.png

总结

在代码的可读性和优化之间保持平衡是很重要的。以上12种方法能有效提高应用程序性能。

译自:nodesource.com/blog/improv…