更换字符串的拼接方式
- 我把字符串拼接换成了数组的join方式(此时循环5.9亿次)
var http = require('http');http .createServer(function(request, response) { console.log(request.url, 'url'); let used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'start', ); console.time('测试'); let num = 0; for (let i = 1; i < 590000000; i++) { num += i; } const arr = ['Hello']; arr.push(num); console.timeEnd('测试'); used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'end', ); response.end(arr.join('')); }) .listen(8888);
- 测试结果 , 发现接口调用的耗时稳定了(注意此时是5.9亿次循环)
文章插图
- 《javascript高级程序设计》中 , 有一段关于字符串特点的描述 , 原文大概如下:ECMAScript中的字符串是不可变的 , 也就是说 , 字符串一旦创建 , 他们的值就不能改变 。要改变某个变量的保存的的字符串 , 首先要销毁原来的字符串 , 然后再用另外一个包含新值的字符串填充该变量
- 用+直接拼接字符串自然会对性能产生一些影响 , 因为字符串是不可变的 , 在操作的时候会产生临时字符串副本 , +操作符需要消耗时间 , 重新赋值分配内存需要消耗时间 。
- 但是 , 我更换了代码后 , 发现 , 即使没有字符串拼接 , 也会耗时不稳定
var http = require('http');http .createServer(function(request, response) { console.log(request.url, 'url'); let used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'start', ); console.time('测试'); let num = 0; for (let i = 1; i < 5900000000; i++) { // num++; } const arr = ['Hello']; // arr[1] = num; console.timeEnd('测试'); used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'end', ); response.end('hello'); }) .listen(8888);
- 测试结果:
- 现在我怀疑 , 不仅仅是字符串拼接的效率问题 , 更重要的是for循环的耗时不一致
var http = require('http');http .createServer(function(request, response) { console.log(request.url, 'url'); let used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'start', ); let num = 0; console.time('测试'); for (let i = 1; i < 5900000000; i++) { // num++; } console.timeEnd('测试'); const arr = ['Hello']; // arr[1] = num; used = process.memoryUsage().heapUsed / 1024 / 1024; console.log( `The script uses approximately ${Math.round(used * 100) / 100} MB`, 'end', ); response.end('hello'); }) .listen(8888);
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 对于 JavaScript 中循环之间的技术差异概述
- 简介水循环化妆品怎么样
- Docker-For-Pentest的渗透测试镜像推荐
- 快速掌握shell脚本的各种循环语句
- Winform界面开发中的困境及解决方案
- DiskCatalogMaker for Mac
- 颜色提取软件 Drop for Mac
- 视频参数检测工具 MediaInfo for Mac
- javascript 知识普及之 FormData
- 女性冬季血液循环不通畅造成手脚冰冷 及时缓解很重要