摘要:更多文章循环展开是一种程序变换,通过增加每次迭代计算的元素的数量,减少循环的迭代次数。用代码来说明就是将替换为循环展开对于算术运算来说,优化的作用是很大的。
更多文章
循环展开是一种程序变换,通过增加每次迭代计算的元素的数量,减少循环的迭代次数。
用代码来说明就是将
for (i = 0; i < len; i++) { sum += arry[i] }
替换为
for (i = 0; i < len; i += 2) { newSum += arry[i] + arry[i + 1] }
循环展开对于算术运算来说,优化的作用是很大的。我分别对整数运算和浮点数运算作了多次测试,得出表格如下:
操作 | 整数 | 整数(优化后) | 浮点数 | 浮点数(优化后) |
---|---|---|---|---|
+ | 360 | 163 | 354 | 164 |
- | 379 | 167 | 341 | 177 |
* | 350 | 160 | 364 | 163 |
/ | 118 | 57 | 152 | 63 |
cpu:i5-7400
浏览器: chrome 70.0.3538.110
运算是用了1千万个数,取值是运行十次测试得出的平均数。附上加法测试的代码
const arry = [] let num = 10000000 while (num) { arry.push(num) num-- } let sum = 0 let last = new Date() let i let len = arry.length for (i = 0; i < len; i++) { sum += arry[i] } let now = new Date() console.log(now - last) let newSum = 0 last = new Date() for (i = 0; i < len; i += 2) { newSum += arry[i] + arry[i + 1] } now = new Date() console.log(now - last) console.log(sum, newSum)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/101093.html
摘要:一个解决的办法是从算法上解决,把递归算法改良成只依赖于少数状态的迭代算法,然而此事知易行难,线性递归还容易,树状递归就难以转化了,而且并不是所有递归算法都有非递归实现。 前言 众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数、运行状态压栈,而递归则会导致函数的多次无返回调用,参数、状态积压在栈上,最终耗尽栈空间。 一个解决的办法是从算法上解决,把递归算法改良成只依赖于少...
摘要:用局部变量存储本地范围之外的变量值,如果它们在函数中的使用多于一次。将它的值存入一个局部变量,消除一次搜索过程。地将此值存入一个局部变量中。 总结了一下《高性能javascript》书中比较核心的点,并补充了一些点。 第一章 DOM标签 将所有 标签放置在页面的底部,紧靠 body 关闭标签的上方。此法可以保证页面在脚本 运行之前完成解析。 将脚本成组打包。页面的 标签越少,页面的加...
摘要:这样就改进了代码的性能,看代码将保存在局部变量中所以啊,我们在开发中,如果在函数中会经常用到全局变量,把它保存在局部变量中避免使用语句用语句延长了作用域,查找变量同样费时间,这个我们一般不会用到,所以不展开了。 本来在那片编写可维护性代码文章后就要总结这篇代码性能文章的,耽搁了几天,本来也是决定每天都要更新一篇文章的,因为以前欠下太多东西没总结,学过的东西没去总结真的很快就忘记了...
摘要:线性循环神经网络这部分教程我们来设计一个简单的模型,这个模型的输入是一个二进制的数据流,任务是去计算这个二进制的数据流中存在几个。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/160... 这篇教程是翻译Peter Roelants写的循环神经网络教程,作者已经授权翻译,这是原文。 该...
阅读 728·2023-04-26 01:30
阅读 3282·2021-11-24 10:32
阅读 2157·2021-11-22 14:56
阅读 1955·2021-11-18 10:07
阅读 500·2019-08-29 17:14
阅读 603·2019-08-26 12:21
阅读 3086·2019-08-26 10:55
阅读 2909·2019-08-23 18:09