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);
相关推荐
本文将深入探讨标题和描述中提及的两本书籍《JavaScript语言精粹》和《高性能JavaScript》所涵盖的知识点。 首先,我们来关注《JavaScript语言精粹》。这本书主要侧重于JavaScript的核心概念和最佳实践,旨在帮助...
**高性能JavaScript PDF**是关于利用JavaScript技术来优化和提升PDF文档处理性能的专业资源。JavaScript作为Web开发中的主要脚本语言,被广泛应用于交互式网页和动态应用。在PDF领域,JavaScript可以用来增强文档的...
同时,书中也涉及了Node.js环境下的性能优化,包括I/O操作、事件循环和非阻塞编程。 在实际项目中,代码组织和架构同样影响着性能。本书提供了关于设计模式、代码重构和测试驱动开发的最佳实践,帮助开发者构建易于...
3. **减少DOM操作**:DOM操作是JavaScript性能的瓶颈,尽量避免频繁修改DOM,可以使用文档碎片(DocumentFragment)或批量操作来提升性能。 4. **事件委托(Event Delegation)**:通过在父元素上绑定事件,利用...
其次,书中讨论了JavaScript的运行机制,如事件循环和异步编程。JavaScript是非阻塞的单线程语言,因此理解和掌握事件队列、回调函数、Promise以及async/await是至关重要的,这些内容可以帮助开发者编写出更加流畅、...
1. **JavaScript基础与特性**:首先,书中会介绍JavaScript的基础知识,包括变量、数据类型、函数、对象等,同时也涵盖了JavaScript的异步处理机制,如回调函数、事件循环和Promise。 2. **作用域与闭包**:Zakas...
### 高性能JavaScript知识点概述 #### 一、加载与执行(Loading and Execution) **核心概念:** - **JavaScript执行机制**:浏览器中的JavaScript执行过程及其对网页渲染的影响。 - **单进程模型**:大多数现代...
7. **事件循环与异步编程**:JavaScript是非阻塞的,事件循环和回调函数、Promise、async/await等异步处理机制是JavaScript性能的关键。书中可能会介绍这些概念及其优化技巧。 8. **DOM操作**:DOM是JavaScript与...
9. **异步编程**:详述回调函数、定时器和事件循环,介绍Promise和async/await的使用,解决异步代码的性能问题和回调地狱。 10. **浏览器优化**:讲解浏览器的工作原理,如渲染机制、缓存策略,以及如何利用这些...
1. **性能基础**:书中首先介绍了JavaScript性能的基础知识,包括执行环境、内存管理、DOM操作以及事件循环等,这些都是理解JavaScript性能瓶颈的关键。 2. **作用域和闭包**:理解JavaScript的作用域规则和闭包...
使用优化的循环结构可以提高JavaScript代码的性能,例如使用for循环代替while循环。 2. 减少DOM操作 减少DOM操作可以提高JavaScript代码的性能,例如使用innerHTML代替appendChild。 3. 使用setTimeout和...
JavaScript性能测试插件是用于评估和优化JavaScript代码执行效率的工具。通过自定义这样的插件,我们可以更好地理解和改进我们的Web应用程序在不同环境下的表现。在这个项目中,我们有两个主要文件:`t1.html`和`...
通过运行这些脚本,开发者可以得到一组量化指标,比如每秒执行的指令数(IPS)或其他性能指标,从而比较不同浏览器或同一浏览器的不同版本在JavaScript执行效率上的差异。这种测试对于优化网页应用性能、提升用户...
《Javascript 高性能程序开发》是由Nicholas C. Zakas所著的一本关于如何提高JavaScript性能的书籍。本书通过对JavaScript的深入分析,以及对脚本加载、执行、作用域管理等方面的研究,提出了许多提高JavaScript代码...
书中会探讨JavaScript性能优化的各种策略,如避免全局查找、合理使用闭包、掌握作用域链的工作原理、以及优化循环结构等。此外,它还可能涉及如何利用V8引擎的特性来提升JavaScript程序的运行效率,这对于大型应用或...
JavaScript的性能强大,它是一种开放的语言,社区支持广泛,这为开发者提供了一个良好的学习和交流环境。 JavaScript的发展历程同样重要。它诞生于互联网早期,最初被称为LiveScript,之后改名为JavaScript,并随着...
讨论了如何优化循环性能,避免不必要的计算,以及合理选择控制流工具来提高代码执行效率。 第五章 “字符串和正则表达式”: 字符串和正则表达式是JavaScript中的常见操作,但不当使用可能导致性能瓶颈。本章将介绍...
以下是对如何优化JavaScript循环的一些关键点的详细说明: 1. **避免在循环体中执行过多操作**: 循环体内的操作越多,执行时间就越长。如果循环体内包含复杂的计算或多次DOM操作,这将显著增加执行时间。尽量减少...