由于上篇篇幅过长,导致编辑出了问题,另开一篇文章继续:

(4)减少迭代次数,最广为人知的一种限制循环迭代次数的模式被称为“达夫设备(Duff`s Device)”

Duff`s Device的理念是:每次循环最多可以调用8次process()。循环的迭代次数为总数除以8,由于不是所有数字都能被8整除,变量startAt用来存放余数,表示第一次循环应该循环多少次。假设总次数为12,则余数为4,代表第一次循环会调用4次process(),第二次循环startAt至为0,循环8次,这样就用两次循环代替了12次循环。(感觉这个方法还是很好的,以后工作中必然用的到)

第二个版本经过了优化,用while取代了switch,将余数与主循环分开:

这种方式用两次循环代替了之前的一次徐循环,但是它移除了循环主体中的switch语句,速度比原始循环还快。

不过使用这种方式目的是提高性能,要是循环次数本身就比较少,使用这种方式的效果并不明显,以1000次循环为一个分界点,如果超过1000次循环,那么这样的执行效率就会明显提升。

(5)forEach():此方法便利一个数组的所有成员,并在每个成员上执行一个函数。要运行的函数作为参数传给forEach(),并在调用时接收三个参数,分别是:当前的数组项的值、索引以及数组本身。

Items.forEach(function(value,index,arry){ process(value);})

总结:在所有情况下,基于循环的迭代比基于函数的迭代法快8倍;

(二)条件

1、If-else对比switch

大多数情况下switch比if-else运行要快;

2、if-else优化

(1)if-else中的条件语句应该总是按照从最大概率到最小概率的顺序排列,以确保运行速度最快。

(2)如果一个条件语句需要判断10次以上,为了最小化条件判断的次数,代码可以重写为一系列嵌套的if-else语句;这个适用于多个值域需要测试,单如果是离散值的话,用switch语句更合适;

(三)查找表

当使用查找表示,必须完全抛弃条件判断语句。这个过程变成数组项查询或对象成员查询。当单个键和单个值之间存在逻辑映射时,查找表的优势就能体现出来,switch语句更适合与每个键都需要对应一个独特的动作或一系动作的场合。

(四)递归

使用递归可以把复杂的算法变得简单。但是潜在问题是终止条件不明确或缺少终止条件会导致函数长时间运行,并使得用户界面处于假死状态;

(五)、迭代算法

任何递归能实现的算法同样可以用迭代来实现。迭代算法通常包含几个不同的循环,分别对应计算过程的不同方面,虽然这样会引入他们自身的问题,但是运行一个循环比反复调用一个函数的开销要少很多

(六)、Memoization

Memoization他缓存前一个计算结果提供后续使用,避免重复工作。

重写递归阶乘函数,防止重复执行

今天就更新到这里,后续还会继续更新。。

前端js优化方案(二)持续更新的更多相关文章

  1. 前端js优化方案(连续更新)

    最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...

  2. 前端js优化方案(一)

    最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...

  3. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  4. 移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~

    前言:在移动端WEBAPP开发中会遇到各种各样的问题,通过此文对遇到的问题做一个归纳总结,方便自己日后查询,也给各位前端开发友人做一个参考.   此文中涉及的问题是本人开发中遇到的,解决方案是本人思考 ...

  5. Java Web 前端高性能优化(二)

    一.上文回顾 上回我们主要从图片的合并.压缩等方面介绍前端性能优化问题(详见Java Web 前端高性能优化(一)) 本次我们主要从图像BASE64 编码.GZIP压缩.懒加载与预加载以及 OneAP ...

  6. 浅谈前端性能优化(二)——对HTTP传输进行压缩

    1.前端性能优化的一点: 对js.css.图片等进行压缩,尽可能减小文件的大小,减少文件下载的时间,从而减少网页响应的时间. 2.前端性能优化的另一点: 对HTTP传输进行压缩,即在js,css.图片 ...

  7. MySQL优化方案二

    摘自:http://www.thinkphp.cn/topic/3855.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需 ...

  8. WEB前端性能优化之二——css优化

    1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示.HTML规范清 楚指 ...

  9. JS 字符串处理相关(持续更新)

    一.JS判断字符串中是否包含某个字符串 indexOf() indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置.如果要检索的字符串值没有出现,则该方法返回 -1. var str ...

随机推荐

  1. cocos2d-x CCHttpRequest获取网络图片并显示

    转自:http://www.cnblogs.com/hzj730/p/3178431.html //图片结构 class imgstruct : public CCObject { public: i ...

  2. c++常用函数STL

    完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写. 后来我发现了qt,opencv,opengl,原来,c++好玩的狠. 在这 ...

  3. C#窗体上绘制矩形

    先上效果图 鼠标三个事件 private void Form1_MouseDown(object sender, MouseEventArgs e) { //记录开始点 this.mousedown ...

  4. <c和指针>学习笔记4之字符串

    1 字符串基础 NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节. (1)字符串长度 size_t strlen(char const * string)注 ...

  5. 建立JNI层的本地对象,并与JAVA层交互方法

    最近在做OpenCV4Android开发的时候,需要从摄像头捕获多个图片,传值给本地对象,每次捕获到图片都更新数据,最后将计算得到的数据传给JAVA层,并在界面中显示.经过摸索和调试后,找到了通过本地 ...

  6. Apache Shiro知识点总览

    名词解释 权限认证 授权 ini文件配置 jsp标签授权 Shiro会话机制 自定义Realm 加密.解密 特性 与spring整合 名词解释 Subject:认证主体 Reaml:认证来源[jdbc ...

  7. girdspec实现画布

    对于简单的画布可以很轻松的使用subplot解决,可是对于一些复杂的画布比如下面的这个 就不易使用subplot解决,这是就需要subplot的扩展版gridspec 构造函数GridSpec(nro ...

  8. codevs 3162 抄书问题

    3162 抄书问题 题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如 ...

  9. 【TIDB】3、数据库的发展历史、现在、未来

    1.从单机数据库说起(Mysql.Oracle.PostgreSQL) 关系型数据库起源自1970年代,其最基本的功能有两个: 把数据存下来: 满足用户对数据的计算需求. 第一点是最基本的要求,如果一 ...

  10. axios 跨域配置

    axios跨域设置 找到项目config文件夹下的index.js文件,将dev中的proxyTable项中添加配置 proxyTable: { '/api': { target: 'https:// ...