`
JavaSam
  • 浏览: 951766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript循环性能比较(转)

 
阅读更多
var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function for_in() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i in ary) { 
        var item = i; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function for_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = ary.length; i--; ) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = ary.length; 
    while (i--) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function do_while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    do { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } while (i < l) 
} 
 
function do_while_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = ary.length - 1; 
    do { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } while (i--) 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    var currTime; 
    for (var k = 0; k < 3; k++) { 
        console.log('第' + (k + 1) + '次循环测试:') 
        currTime = new Date(); 
        console.profile(); 
        for (var i = 0; i < mult; i++) { 
            for_in(); 
            for_normal(); 
            for_reverse(); 
            while_normal(); 
            while_reverse(); 
            do_while_normal(); 
            do_while_reverse(); 
        } 
        console.profileEnd(); 
        console.log('用时:' + (new Date() - currTime) + 'ms'); 
    } 
}, 2000);





var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function process(item) { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    if (isInt.test(item)) { item += 1; } 
} 
 
function for_normal_fn() { 
    for (var i = 0, len = ary.length; i < len; i++) { process(ary[i]); } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('for循环内调用外部函数测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal_fn(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
}, 2000); 




var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function duff_fast() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            item, i = 0, 
            l = ary.length, 
            n = l % 8; 
    while (n--) { 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
 
    n = parseInt(l / 8); 
    while (n--) { 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('普通while循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        while_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('达夫设备循环测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        duff_fast(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
}, 2000); 








var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function process(item) { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    if (isInt.test(item)) { item += 1; } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function duff_normal() { 
    var i = 0, 
            l = ary.length, 
            n = l % 8; 
    while (n--) { 
        process(ary[i++]); 
    } 
 
    n = parseInt(l / 8); 
    while (n--) { 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('普通while循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        while_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('达夫设备调用外部函数循环测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        duff_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
}, 2000); 

 

0
0
分享到:
评论

相关推荐

    JavaScript语言精粹(高清电子版)和高性能JavaScript 双语版

    本文将深入探讨标题和描述中提及的两本书籍《JavaScript语言精粹》和《高性能JavaScript》所涵盖的知识点。 首先,我们来关注《JavaScript语言精粹》。这本书主要侧重于JavaScript的核心概念和最佳实践,旨在帮助...

    高性能JavaScript PDF

    **高性能JavaScript PDF**是关于利用JavaScript技术来优化和提升PDF文档处理性能的专业资源。JavaScript作为Web开发中的主要脚本语言,被广泛应用于交互式网页和动态应用。在PDF领域,JavaScript可以用来增强文档的...

    高性能JavaScript + 高清+目录 PDF

    同时,书中也涉及了Node.js环境下的性能优化,包括I/O操作、事件循环和非阻塞编程。 在实际项目中,代码组织和架构同样影响着性能。本书提供了关于设计模式、代码重构和测试驱动开发的最佳实践,帮助开发者构建易于...

    JavaScript性能优化的小知识总结共23页.pdf

    3. **减少DOM操作**:DOM操作是JavaScript性能的瓶颈,尽量避免频繁修改DOM,可以使用文档碎片(DocumentFragment)或批量操作来提升性能。 4. **事件委托(Event Delegation)**:通过在父元素上绑定事件,利用...

    《高性能JavaScript》(尼古拉斯·泽卡斯).pdf

    其次,书中讨论了JavaScript的运行机制,如事件循环和异步编程。JavaScript是非阻塞的单线程语言,因此理解和掌握事件队列、回调函数、Promise以及async/await是至关重要的,这些内容可以帮助开发者编写出更加流畅、...

    《高性能JavaScript编程》.Nicholas.C.Zakas著.英文版

    1. **JavaScript基础与特性**:首先,书中会介绍JavaScript的基础知识,包括变量、数据类型、函数、对象等,同时也涵盖了JavaScript的异步处理机制,如回调函数、事件循环和Promise。 2. **作用域与闭包**:Zakas...

    高性能JavaScript.pdf

    ### 高性能JavaScript知识点概述 #### 一、加载与执行(Loading and Execution) **核心概念:** - **JavaScript执行机制**:浏览器中的JavaScript执行过程及其对网页渲染的影响。 - **单进程模型**:大多数现代...

    《高性能JavaScript_编程》 PDF

    7. **事件循环与异步编程**:JavaScript是非阻塞的,事件循环和回调函数、Promise、async/await等异步处理机制是JavaScript性能的关键。书中可能会介绍这些概念及其优化技巧。 8. **DOM操作**:DOM是JavaScript与...

    [高性能JavaScript编程].(High.Performance.JavaScript).Nicholas.C.Zakas.中英对照版.pdf

    9. **异步编程**:详述回调函数、定时器和事件循环,介绍Promise和async/await的使用,解决异步代码的性能问题和回调地狱。 10. **浏览器优化**:讲解浏览器的工作原理,如渲染机制、缓存策略,以及如何利用这些...

    高性能JavaScript编程

    1. **性能基础**:书中首先介绍了JavaScript性能的基础知识,包括执行环境、内存管理、DOM操作以及事件循环等,这些都是理解JavaScript性能瓶颈的关键。 2. **作用域和闭包**:理解JavaScript的作用域规则和闭包...

    高性能JavaScript代码最佳实践.pdf

    使用优化的循环结构可以提高JavaScript代码的性能,例如使用for循环代替while循环。 2. 减少DOM操作 减少DOM操作可以提高JavaScript代码的性能,例如使用innerHTML代替appendChild。 3. 使用setTimeout和...

    自己写的javascript性能测试插件

    JavaScript性能测试插件是用于评估和优化JavaScript代码执行效率的工具。通过自定义这样的插件,我们可以更好地理解和改进我们的Web应用程序在不同环境下的表现。在这个项目中,我们有两个主要文件:`t1.html`和`...

    浏览器性能测试JavaScript脚本

    通过运行这些脚本,开发者可以得到一组量化指标,比如每秒执行的指令数(IPS)或其他性能指标,从而比较不同浏览器或同一浏览器的不同版本在JavaScript执行效率上的差异。这种测试对于优化网页应用性能、提升用户...

    Javascript 高性能程序开发(中文版)

    《Javascript 高性能程序开发》是由Nicholas C. Zakas所著的一本关于如何提高JavaScript性能的书籍。本书通过对JavaScript的深入分析,以及对脚本加载、执行、作用域管理等方面的研究,提出了许多提高JavaScript代码...

    JavaScript书籍(JavaScript从入门到精通(第2版).pdf+高性能JavaScript.pdf)

    书中会探讨JavaScript性能优化的各种策略,如避免全局查找、合理使用闭包、掌握作用域链的工作原理、以及优化循环结构等。此外,它还可能涉及如何利用V8引擎的特性来提升JavaScript程序的运行效率,这对于大型应用或...

    JavaScript标准参考教程

    JavaScript的性能强大,它是一种开放的语言,社区支持广泛,这为开发者提供了一个良好的学习和交流环境。 JavaScript的发展历程同样重要。它诞生于互联网早期,最初被称为LiveScript,之后改名为JavaScript,并随着...

    高性能JavaScript编程1

    讨论了如何优化循环性能,避免不必要的计算,以及合理选择控制流工具来提高代码执行效率。 第五章 “字符串和正则表达式”: 字符串和正则表达式是JavaScript中的常见操作,但不当使用可能导致性能瓶颈。本章将介绍...

    如何提升JavaScript的运行速度(循环篇).doc

    以下是对如何优化JavaScript循环的一些关键点的详细说明: 1. **避免在循环体中执行过多操作**: 循环体内的操作越多,执行时间就越长。如果循环体内包含复杂的计算或多次DOM操作,这将显著增加执行时间。尽量减少...

Global site tag (gtag.js) - Google Analytics