第四章

算法和流程控制

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

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

循环分四种:标准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. ES6就是ES2015 的主要内容

    转自 https://segmentfault.com/a/1190000004365693 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在 ...

  2. 用js使得输入框input只能输入数字

        JS判断只能是数字和小数点1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g, ...

  3. JS判断在哪个浏览器打开

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  4. java基础<迷你DVD系统>

    一.写在main方法中 import java.util.*; public class MyDVDMgr { public static void main(String[] args){ Scan ...

  5. release management客户端无法连接到release management server的问题解决

    参考:http://myalmblog.com/2014/03/error-installing-release-management-client/ 装了服务器,装客户端.然后客户端连不上服务器. ...

  6. Servle资源注射

    Servle资源注射@WebServlet(name = "DownloadServlet",urlPatterns ="/DownloadServlet" ) ...

  7. Passing Reference by value

    今天查bug的时候,遇到一个问题,一个Dictionary<int[],string>数据结构,在使用key取它的value时: var tempVar = _dic[key]; 发生崩溃 ...

  8. 前端知识点一HTML相关知识点

    1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层 分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaSc ...

  9. Django- 'WSGIRequest' object has no attribute 'user'

    在用django建第一个blog的时候,进入localhost:8000/admin的时候报上面的错: 查了好多资料,最后还是没解决,最后发现原因是我第一次建这个blog工程的时候用的django的版 ...

  10. @ResponseBody注解与JSON

    MappingJacksonHttpMessageConverter 调用了 objectMapper.writeValue(OutputStream stream, Object)方法,使用@Res ...