我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript优化技巧

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript优化技巧

  • 了解语言及其工作原理
  • 基于用例进行设计
  • 调试!修复!重复

记住这一点

任何傻瓜都可以编写计算机可以理解的代码,优秀的程序员编写人类可以理解的代码。- 丁·福勒

我们来看看如何使 JavaScript代码运行得更快。

延迟

延迟算法将计算延迟到需要执行时才执行,然后生成结果。

  1. const someFn = () => { 
  2.   doSomeOperation() 
  3.   return () => { 
  4.     doExpensiveOperation() 
  5.   } 
  6.  
  7. const t = someArray.filter((x) => checkSomeCondition(x)).map((x) => someFn(x)) 
  8.  
  9. // 现在,如果有需要在执行 
  10. t.map((x) => t()) 

最快的代码是未执行的代码,所以尽量延迟执行。

JavaScript 使用原型继承,JS 中所有对象都是Object的实例。

MDN说:

尝试访问对象的属性时,不仅会在对象上搜索该属性,还会在对象的原型,原型的原型等上搜索该属性,直到找到匹配属性名或原型链的末端。

对于每个属性,JavaScript引擎都必须遍历整个对象链,直到找到匹配项。如果使用不当,这会占用大量资源,并影响应用程序的性能。

所以不要这样:

  1. const name = userResponse.data.user.firstname + userResponse.data.user.lastname 

而是这样做:

  1. const user = userResponse.data.user 
  2. const name = user.firstname + user.lastname 

使用临时变量来保存链接的属性,而不是遍历访问整条链。

使用转译器之前要三思

在上述情况下,userResponse可能不是对象,如果是对象,它的属性 user 也可能不是对象。所以,在获取值时要进行检查:

  1. let name = '' 
  2. if (userResponse) { 
  3.   const data = userResponse.data 
  4.   if (data && data.user) { 
  5.     const user = data.user 
  6.     if (user.firstname) { 
  7.       name += user.firstname 
  8.     } 
  9.     if (user.lastname) { 
  10.       name += user.firstname 
  11.     } 
  12.   } 

这太啰嗦了。代码越多,bug 就越明显。我们能把它缩小吗?当然,可以使用 JS 中可选的链接、解构赋值来优化它。

  1. const user = userResponse?.data?.user 
  2. const { firstname = '', lastname = ''} = user 
  3. const name = firstname + lastname 

是不是很灵活地,简短?不要使用这个要注意,Babel 会按照以下方式进行转换:

  1. 'use strict' 
  2.  
  3. var _userResponse, _userResponse$data 
  4.  
  5. var user = 
  6.   (_userResponse = userResponse) === null || _userResponse === void 0 
  7.     ? void 0 
  8.     : (_userResponse$data = _userResponse.data) === null || 
  9.       _userResponse$data === void 0 
  10.     ? void 0 
  11.     : _userResponse$data.user 
  12. var _user$firstname = user.firstname, 
  13.   firstname = _user$firstname === void 0 ? '' : _user$firstname, 
  14.   _user$lastname = user.lastname, 
  15.   lastname = _user$lastname === void 0 ? '' : _user$lastname 
  16. var name = firstname + lastname 

当使用转译时,确保你选择了一个更适合你的用例的。

了解SMI和堆号

数字很奇怪,ECMAScript将数字标准化为64位浮点值,也称为双精度浮点或Float64表示形式。

如果 JS 引擎以Float64表示形式存储数字,则将导致巨大的性能低下。JS 引擎对数字进行抽象,使其行为与Float64完全匹配。与float64运算相比,JS 引擎执行整数运算的速度要快得多。

有时,我们认为像下面这样写法可读比较好:

  1. const maxWidth = '1000' 
  2. const minWidth = '100' 
  3. const margin = '10' 
  4. getWidth = () => ({ 
  5.   maxWidth: maxWidth - margin * 2, 
  6.   minWidth: minWidth - margin * 2, 
  7. }) 

评估局部变量

如果getWidth函数被多次调用,那么每次调用它时都会计算它的值。上面的计算并不是什么大问题,因此我们不会注意到任何性能影响。

但是总的来说,运行时的求值的数量越少,性能就越好。

  1. // maxWidth - (margin * 2) 
  2. const maxWidth = '980' 
  3. // minWidth - (margin * 2) 
  4. const minWidth = '80' 
  5. const margin = '10' 
  6. getWidth = () => ({ 
  7.   maxWidth, 
  8.   minWidth, 
  9. }) 

使用 Map 而不是 switch/if-else 条件

如果要检查多个条件时,可以使用Map代替 switch/if-else条件。在Map中查找元素的性能比对switch和if-else条件快得多。

  1. switch (day) { 
  2.   case 'monday'
  3.     return 'workday' 
  4.   case 'tuesday'
  5.     return 'workday' 
  6.   case 'wednesday'
  7.     return 'workday' 
  8.   case 'thursday'
  9.     return 'workday' 
  10.   case 'friday'
  11.     return 'workday' 
  12.   case 'saturday'
  13.     return 'funday' 
  14.   case 'sunday'
  15.     return 'funday' 
  16.  
  17. // or this 
  18.  
  19. if ( 
  20.   day === 'monday' || 
  21.   day === 'tuesday' || 
  22.   day === 'wednesday' || 
  23.   day === 'thursday' || 
  24.   day === 'friday' 
  25.   return 'workday' 
  26. else return 'funday' 

上面可以使用 Map 来代替

  1. const m = new Map([ 
  2.     ['monday','workday'], 
  3.     ['tuesday''workday'], 
  4.     ['wednesday''workday'], 
  5.     ['thursday''workday'], 
  6.     ['friday''workday'], 
  7.     ['saturday''funday'], 
  8.     ['sunday''funday'
  9. ]; 
  10.  
  11. return m.get(day); 

if-else 排序

在 React组件中,这种写法还是很常见的。

  1. export default function UserList(props) { 
  2.   const { users } = props 
  3.  
  4.   if (users.length) { 
  5.     return  
  6.   } 
  7.  
  8.   return  

在这里,我们在没有用户时渲染否则渲染。有大部分人认为,我们首先处理所有空的的情况,然后再处理有数据的情况。对于任何读过它的人来说都更清楚,而且效率更高。也就是说,以下代码比上一个代码更有效。

  1. export default function UserList(props) { 
  2.   const { users } = props 
  3.  
  4.   if (!users.length) { 
  5.     return  
  6.   } 
  7.  
  8.   // some resource intensive operation 
  9.   return  

当然 users.length 一直有值的话,就使用第一种情况。

类型是你最好的朋友

JavaScript是解释型和编译型语言。为了产生更有效的二进制文件,编译器需要类型信息。但是,作为一种动态类型化的语言会使编译器难以进行。

编译器在编译热代码(多次执行的代码)时进行一些假设并优化代码。编译器花费一些时间来生成此优化的代码。当这些假设失败时,编译器必须丢弃优化的代码,并退回到解释的执行方式。这是耗时且昂贵的。

作者:EthicalAds 译者:前端小智 来源: sendilkumarn

原文:https://sendilkumarn.com/blog/javascript-optimization/

本文转载自微信公众号「 大迁世界 」,可以通过以下二维码关注。转载本文请联系大迁世界公众号。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript优化技巧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript优化技巧

尝试访问对象的属性时,不仅会在对象上搜索该属性,还会在对象的原型,原型的原型等上搜索该属性,直到找到匹配属性名或原型链的末端。
JavaScript2024-12-03

JavaScript代码优化技巧

本文主要讨论了JavaScript代码性能优化的技巧。许多JavaScript代码的性能没有达到最佳,主要是因为没有进行适当的优化。

JavaScript代码优化技巧有哪些

这篇文章主要介绍“JavaScript代码优化技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript代码优化技巧有哪些”文章能帮助大家解决问题。1. 使用扩展运算符解构对象和数
2023-07-05

JavaScript 条件语句优化小技巧

在日常的开发中,我们经常会编写一些条件语句,过多的 if...else会导致代码难以理解和维护,今天来分享几个优化条件语句的小技巧!

JavaScript throw 语句的性能优化技巧

JavaScript throw 语句的使用不当会导致性能问题。本文介绍了优化 throw 语句的技巧,包括错误边界、提前返回和基于类型的错误处理。
JavaScript throw 语句的性能优化技巧
2024-03-01

MySQL 优化技巧

优化数据库结构优化数据大小→ 减少磁盘写入和读取的数据量→ 在查询执行期间主动处理其内容时主内存较少→ 产生更小的索引,可以更快地处理表格列尽可能使用最高效(最小)的数据类型如果可能,将列声明为 NOT NULL → 更好地使用索引并消除
MySQL 优化技巧
2024-10-15

JavaScript代码优化的技巧实例分析

本篇内容主要讲解“JavaScript代码优化的技巧实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript代码优化的技巧实例分析”吧!写在前面想要做到JavaScript的代
2023-07-02

JavaScript条件语句优化的技巧有哪些

这篇文章主要介绍了JavaScript条件语句优化的技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript条件语句优化的技巧有哪些文章都会有所收获,下面我们一起来看看吧。1、Array.i
2023-07-02

一文总结5个JavaScript代码优化技巧

本篇文章给大家带来了关于JavaScript的相关知识,其中主要跟大家分享5个JavaScript代码的优化技巧,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。
2023-05-14

优化JavaScript性能:2024年的技巧和工具

JavaScript性能优化是一个持续的过程,涉及采用现代语言特性、使用高效的数据结构和利用强大的工具。通过应用这些技巧和incorporat正确的工具,你可以使你的代码不仅更快,而且更清晰、更易维护。

17 个你需要知道的 JavaScript 优化技巧

作为前端开发人员,我们必须了解这些,以便让我们的工作变得更轻松。下面就是2021年你必须知道的JavaScript编码技巧,包含普通写法和简写方法供大家借鉴哦。

Windows98优化小技巧

加快系统启动速度1、用系统配置程序定制自动选项。单击“开始”按钮,选择“运行”,在“打开”输入框内输入msconfig,单击“确定”按钮启动系统
2023-05-23

PostgreSQL IO优化技巧

如果有人问“信创数据库学啥比较好”,从今后的工作机会以及学习资料的普及程度来说,我首先推荐的就是PostgreSQL。

快速网站的简单JavaScript性能优化技巧

JavaScript 可以提供高度交互的网站,以 HTML 单独无法做到的方式积极吸引用户。但是,增加的参与度会带来性能成本,如果允许失控,可能会对网站的可用性产生负面影响。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录