资讯专栏INFORMATION COLUMN

优化循环的方法-循环展开

xiaochao / 3426人阅读

摘要:更多文章循环展开是一种程序变换,通过增加每次迭代计算的元素的数量,减少循环的迭代次数。用代码来说明就是将替换为循环展开对于算术运算来说,优化的作用是很大的。

更多文章

循环展开是一种程序变换,通过增加每次迭代计算的元素的数量,减少循环的迭代次数。

用代码来说明就是将

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

相关文章

  • 基于CPS变换尾递归转换算法

    摘要:一个解决的办法是从算法上解决,把递归算法改良成只依赖于少数状态的迭代算法,然而此事知易行难,线性递归还容易,树状递归就难以转化了,而且并不是所有递归算法都有非递归实现。 前言 众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数、运行状态压栈,而递归则会导致函数的多次无返回调用,参数、状态积压在栈上,最终耗尽栈空间。 一个解决的办法是从算法上解决,把递归算法改良成只依赖于少...

    supernavy 评论0 收藏0
  • web性能优化--高性能javascript

    摘要:用局部变量存储本地范围之外的变量值,如果它们在函数中的使用多于一次。将它的值存入一个局部变量,消除一次搜索过程。地将此值存入一个局部变量中。 总结了一下《高性能javascript》书中比较核心的点,并补充了一些点。 第一章 DOM标签 将所有 标签放置在页面的底部,紧靠 body 关闭标签的上方。此法可以保证页面在脚本 运行之前完成解析。 将脚本成组打包。页面的 标签越少,页面的加...

    ytwman 评论0 收藏0
  • [ JS 进阶 ] 如何改进代码性能 (3)

    摘要:这样就改进了代码的性能,看代码将保存在局部变量中所以啊,我们在开发中,如果在函数中会经常用到全局变量,把它保存在局部变量中避免使用语句用语句延长了作用域,查找变量同样费时间,这个我们一般不会用到,所以不展开了。 本来在那片编写可维护性代码文章后就要总结这篇代码性能文章的,耽搁了几天,本来也是决定每天都要更新一篇文章的,因为以前欠下太多东西没总结,学过的东西没去总结真的很快就忘记了...

    young.li 评论0 收藏0
  • 前端性能优化指南

    摘要:前端性能优化指南优化缓存异步并不等于即时。操作性能问题主要有以下原因。发生在之前,所以相对来说会造成更多性能损耗。新引擎还对对象属性访问做了优化,解决方案叫,简称。代价是前置的扫描类型编译优化。数组,,闭包变量不在优化范畴之列。 前端性能优化指南 AJAX优化 缓存AJAX: 异步并不等于即时。 请求使用GET: 当使用XMLHttpRequest时,而URL长度不到2K...

    Pink 评论0 收藏0
  • (一)线性循环神经网络(RNN)

    摘要:线性循环神经网络这部分教程我们来设计一个简单的模型,这个模型的输入是一个二进制的数据流,任务是去计算这个二进制的数据流中存在几个。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/160... 这篇教程是翻译Peter Roelants写的循环神经网络教程,作者已经授权翻译,这是原文。 该...

    zilu 评论0 收藏0

发表评论

0条评论

xiaochao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<