关于Javascript循环体变量声明与初始化的效率问题
来源:互联网 发布:mac safari浏览器 设置 编辑:程序博客网 时间:2024/05/22 01:34
针对循环体变量声明与初始化的效率问题,将执行的简单测试代码如下:
function test(n) { console.time('Internally declared'); for (let i = 0; i < n; i++) { let a = i; } console.timeEnd('Internally declared'); console.time('Externally initialized'); let a = 0; for (let i = 0; i < n; i++) { a = i; } console.timeEnd('Externally initialized'); console.time('Externally declared'); let b; for (let i = 0; i < n; i++) { b = i; } console.timeEnd('Externally declared');}
Chromium 58.0.3029.110下的测试结果,没有考虑更多的测试条件、环境因素影响等等:
test(1000000000)Script snippet #2:6 Internally declared: 2894.2080078125msScript snippet #2:13 Externally initialized: 2867.099853515625msScript snippet #2:20 Externally declared: 2895.260986328125msundefinedtest(100000000)Script snippet #2:6 Internally declared: 355.6640625msScript snippet #2:13 Externally initialized: 296.761962890625msScript snippet #2:20 Externally declared: 296.949951171875msundefinedtest(10000000)Script snippet #2:6 Internally declared: 68.672119140625msScript snippet #2:13 Externally initialized: 43.97705078125msScript snippet #2:20 Externally declared: 35.217041015625msundefinedtest(1000000)Script snippet #2:6 Internally declared: 12.23388671875msScript snippet #2:13 Externally initialized: 10.057861328125msScript snippet #2:20 Externally declared: 8.0849609375msundefinedtest(100000)Script snippet #2:6 Internally declared: 0.94873046875msScript snippet #2:13 Externally initialized: 1.088134765625msScript snippet #2:20 Externally declared: 0.931884765625msundefinedtest(10000)Script snippet #2:6 Internally declared: 0.1181640625msScript snippet #2:13 Externally initialized: 0.176025390625msScript snippet #2:20 Externally declared: 0.145751953125msundefinedtest(1000)Script snippet #2:6 Internally declared: 0.044921875msScript snippet #2:13 Externally initialized: 0.04296875msScript snippet #2:20 Externally declared: 0.046875msundefinedtest(100)Script snippet #2:6 Internally declared: 0.025146484375msScript snippet #2:13 Externally initialized: 0.033935546875msScript snippet #2:20 Externally declared: 0.02783203125msundefinedtest(10)Script snippet #2:6 Internally declared: 0.024169921875msScript snippet #2:13 Externally initialized: 0.024169921875msScript snippet #2:20 Externally declared: 0.02197265625msundefinedtest(1)Script snippet #2:6 Internally declared: 0.02490234375msScript snippet #2:13 Externally initialized: 0.032958984375msScript snippet #2:20 Externally declared: 0.030029296875msundefined
Firefox 54.0下的测试结果,没有考虑更多的测试条件、环境因素影响等等:
test(1000000000)Internally declared: 计时器开始Internally declared: 768.81msExternally initialized: 计时器开始Externally initialized: 697.8msExternally declared: 计时器开始Externally declared: 704.16msundefinedtest(100000000)Internally declared: 计时器开始Internally declared: 131.84msExternally initialized: 计时器开始Externally initialized: 84.42msExternally declared: 计时器开始Externally declared: 70.98msundefinedtest(10000000)Internally declared: 计时器开始Internally declared: 19.92msExternally initialized: 计时器开始Externally initialized: 17.09msExternally declared: 计时器开始Externally declared: 15.33msundefinedtest(1000000)Internally declared: 计时器开始Internally declared: 3.46msExternally initialized: 计时器开始Externally initialized: 3.06msExternally declared: 计时器开始Externally declared: 2.75msundefinedtest(100000)Internally declared: 计时器开始Internally declared: 1.49msExternally initialized: 计时器开始Externally initialized: 1.11msExternally declared: 计时器开始Externally declared: 2.14msundefinedtest(10000)Internally declared: 计时器开始Internally declared: 1.03msExternally initialized: 计时器开始Externally initialized: 1.11msExternally declared: 计时器开始Externally declared: 1.11msundefinedtest(1000)Internally declared: 计时器开始Internally declared: 1.25msExternally initialized: 计时器开始Externally initialized: 0.84msExternally declared: 计时器开始Externally declared: 0.82msundefinedtest(100)Internally declared: 计时器开始Internally declared: 1.29msExternally initialized: 计时器开始Externally initialized: 1.02msExternally declared: 计时器开始Externally declared: 1.21msundefinedtest(10)Internally declared: 计时器开始Internally declared: 1.29msExternally initialized: 计时器开始Externally initialized: 1.1msExternally declared: 计时器开始Externally declared: 1.64msundefinedtest(1)Internally declared: 计时器开始Internally declared: 1.15msExternally initialized: 计时器开始Externally initialized: 0.97msExternally declared: 计时器开始Externally declared: 0.89msundefined
三种方式无明显差别。从一般性逻辑来分析,声明和初始化是两种操作,其中任何一种操作发生的次数越多耗时越多;但变量声明时就及时初始化是个好的编程习惯,未初始化的变量就直接参与运算常常会得到意想不到的结果,如(undefined) + 1 = NaN、(undefined) + 'string' = "undefinedstring",当然很多编程语言对于未初始化的变量以默认类型值初始化,而Javascript默认值为undefined。另外,这里不探讨存储性能和垃圾回收机制。
阅读全文
0 0
- 关于Javascript循环体变量声明与初始化的效率问题
- 关于JavaScript变量声明及其初始化的问题
- 关于JavaScript变量声明及其初始化的问题
- javascript 变量的声明与初始化
- 关于javascript变量声明、函数声明提升的问题
- java中关于static 类型的变量声明与初始化的问题
- javaScript变量的声明及初始化
- 循环体的效率
- 关于@property 声明变量与自己声明变量问题
- 关于@property 声明变量与自己声明变量问题续
- 关于C++声明和初始化的问题
- 变量与声明时初始化
- 指针的声明与初始化问题
- JavaScript函数声明、变量声明及赋值的优先级问题
- javascript var声明变量与不声明的区别
- JavaScript变量的声明
- 关于声明指针初始化问题
- C++静态成员变量的声明与定义及初始化
- OAuth 2.0: Bearer Token Usage
- bower--前端开发包管理工具
- OAuth 2.0 / RCF6749 协议解读
- Nginx上部署HTTPS + HTTP2
- 求最短路径算法系列
- 关于Javascript循环体变量声明与初始化的效率问题
- RTP打包H264
- 排序算法系列
- Common Spring Boot Properties(常用配置)
- PHP垃圾回收机制
- 关于Lumen / Laravel .env 文件中的环境变量是如何生效的
- 初识闭包
- http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
- PHP中的数据结构:DS扩展