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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 树莓派3B 开箱配置

    树莓派3B 开箱配置概述最近看到淘宝推荐有树莓派3B+,价格和3B一样,增加了千兆网络,和5GWifi,性能也有一些提升,然后就下单买了。可是没看清楚介绍,原来3B+是预售,不是马上有货,然后那家店的3B+是单独预售购买的,如果点了套装,实际上卖的是3B。于是满怀兴奋的拆开快递后,呈现一脸懵B状态。本来纠结要不要退货重买,不过想想其实性能也不是差距十分大,既然都收到了,不如先研究一番,等到19年树莓派4出的时候…

    2022年6月25日
    29
  • 面试又给我问到MySQL索引【索引的使用策略及优化】「建议收藏」

    面试又给我问到MySQL索引【索引的使用策略及优化】

    2022年2月15日
    25
  • 慎用域名url转发功能_url转发域名可以带端口吗

    慎用域名url转发功能_url转发域名可以带端口吗许多域名注册商或虚拟主机商都提供一种免费的URL转发功能,让拥有一个主网站并同时拥有多个域名的用户实现多个域名指向同一个网站或网站子目录,但具体是通过什么机制实现的则大都讳忌莫深,往往只说“通过服务器的特殊技术设置”。同时,大多数服务商提供的URL转发还包括两种,不隐藏路径的URL转发与隐藏路径的URL转发,其中,不隐藏路径的URL转发指在跳转后浏览器地址栏显示真正的目标地址,而隐藏路径的URL转…

    2022年10月18日
    2
  • 08【Verilog实战】4bit移位寄存器设计与功能验证(附源码)[通俗易懂]

    08【Verilog实战】4bit移位寄存器设计与功能验证(附源码)[通俗易懂]一、Overview(1)Theory(2)Demand二、Interface三、Timeing四、DesignandFunctionalVerification(1)RTL(2)TestBench五、Result(1)行为级描述测试结果(2)结构级描述测试结果

    2022年7月16日
    16
  • http.sys远程代码注入漏洞

    http.sys远程代码注入漏洞http.sys是一个位于Win2003和WinXPSP2中的操作系统核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。主要存在于在Windows+IIS环境下,影响了包括Windows7、WindowsServer2008R2、Windows8、WindowsServer2012、Windows8.1和WindowsServer2012

    2022年7月25日
    10
  • JS数组遍历的几种方法

    JS数组遍历的几种方法for    最简单的一种循环遍历方法,也是使用频率最高的一种,可优化vararr=[1,2,3,4,5,6]for(vari=0;i<arr.length;i++){ console.log(arr[i])}//123456    优化:使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显var…

    2022年7月12日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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