淺談JavaScript程式碼效能優化

itread01 2021-01-21 23:21:57
java javascript itread01 效能 程式


可以通過https://jsbench.me/測試網站完成效能測試。

一.慎用全域性變數

1.全域性變數定義在全域性執行上下文,是所有作用域鏈的頂端,在區域性作用域中沒找到的變數都會到全域性變數中去查詢,所以說查詢的

時間消耗比較大。

2.全域性執行上下文一直存在於上下文執行棧,直到程式退出。

3.如果某個及區域性作用域出現了同名變數則會遮蔽或汙染全域性。

下面通過程式碼來解析下 全域性變數儲存和區域性變數儲存 效能比較區域性變數儲存是執行速度更快的

二.快取全域性變數

將使用中無法避免的全域性變數快取到區域性,如下圖所示區域性變數快取全域性變數是執行速度更快的

三.通過原型新增方法

如下圖所示通過原型鏈新增方法是執行速度上比較快

四.避開閉包陷阱

閉包特點:

1.外部具有指向內部的引用

2.在外部作用域訪問內部作用域的資料

如下圖所示,呼叫函式foo,foo函式指向了內部fn的存在,也就是外部指向了內部的引用

當呼叫foo函式的時候,我們在foo所在的作用域能夠訪問到foo裡面的name變數,也就是外部作用域訪問內部作用域的資料

如下圖所示閉包使用不當很容易出現記憶體洩露

首先,btn元素本身就是存在於dom節點上的,只不過是用btn1這個變數在函式內部存了一下,所以說onclick事件是外部指向了內部,滿

足了閉包的第一條,onclick事件在被呼叫的時候,所在的作用域是一個獨立的作用域,跟foo作用域不是一個作用域,在裡面用到了foo作

用域裡面的el,所以滿足閉包的第二條。這樣的程式碼有一個問題,根據我們之前GC垃圾回收的引用機制,btn這個dom物件被引用了2次,

一次是在html中,一次是在foo變數裡面,如果說我們把這個dom節點從html中刪除,等於減少了一次引用,但是在foo內部還有一次引用

不會消失,這就造成了垃圾無法回收,也就是我們說的記憶體洩露。

解決辦法如下,操作完成後把btn1置為null

五.避免屬性訪問方法的使用

根據JS的特性,建構函式內部所有的屬性和方法都是對外暴露的,儘量避免建構函式內部使用方法返回屬性,而是應該直接去訪問

屬性,如下圖所示,很明顯 直接訪問屬性更快一些。

六.for迴圈優化

如下圖所示,

七.選擇最優的迴圈方法

如下圖所示,如果咱們只是遍歷陣列的資料,foreach效能最好,其次是for,最後是for in

八.文件碎片優化節點新增

如下圖所示,文件碎片節點新增執行速度更快

九.克隆優化節點操作

克隆主要是新增Dom節點,可以根據介面上已經存在相似的Dom節點,進行復制,從而減少效能的消耗如下圖所示,克隆DOM節點比

建立DOM節點要快一些。

十.直接量替換new object

如下圖所示:直接用變數定義陣列的方式比用new Object的方式建立陣列執行明顯要快

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1611234124.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云