《高性能Javascript》读书笔记-4
第四章
算法和流程控制
代码组织结构和解决具体问题的思路是影响代码性能的主要因素
循环处理是最常见的编程模式之一,也是提高性能的关注点之一
循环分四种:标准for循环
for (var i = ; i < Things.length; i++) {
Things[i] //循环主题
}
while循环
var i =;
while(i<){ //前提条件
//循环主题
i++;
}
do-while循环:
var i =;
do{
//循环主题
}while(i++ <); //后测条件
for-in循环
for(var pro in object){
//循环主题
}
pro变量赋值给object的一个属性名 返回 属性包括的对象实例属性和 原型链中继承而来的属性
四种循环类型中 只有for-in循环比其他四种明显要慢
不要使用for-in来遍历数组的成员
循环类型的选择应该基于需求而不是性能
减少迭代的工作量:
循环优化的第一步:减少对象成员及数组的查找次数
提高这个循环的性能很简单,只查找一次属性,并把值存储到一个局部变量,然后在控制条件中使用这个变量;
var len = len=Things.length //存储变量 len
for (var i = 0 ; i < len; i++) {
//循环主题
}
还可以颠倒数组来提高循环性能
//减少属性查找 并反转
for (var i =Things.length; i--;) {
Things[i]
}
控制条件与true做比较,非0得数值转true 等于0的数值则为false;
减少迭代次数
能获得更加显著的新能提升,最知名的一种模式为:达夫设备;
基本概念:每次循环最多可调用8次process() 循环迭代次数为总数除以8;由于不是所有数字都能被8整除,变量stratAt 用来存放余数;表示第一次循环应调用多少次process 如果是12 则第一次循环 调用4次
第二次调用8次 用二次循环替代12次循环;
<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--]);
}
</script>
例如 在500000此迭代中 运行速度将比常规循环少70%;
if-else与 switch
最流行的方法是基于测试条件的数量判断,数量越大 越倾向于 switch 而不是 if-else
二分法把值域分成一系列区间,然后逐步减少范围,代码运行的平均时间大约是前面列子的一半,这个方法非常适用于多个值域的需要测试的时候(如果离散值 那么switch更合适)
递归
function digui(n){
if (n==0) {
return 1;
}else{
return n*digui(n-1);
}
}
递归的问题:终止条件不明确 或者缺少终止条件会导致函数长时间运行 并使得界面处于假死状态
合并排序算法是递归函数可以提升性能 也是最常见的递归算法
《高性能Javascript》读书笔记-4的更多相关文章
- CSS揭秘读书笔记 (一)
CSS揭秘读书笔记 (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px solid hsla(0,0%,100%,.5); background: ...
- 《精通CSS》读书笔记(一)
最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...
- 《Two Days DIV + CSS》读书笔记——CSS选择器
1.1.2 CSS选择器 CSS 选择器最基本的有四种:标签选择器.ID 选择器.类选择器.通用选择器. [标签选择器] 一个完整的 HTML 页面由很多不同的标签组成,而标签选择器,则是决定哪些标签 ...
- 《Two Days DIV + CSS》读书笔记——CSS控制页面方式
1.1 你必须知道的知识 (其中包括1.1.1 DIV + CSS的叫法解释:1.1.2 DIV + CSS 名字的误区:以及1.1.3 W3C简介.由于只是背景知识,跳过该章.) 1.2 你必须掌握 ...
- CSS Grid 读书笔记
基本概念 MDN上的解释是这样的 CSS Grid Layout excels at dividing a page into major regions or defining the relati ...
- css揭秘读书笔记
currentColor属性让hr和段落相同的颜色: div { color: red; } hr { background: currentColor; /* 一定要设置高度*/ height: 0 ...
- css进阶读书笔记
说明:努力在十一左右,最迟双11之前掌握所有css知识要点 一.摘自<写给大家看的CSS书(第2版)>(虽然书比较旧,09年版的,但对于我这种刚入门的小菜鸟 来说,能学到的还是挺多的) 1 ...
- css 揭秘-读书笔记
css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...
- (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记
1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...
- 【读书笔记《Bootstrap 实战》】6.单页营销网站
我们已经掌握了很多实用 Bootstrap 的重要技能.现在,是时候拿出更多的创意来帮助客户实现他们全方位在线营销的愿望了.此次将带领大家做一个漂亮的单页高端营销网站. 主要任务如下: □ 一个大型 ...
随机推荐
- 脚本录制--html模式和url模式
设置位置:tool--recording options-recording 1.html模式--默认---结果较简单 脚本采用html页面的形式来展示,优点:容易维护.容易理解 2.url模式--- ...
- ascii 转换为 utf-8
Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错: UnicodeDecodeError: 'ascii' codec can't de ...
- Map - leetcode [哈希表]
149. Max Points on a Line unordered_map<float, int> hash 记录的是斜率对应的点数 unordered_map<float, i ...
- ajax无法跳转页面的问题,
将return true去掉!
- html5精品教程
链接:http://pan.baidu.com/s/1ntr7yJ3 密码:7qvz链接:http://pan.baidu.com/s/1c0haxZM 密码:paok
- [SQL基础教程] 2-1 SELECT语句基础
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
- 各种文件的ContentType
CONTENT_TYPE = { 16 '.load': 'text/html', 17 '.123': 'application/vnd.lotus-1-2-3', 18 '.3ds': 'imag ...
- centos-mysql 安装
初学者自编文档,如有错误,请指出,具体命令就不阐述了,不明白 度娘吧! nginx我是编译安装在服务器上 和其他安装应该会有区别 安装路径路径:/usr/local/ 安装包存放位置:/home/ap ...
- servlet就实现在线用户表
在学习servlet的过程中,学习了如何用servlet实现在线用户表. 只有服务器处于开机状态才会有在线用户表的存在,在服务器关机的情况下自然就不存在在线用户表的说法:所以,楼主认为在线用户表的信息 ...
- lucene 多字段查询-MultiFieldQueryParser
/** * 搜索域加权 */ Map<String, Float> boosts = new HashMap<>(); boosts.put("title" ...