第四章

算法和流程控制

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

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

循环分四种:标准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. SDN理解:SDN现状

    目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF -  ...

  2. Ansible安装配置

    Ansible工具的安装与配置 Ansible基于SSH,不需要在远程端安装任何软件,只需要在管理端安装ansible及其组件即可. Ansible使用前提是已配置ssh密钥免登陆. 一.安装组件: ...

  3. Intellj idea 安装JUnit

    1.file-Settings-Plugins-Browse repositories-HTTP Proxy Settings将No proxy改成Auto-detect proxy settings ...

  4. hdu 1536 S-Nim (简单sg函数)

    题意:首先输入K 表示一个集合的大小  之后输入集合 表示对于这对石子只能去这个集合中的元素的个数 之后输入 一个m 表示接下来对于这个集合要进行m次询问 之后m行 每行输入一个n 表示有n个堆  每 ...

  5. 【转载】pygame安装与两种版本的Python兼容问题

    在开始学习游戏编程之前,我们先来安装下pygame和python3.2.5 参考园友: http://www.cnblogs.com/hongten/p/hongten_pygame_install. ...

  6. zabbix 布署实践【5 使用邮箱SMTP SSL推送告警邮件】

    由于传统的邮件推送脚本使用smtp 25端口,在各大邮箱提供商已不适用,已经向SSL过渡,这里以QQ邮箱为例,使用SSL 465端口 登录zabbix-server 进入 cd /usr/lib/za ...

  7. PHPStorm 安装 SASS、SCSS + Compass

    许久没更新博客啦,这两天研究了下 SASS 和 LESS ,最终选了 SASS,因为相对比较成熟些吧,试了很多坑之后,终于成功了,下面上步骤: 1. 安装 PHPStorm 的 SASS 插件 好像是 ...

  8. 图像处理_imgproc笔记(1)

    图像处理_滤波器 (1)图像的平滑处理 图像的平滑也称模糊,平滑处理需要一个滤波器,最常用的滤波器就是线性滤波器,线性滤波器的输出像素值是g(x,y),是输入像素值是  f(x,y)的加权和:    ...

  9. cp执行命令,如何直接覆盖不提示

    参数说明 -i, --interactive prompt before overwrite (overrides a previous -n option)   #文件存在是,交互式提示是否覆盖 - ...

  10. trove instance service 总结

    def create(self, req, body, tenant_id): # TODO(hub-cap): turn this into middleware LOG.info(_LI(&quo ...