js 【 巨难问题 】如何用二进制位操作 替代for 循环减去每一项的算法?
var arr = [12,45,45,323,542,34 .....] 长度是10万上
每一项减去 7 得到一个新数组
用for 还是太慢, 而且是不是占用内存也大?不能用多线程
有没有什么二进制或者位操作之类的奇技淫巧 来瞬间处理这个数组
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
x = new Array(150000);
的话,时间可能会减小到 5ms 以下;采用循环展开,一次读取多个数据,类似于这样写:
asmjs
,类型标注可以加快执行,配合二进制预先求出7
的补码将减法转为加法运算来加速,不过由于现代浏览器会采用类似分支预测的方式执行迭代,JS 进行纯数值的大规模迭代运算不会比asm
慢太多;WASM
,比asm
快,不过由于通信开销大(每个数据复制一遍,除非浏览器已经引入/恢复SharedArrayBuffer
),可能毫无优势,除非数据绝大部分生命周期都在WASM
里面。手写
150000
行代码,就可以有效避免使用循环,我太机智了单纯的for循环,15万,约10毫秒,这速度还可以接受啊!稍微优化下,还能快一丢丢。
突然想起之前看到的达夫设备可以优化循环,你可以试试