javascript性能优化_javascript框架是什么

javascript性能优化_javascript框架是什么即使是循环中最快的代码,累计迭代上千次也会慢下来。此外,循环体运行时也会带来小性能开销,不仅仅是增加了总体运行时间。减少迭代次数能获得更加显著的性能提升,最广为人知的一种限制循环迭代次数的模式被称为“达夫设备(Duff’sDevice)”。Duff’sDevice是一种循环体展开技术,它使得一次迭代中实际执行了多次迭代的操作。一个典型的实现如下:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

即使是循环中最快的代码,累计迭代上千次也会慢下来。此外,循环体运行时也会带来小性能开销,不仅仅是增加了总体运行时间。减少迭代次数能获得更加显著的性能提升,最广为人知的一种限制循环迭代次数的模式被称为“达夫设备(Duff’s Device)”。

Duff’s Device是一种循环体展开技术,它使得一次迭代中实际执行了多次迭代的操作。一个典型的实现如下:

<script type="text/javascript">
  var iterations = Math.floor(items.length/8),
      startAt = items.length % 8,
      i = 0;
      do {
        switch(startAt) {
          case 0: process(items[i++]);
          case 7: process(items[i++]);
          case 6: process(items[i++]);
          case 5: process(items[i++]);
          case 4: process(items[i++]);
          case 3: process(items[i++]);
          case 2: process(items[i++]);
          case 1: process(items[i++]);
        }
        startAt = 0;
      }while(--iterations);
</script>

达夫设备背后的基本理念是:每次循环中最多可8次调用process()函数。循环迭代次数为元素总数除以8.因为总数不一定是8的整数倍,所以startAt变量存放余数,指出第一次循环中应当执行多少次process()。比方说现在有12个元素,那么第一次循环将调用process()4次,第二次循环调用process()8次,用2次循环代替了12次循环。

次算法一个稍快的版本取消了switch表达式,将余数处理与主循环分开:

<script type="text/javascript">
    var i = items.length % 8;
    while(i){
      process(items[i--]);
    }
    i = Math.floor(items.length / 8);
    while (i) {
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
      process(items[i--]);
    }
  </script>

虽然此代码中使用两个循环替代了先一个循环,但它去掉了循环体重的switch表达式,速度更快。

是否值得使用达夫设备,无论是原始的版本还是修改后的版本,很大程度上依赖于迭代的次数。如果循环迭代次数少于1000次,你可能只看到它与普通循环相比只有微不足道的性能提升。如果迭代次数超过1000次,达夫设备的效率明显提升。例如500000次迭代中,运行时间比普通循环减少到70%。

延伸阅读


▶ Walkthrough007

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192984.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 方程自己解(1)——物理信息神经网络(PINN)

    方程自己解(1)——物理信息神经网络(PINN)文章目录前言(一)物理神经网络(PINN)解读1.1PINN基本背景1.2PINN算法描述前言  最近正在看利用“深度学习”(大概吧,其实只是利用了neuralnetwork的自动微分特性(AD)),在看一些文章的同时,将文章中提到的开源代码用起来和复现一些基本方程求解能够加快我学习的进度,这里将持续贴出一些方程和代码的求解过程。当然非常希望同学和朋友们可以给我指出错误,最后如果能够坚持下去,这个系列的工作会分享到github,同时如果对各个开源程序有所帮助那就更好了!  由于会参考到很多文章

    2022年10月23日
  • WEB3.0白皮书[通俗易懂]

    WEB3.0白皮书[通俗易懂]I//Part1新浪潮//那么Web3.0究竟是什么?TA能给当今世界带来什么变化?TA由哪些技术组成?如何实现Web3.0?TA能带来哪些机会?我们能从中得到什么?Web3.0是一个非常前沿的话题,充满了不确定性,也没有任何人能准确预测她何时到来,会以何种形式到来。但趋势已现,仅以此文抛砖引玉,希望与志同道合者一起推动。Web…

  • pycharm 全局搜索快捷键「建议收藏」

    pycharm 全局搜索快捷键「建议收藏」pycharm全局搜索快捷键:ctrl+shift+f如果快捷键被系统占用了,那么在pycharm中是不能使用的,我使用的win10自带的输入,这里是已经存在的快捷键,需要关闭才可以使用

  • int与long long之间的转换

    int与long long之间的转换今天看了下c++primer,才知道假如a为longlong或者double类型,b为int类型,假如有表达式a>=b,则编译器会将b先转化为longlong或者double类型,也就是说会将窄类型自动转化为宽类型,这一步是自动转化的,没有必要在代码中再强制转化。但是有个特例,假如a=INT32_MIN,则-a会越界,其数值在我的平台上为-2147483648,如果要得到

  • WebAssembly完全入门——了解wasm的前世今身

    WebAssembly完全入门——了解wasm的前世今身前言接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成

  • 使用Jar命令压缩War包「建议收藏」

    使用Jar命令压缩War包「建议收藏」偶然看见这么一个介绍详细的说明,呵呵虽然经常用 1.首先是工具比如Eclipse很方便了。 2.用winrar之类的工具,把web-info目录,及跟它同级的所有目录及文件,打包成zip文件就行了,然后把扩展名改成war! 3Jar命令: 假定有一个Web应用:C:\myHome myHome/WEB-INF/…… myHome/files/…… myH

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号