文档章节

javascript循环-Duff策略

我是钟钟
 我是钟钟
发布于 2017/08/25 10:36
字数 339
阅读 38
收藏 0

Duff策略

Duff策略的核心思想是每一次循环完成标准循环的1~8次。首先通过数组长度对8取模,得到需要循环的次数,然后通过数组长度对8取余,得到需要额外处理的数据项的数量。

//生成测试数据
var values = [];
for(var i=0;i<1000;i++>){
    values.push(i);
}

//计算循环次数
var count = Math.ceil(values.length / 8);
var start = values.length % 8;
var j = 0;

//开始循环
do{
    switch(start){
        case 0: console.log(values[j++]);
        case 7: console.log(values[j++]);
        case 6: console.log(values[j++]);
        case 5: console.log(values[j++]);
        case 4: console.log(values[j++]);
        case 3: console.log(values[j++]);
        case 2: console.log(values[j++]);
        case 1: console.log(values[j++]);
    }
    start = 0 ;//重置为0,这样第二次循环的时候,正好可以每次处理8项数据
}while(--count > 0);

<!-- more -->

Duff策略改进版

//生成测试数据
var values = [];
for(var i=0;i<1000;i++>){
    values.push(i);
}

//计算循环次数
var count = Math.ceil(values.length / 8);
var start = values.length % 8;
var j = 0;

//开始处理额外的数据项,就是不够组成8项一组的数据
if(start > 0){
    do{
        console.log(j++);
    }while(--start > 0)
}

// 循环8项一组的数据
do{
    console.log(j++);
    console.log(j++);
    console.log(j++);
    console.log(j++);

    console.log(j++);
    console.log(j++);
    console.log(j++);
    console.log(j++);    
}while(--count > 0);

这个版本相对于上面一个版本来说,去掉了switch语句,减少了条件判断的开销,所以性能比上面的版本要好。

© 著作权归作者所有

我是钟钟

我是钟钟

粉丝 51
博文 43
码字总数 40311
作品 1
深圳
高级程序员
私信 提问
JavaScript 高级程序设计之最佳实践

一、可维护性:可理解性、直观性、可适应性、可扩展性、可调试性 代码约定: 可读性 变量和函数命名 变量类型透明:表示变量类型的三种方式 松散耦合: 解耦HTML/JavaScript 解耦CSS/JavaScr...

jieqiuming
2014/11/02
389
1
【前端性能优化】高性能JavaScript读书笔记

序 曾经看过一篇文章,有一句话这样说: 只有在大学的图书馆里,你才能真正赚回你交的学费。 临近毕业,还想再去图书馆多转转。偶然在架子上发现了这本书,一看作者是写大名鼎鼎的红宝书的人...

番茄沙司
03/22
0
0
JavaScript算法与流程控制

循环迭代(2012/11/11) 参考地址: http://blog.sina.com.cn/s/blog53a5865c0100if8y.html http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-jav......

静风流云
2012/11/11
114
0
AJAX 跨域请求 - JSONP获取JSON数据

原文地址:http://justcoding.iteye.com/blog/1366102 AJAX 跨域请求 - JSONP获取JSON数据 博客分类: Javascript /Jquery / Bootstrap / Web Asynchronous JavaScript and XML (Ajax ) 是驱......

water014300
2014/12/22
207
0
发明者量化 数字货币量化交易课程--开课啦!

目录连载 适用人群 面向对数字货币程序化感兴趣的初学者,需要有一定的实盘交易和计算机基础。 课程概述 数字货币交易市场由于其特殊性越来越受到量化交易者的关注,实际上程序化交易已经是数...

发明者量化FMZ
2018/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rust 的 GUI 框架生态概览

本文比较全面比较了目前主流的 Rust 的 GUI 框架的表现。其中 ++ 表示非常好,-- 表示非常差,而 o 表示处于平均水平。 参与对比的框架共有 8 个,详细的比较结果如下: Electron + Neon El...

红薯
22分钟前
3
0
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
3
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
3
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部