达夫设备之js】的更多相关文章

最近阅读<高性能JavaScript>时,在书中的“达夫设备“ . 对此,有些感悟,同时有些疑问,希望看到的朋友,能帮忙解释下,在此先提前感谢了. 1. 先说自己的理解吧: ”达夫设备“的目的是减少迭代次数,提高循环的效率,减少时间,提升性能. 感受:感觉代码的优化,真的需要用工匠精神来雕琢,代码的思想很好,也很巧妙. 原文的意思:是否值得使用达夫设备,无论是原始的版本还是修改后的版本,很大程度上依赖于迭代的次数.如果循                         环迭代次数少于 1'00…
达夫设备设备是一段非常巧妙,看起来非常诡异的c代码,它可以很大的提高程序执行的效率(本文将试验),达夫设备的来源我就不说了,我们来分析一下. 达夫设备是考虑到我们一般用for或者while循环的时候,如果执行循环内容本身用不了多少时间,那么时间将被主要消耗在每次循环的比较语句上边. 事实上比较语句是有很大优化空间的,假设你要循环1000次,结果你从第一次开始就不断的比较是否达到上界,这是很徒劳的. 达夫这个哥们利用了switch语句的跌落行为设计了达夫设备. 我们用达夫设备计算一个累加运算,累加…
前言 在<高性能JavaScript>一书的第四章算法和流程控制中,提到了减少迭代次数加速程序的策略—达夫设备(Duff's device).达夫设备本身很好理解,但是其效果是否真的像书中所说“如果迭代次数超过1000,那么达夫设备的执行效率将明显提升”?还是随着浏览器性能的逐渐增强,这种以牺牲代码阅读性而获取的性能提升已经微不足道? 达夫设备 达夫设备真的很简单,说白了就是“循环体展开”.看如下的代码: var a = [0, 1, 2, 3, 4]; var sum = 0; for(va…
主要是下面的代码: register n = (count + 7) / 8;   /\* count > 0 assumed \*/ switch (count % 8) { case 0:    do { \*to = \*from++; case 7:     \*to = \*from++; case 6:     \*to = \*from++; case 5:     \*to = \*from++; case 4:     \*to = \*from++; case 3:    …
ID:技术让梦想更伟大 作者:李肖遥 wechat链接:https://mp.weixin.qq.com/s/b1jQDH22hk9lhdC9nDqI6w 相信大家写业务逻辑的时候,都是面向if.else.for.while.switch编程.但是你见过switch嵌套do..while吗? 先上代码 void send( int * to, int * from, int count) { int n = (count + ) / ; switch (count % ) { case : do…
利用JS判断浏览器的用户代理,从而获得设备类型.利用这个方法可以获得用户的设备是移动设备还是PC设备.     JS代码如下:       function browerType() {         var sUserAgent = navigator.userAgent.toLowerCase();   //浏览器的用户代理设置为小写,再进行匹配         var isIpad = sUserAgent.match(/ipad/i) == "ipad";   //或者利用i…
  使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 来自译者 markzhai:大家也知道最近 Web 越来越火了,如果你还以为 Web 就是 jQuery.Ajax.CSS 什么的,那你就 out 了.给大家几个链接看一看吧: https://shop.polymer-project.org/ https://housing.com/ https://www.flipkart.com/ ht…
by Conmajia PC上的JavaScript已经发展到ECMAScript 6(ES6),马上ES10都快出来了(虽然还是草案),但是硬件上的JS却很少听说.这几年手持设备/可穿戴设备的发展非常快,可以说快到令人发指.以ARM为主的嵌入式CPU几年前运行gingerbread都还卡的不行,现在已经845.855,3GHz主频起步,轻松秒杀一票PC了.既然硬件这么强,那么我就有了在嵌入式设备里玩JavaScript的可能,并且我坚信它一定是可行的,于是我找权威人士咨询了一下. ▲ 仙人指路…
1.思路: 能力检测 + 字符串检索 2.例子 IE    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)      ActiveXObject函数 Firefox   Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1      getBoxObjectFor函数 Opera    Opera/9.27 (Windows NT 5.2; U; zh-…
由于上篇篇幅过长,导致编辑出了问题,另开一篇文章继续: (4)减少迭代次数,最广为人知的一种限制循环迭代次数的模式被称为“达夫设备(Duff`s Device)” Duff`s Device的理念是:每次循环最多可以调用8次process().循环的迭代次数为总数除以8,由于不是所有数字都能被8整除,变量startAt用来存放余数,表示第一次循环应该循环多少次.假设总次数为12,则余数为4,代表第一次循环会调用4次process(),第二次循环startAt至为0,循环8次,这样就用两次循环代替…
由于设备多样性(PC.ios.安卓.pad.tv)以及各设备对js脚本支持性差异性.js兼容性调试显得越来越重要. 0:尽力模仿真实场景下进行调试,迅速定位问题以及提供解决方案. 1:setTimeout(function(),1); 将脆弱性代码放到定时器中,延缓加入浏览器队列,给单线程一点时间. 2:对脆弱性代码(易引起兼容性问题的代码)为确保程序健壮性,采用更加清晰.准确性更一致的属性和方法替换.…
高性能的JavaScript 一.      加载和运行 将脚本放在底部 脚本下载解析执行时,页面已经加载完成并显示在用户面前 成组脚本 减少外部脚本文件数量,整合成一个文件 延迟脚本 动态脚本元素 非阻塞方式 XMLHttpRequest var xhr = new XMLHttpRequest(); xhr.open("get", "file.js", true); xhr.onreadystatechange = function() { if(xhr.rea…
谈到javascript的性能优化,有好多点,比如把script放到离body闭合标签附近,合并多个script标签等等,还有一些代码的性能,for的性能不如while的性能好,用while模拟for循环等等等. 1.从加载开始 在浏览器中,js文件的执行和下载会阻塞css和dom的渲染,这是浏览器的单线程所致,后来chrome,ff等浏览器启用了js文件的并行下载,然而js文件的运行还是会被阻塞,有的浏览器支持defer关键字. <script type="text/javascript…
在大多与编程语言中,代码的执行时间大部分消耗在循环中,是提升性能必须关注的要点之一 循环的类型 for循环(它由四部分组成:初始化.前测条件.后执行体.循环体.) for(var i = 0; i < 10; i++){ doSomething(); } 可以将 var 改成 let 因为 var i会创建一个函数级/全局变量. while循环(while循环是最简单的循环,由前测条件和循环体组成.) var i = 0; while(i < 10) { doSomething(); i++;…
JavaScript高性能开发的十条建议 文/开发部 Dimmacro 编者按:javascript开发大部分程序员都做过,写出来的代码质量也千差万别,现在浏览器内嵌的解释器虽然效率已经很高了,但在客户完美体验的趋势下还是捉襟见肘,编写高性能javascript代码,无疑能带来更好的客户体验.本文的这些建议能给开发者带来一定的方向指导,值得一读. 1.使用延迟脚本,动态加载脚本,XHR脚本注入等方式加载js脚本,避免多脚本加载出现的页面长时间等待. 编辑解读:每读取一个页面,页面内容从上到下顺序…
1.加载与执行: (1)将脚本放在底部:(否则会阻塞) (2)由于每个<script>标签初始下载时都会阻塞页面渲染,所以减少页面包含的<script>标签数量有助于改善这一情况.这不仅仅针对外链脚本,内嵌脚本的数量同样也要限制.浏览器在解析HTML页面的过程中每遇到一个<script>标签,都会因执行脚本而导致一定的延时,因此最小化延迟时间将会明显改善页面的总体性能.(多个js文件可以使用合并处理器,合成一个js文件) (3)延迟的脚本:defer属性: 任何带有de…
第一章 加载和执行 大多数浏览器都是用单一进程处理UI界面的刷新和JavaScript的脚本执行,所以同一时间只能做一件事,Javascript执行过程耗时越久,浏览器等待响应的时间就越长. 所以,HTML页面在遇到 无阻塞的脚本 尽管减少Javascript文件的大小并限制HTTP请求次数仅仅只是第一步,下载单个较大的Javascript脚本执行也许要锁死大量的事件,所以无阻塞的脚本的意义在于页面加载完成之后再下载脚本. 延迟的脚本 <script defer> 这是告知,延迟脚本内的内容不…
加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上下文加载执行完一个继续加载执行下一个文件会阻塞页面资源的加载,所以一般情况下JavaScript文件放在body标签内底部,很多后端开发人员放在body标签外下面,这样做不好的地方有两点:1.不规范 2.可能会造成js获取不到页面元素而导致报错.而放在body标签内底部可以去保js执行前有页面渲染完成. js... //正确 js... 合并脚本每个<script>标签初始化下载都会阻塞页面渲染,所以减少页面的…
高性能JavaScript整理总结 关于前端性能优化:首先想到的是雅虎军规34条然后最近看了<高性能JavaScript>大概的把书中提到大部分知识梳理了下并加上部分个人理解这本书有参考雅虎特别性能小组的研究成果,所以跟34 军规有很多相似之处有不当之处请在评论区指正,感谢~ 约定:很多单词语法都是简写比如doc指document,点点点代表不重要代码省略,码字不易(/双手合十) 1. 加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上至下加载执行完一个再继续…
笨办法学C 中文版 前言 导言:C的笛卡尔之梦 练习0:准备 练习1:启用编译器 练习2:用Make来代替Python 练习3:格式化输出 练习4:Valgrind 介绍 练习5:一个C程序的结构 练习6:变量类型 练习7:更多变量和一些算术 练习8:大小和数组 练习9:数组和字符串 练习10:字符串数组和循环 练习11:While循环和布尔表达式 练习12:If,Else If,Else 练习13:Switch语句 练习14:编写并使用函数 练习15:指针,可怕的指针 练习16:结构体和指向它…
镇楼图: 跨平台系列: Linux基础 1.Linux基础学习 By dnt http://www.cnblogs.com/dunitian/p/4822807.html 环境配置 1.Hyper-v 安装CentOS 7 (其他虚拟机一样参考) http://www.cnblogs.com/dunitian/p/4976077.html 2.CentOS服务器网络配置 http://www.cnblogs.com/dunitian/p/4975830.html 3.Xshell 连接CentO…
在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). duff's device也是利用了类似的原理减少比较的次数来提高了效率. 前几天在网上看见了一段代码,叫做“Duff's Device”,后经验证它曾出现在Bjarne的TC++PL里面: void send( int * to, int * from, int count)         …
移动端适配方案,说多也很多.可以使用百分比布局,但百分比与em都是基于父元素进行计算的,在实际应用中不是很方便.使用rem不仅可以设置字体大小,块大小也可以设置.而且可以良好的适配各种终端,所以这方案很受欢迎. rem定义及浏览器支持情况 rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位.它们之间其…
前言 上一篇探讨了达夫设备对于代码性能的影响,本文主要探讨并且测试各种常见的循环语句的性能以及流程控制中常见的优化. 循环语句 众所周知,常用的循环语句有for.while.do-while以及for-in,forEach.除了for-in和forEach性能略低外,平时我们对前三者的选择更多的是基于需求而非性能考虑,今天我们就对它们各自的性能做个测试,告诉我们最极端的情况下还能做哪些优化. 首先我们来谈谈为何for-in和forEach会比其他的慢.for-in一般是用在对象属性名的遍历上的,…
循环 在javaScript中的四种循环中(for.for-in.while.do-while),只有for-in循环比其它几种明显要慢,另外三种速度区别不大 有一点需要注意的是,javascript没有块级作用域,只有函数级作用域,也就是说在for循环初始化中的var语句会创建一个函数级变量而非循环级变量 优化循环的方法有如下 1.减少对象成员及数组项的查找次数(使用局部变量保存需要查找的对象成员) 2.颠倒数组的顺序来提高循环性能,也就是从最后一项开始向前处理 for (var i = ar…
第九题 #include <stdio.h> int main() { float f=0.0f; int i; ;i<;i++) f = f + 0.1f; if(f == 1.0f) printf("f is 1.0 \n"); else printf("f is NOT 1.0\n"); ; } 知识点讲解: 浮点寄存器 浮点寄存器是FPU的组成部分.硬件架构不同,浮点寄存器的个数和位数也不同.X86架构的浮点寄存器有: 1)8个80位的数据…
在上一篇 winform 与 html 交互 简单案例 中讲了winform与html之间的简单交互,接下来的内容是在winform中以html为中转站,实现将swf嵌入winform中并实现交互. 1.首先建立一个fla文件,函数ExternalInterface.addCallback("接口函数:来源js中",返回处理函数:as中接收js数据的相关处理);函数ExternalInterface.call("接口函数:来源js中",参数): as关键代码: va…
第四章 算法和流程控制 代码组织结构和解决具体问题的思路是影响代码性能的主要因素 循环处理是最常见的编程模式之一,也是提高性能的关注点之一 循环分四种:标准for循环 ; i < Things.length; i++) { Things[i] //循环主题 } while循环 ; ){ //前提条件 //循环主题 i++; } do-while循环: ; do{ //循环主题 }); //后测条件 for-in循环 for(var pro in object){ //循环主题 } pro变量赋值…
1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感觉自己写得不错了,结果和网上的一笔感觉还是差很多,也学到了很多,下面贴上网址供大家看看.http://blog.csdn.net/cazicaquw/article/details/7044602. 里面讲得很详细,很多细节对于我们初学者来说也是很有用的.但感觉他写得太繁琐了,其实从指针到bool的…
引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1.原生态APP开发:2.适配移动设备的JS+HTML网站,套上跨平台的“马甲”:3.微信小程序及公众号(其实和第2点一样,套了微信的壳).其中运用JS+HTML的应用占据大部分,这个比例是多少我没有统计和查询相关数据,反正就是很多吧.而JS+HTML移动开发中,大多采用的框架是,前端页面加上WebSe…