第四章

算法和流程控制

代码组织结构和解决具体问题的思路是影响代码性能的主要因素

循环处理是最常见的编程模式之一,也是提高性能的关注点之一

循环分四种:标准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的更多相关文章

  1. CSS揭秘读书笔记 (一)

    CSS揭秘读书笔记      (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px  solid  hsla(0,0%,100%,.5); background: ...

  2. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  3. 《Two Days DIV + CSS》读书笔记——CSS选择器

    1.1.2 CSS选择器 CSS 选择器最基本的有四种:标签选择器.ID 选择器.类选择器.通用选择器. [标签选择器] 一个完整的 HTML 页面由很多不同的标签组成,而标签选择器,则是决定哪些标签 ...

  4. 《Two Days DIV + CSS》读书笔记——CSS控制页面方式

    1.1 你必须知道的知识 (其中包括1.1.1 DIV + CSS的叫法解释:1.1.2 DIV + CSS 名字的误区:以及1.1.3 W3C简介.由于只是背景知识,跳过该章.) 1.2 你必须掌握 ...

  5. CSS Grid 读书笔记

    基本概念 MDN上的解释是这样的 CSS Grid Layout excels at dividing a page into major regions or defining the relati ...

  6. css揭秘读书笔记

    currentColor属性让hr和段落相同的颜色: div { color: red; } hr { background: currentColor; /* 一定要设置高度*/ height: 0 ...

  7. css进阶读书笔记

    说明:努力在十一左右,最迟双11之前掌握所有css知识要点 一.摘自<写给大家看的CSS书(第2版)>(虽然书比较旧,09年版的,但对于我这种刚入门的小菜鸟 来说,能学到的还是挺多的) 1 ...

  8. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

  9. (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记

    1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...

  10. 【读书笔记《Bootstrap 实战》】6.单页营销网站

    我们已经掌握了很多实用 Bootstrap  的重要技能.现在,是时候拿出更多的创意来帮助客户实现他们全方位在线营销的愿望了.此次将带领大家做一个漂亮的单页高端营销网站. 主要任务如下: □ 一个大型 ...

随机推荐

  1. Redis的安装和使用之------Redis相关运用

    原文  http://wangzhijian.blog.51cto.com/6427016/1731962 一.简介 REmote DIctionary Server(Redis) 是一个由 Salv ...

  2. NGUI中的Tween的委托使用

    public TweenPosition tweenIn; public TweenScale tweenOut; EventDelegate In = new EventDelegate(this, ...

  3. c#如何使两个方法并行运行

    static void Main(string[] args)        {            Parallel.Invoke(Foo, Bar);        } static void ...

  4. [Q]无矩形外框块参照图形的识别

    该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).

  5. 疯狂java讲义--笔记

    第一章.Java语言概述与开发环境 什么是软件:一系列按照特定顺序组织的计算机数据和指令的集合: 交互方式:两种 GUI(Graphical User Interface) 图像界面 .CLI (Co ...

  6. rpm 安装包制作

    rpm 安装包制作 思路 参照系统自带 etcd 解压->替换掉执行文件->打包 1 预备安装工具 下载工具 yumloader #yum install -y yum-utils 解压工 ...

  7. 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解

    1. http://bbs.wuyou.com/forum.php?mod=viewthread&tid=303679&fromuid=396698

  8. surface pro系统按键+重装系统

    一. 如果无法进入系统: surface pro1代,可以插入U盘启动盘,然后按音量键上键,然后按电源键,然后释放电源键,然后等屏幕上"Surface"出来后,释放音量键. 2代以 ...

  9. Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,报错处理

    Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,会报错,不能使用相应的方法. 原因:java访问限制级api的时候,默认的eclipse设 ...

  10. (repost)在ARM Linux内核中增加一个新的系统调用

    实验平台内核版本为4.0-rc1,增加一仅仅打印Hello World的syscall,最后我们在用户空间swi验证 实验平台内核版本为4.0-rc1,增加的系统调用仅仅是简单打印一个Hello Wo ...