1.JavaScript中四种基本数据存取位置:字面量,本地变量,数组元素,对象成员。一般来说:[字面量,局部变量]运行速度>[数组,对象成员]2.内部属性包含了一个函数被创建的作用域中对象的集合。这个集合被称为作用域链。3.执行函数->创建执行环境->创建活动对象(即函数运行时变量对象)。所以多次调用同一个函数会导致创建多个执行环境。4.函数执行过程每遇到一个变量都会经历一次标识符解析过程,从哪里获取或存储数据。该过程搜索执行...
随着 Web2.0 技术的不断推广,越来越多的应用使用 javascript 技术在客户端进行处理,从而使 JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题。而这个问题又因 JavaScript 的阻塞特性变的复杂,也就是说当浏览器在执行 JavaScript 代码时,不能同时做其他任何事情。本文详细介绍了如何正确的加载和执行 JavaScript 代码,从而提高其在浏览器中的性能。01-概览无论当前 JavaScript 代码是内嵌还是在外链文件中,页...
下面是我们使用Node.js时遵循的10个性能规则:1. 避免使用同步代码在设计上,Node.js是单线程的。为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作。Node.js的一个显著特征是:它从上到下的设计和实现都是为了实现异步。这让它非常适合用于事件型程序。不幸的是,还是有可能会发生同步/阻塞的调用。例如,许多文件系统操作同时拥有同步和异步的版本,比如writeFile和writeFileSync。即...
假设要生成一千万个随机数,常规的做法如下: var numbers = []; for (var i = 0; i < 10000000; i++) { numbers.push(Math.random()); }然而,在IE下执行这段代码时,却弹出了一个窗口提示用户是否停止这段脚本。出现这种情况,首先想到的是优化循环体。但明显地,循环体很简单,没什么优化的余地。即使把循环体清空,提示仍然存在。于是,我得出了一个结论:在IE下,一旦循环次数超过了某个特定值,就会弹出停止脚本的提示。 原...
确保代码尽量简洁 不要什么都依赖JavaScript。不要编写重复性的脚本。要把JavaScript当作糖果工具,只是起到美化作用。别给你的网站添加大量的JavaScript代码。只有必要的时候用一下。只有确实能改善用户体验的时候用一下。 尽量减少DOM访问 使用JavaScript访问DOM元素很容易,代码更容易阅读,但是速度很慢。下面介绍几个要点:限制使用JavaScript来修饰网页布局,把针对访问元素的引用缓存起来。有时,当你的网站依赖大...
一.注意作用域避免全局查找一个例子:function updateUI(){var imgs = document.getElementByTagName("img");for(var i=0, len=imgs.length; i<len; i++){imgs[i].title = document.title + " image " + i;}var msg = document.getElementById("msg");msg.innnerHTML = "Update complete."; }该函数可能看上去完全正常,但是它包含了三个对于全局document对象的引用。如果在页面上有多个图片,那么for循环中的document引用就会被执...
数据的存取位置也影响着JavaScript的运行速度,我们来总结一下如能分配存取位置最合理,能够高效的运行JavaScript数据存取位置 分为 1.字面量(如true、false、null等) 2.本地变量(var a=5;) 3.数组元素(var arr=[]; arr[0]=5;) 4.对象成员 以上这些都可以存储数据根据不同浏览器进行的200 000次读取数据所需时间得出,由快到慢为 1 2 3 4 (综合得出,不同浏览器会有浮动)快速高效执行JavaScript代码小结:1.访问字面量、本...
其实查看jQuery的源代码,发现each的代码很简单,但为什么性能和原生的for循环相差几十倍呢?jQuery的each的核心代码for (; i < length; i++) { value = callback.call(obj[i], i, obj[i]); if (value === false) { break; } }看着很简单,但为什么会慢很多呢?编写测试代码如下:var length=300000; function GetArr() { var t = []; for (var i = 0; i < length; i++) { t[i] = i; } return t; } function each1(ob...
函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用。函数节流的原理挺简单的,估计大家都想到了,那就是定时器。当我触发一个时间时,先setTimout让这个事件延迟一会再执行,如果在这个时间间隔内又触发了事件,那我们就clear掉原来的定时器,再setTimeout一个新的定时器延迟一会执行,就这样。以下场景往往由于事件频繁被触发,因而频...
这几日拜读了Steve Souders的《高性能网站建设指南这本书》,虽然这本书可能已经有些老了,但薄薄的一个小册子里提出的网站性能优化的准则还是非常有价值的。这些规则都有个共同点,就是用很小的工作就能获得很明显的性能提升,性价比极高。废话不多说了,总结一下书里的几点性能优化规则。 首先有一点需要说明的是书中所写的性能黄金法则:只有10%~20%的响应时间花在了下载HTML文档上,其余的80%~90%时间花在了下载页面的所有组...
JavaScript 数组去重经常出现在前端招聘的笔试题里,比如:有数组 var arr = [a, b, c, 1, 0, c, 1, , 1, 0],请用 JavaScript 实现去重函数 unqiue,使得 unique(arr) 返回 [a, b, c, 1, 0, 1, ]作为笔试题,考点有二:1. 正确。别小看这个考点,考虑到 JavaScript 经常要在浏览器上运行,在千姿百态的各种浏览器环境下要保障一个函数的正确性可不是一件简单的事,不信你继续读完这篇博客。2. 性能。虽然大部分情况下 JavaScript ...
JavaScript已经是目前最流行的语言了,它能做很多事情 - 网站界面,服务器端,游戏 ,操作系统 ,机器人 等等很多很多。 不过,说实话,即使它这么疯狂流行,它的性能还没有达到它的极限。是的,它在改进,但是等到它在各个方面赶上本地应用之前,在做一个HYBIRD混合应用时,你还不得不使用一些伎俩来优化它的性能。 Firefox拥有目前最快的JavaScript解析器 SpiderMonkey, 有各种各样的让JavaScript的速度更快的努力,其中...
如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题。几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端性能的书籍,轰动了整个web开发技术界,让神秘的web前端优化问题成为了大街的白菜,web前端优化变成了菜鸟和大牛都能回答的简单问题,当整个业界都知道了惊天秘密的答案,那么现有的优化技术已经不能对你开发的网站产生的质的飞越,为了让我们开发的网站性能比别人的网站更加优秀,我们需要更加深入的...
将多个字符串拼接在一起,通常有以下三种方法,在实践中都是经常用到的。使用字符串连接符 ‘+’, string1 + string2 + ...使用数组的join函数。先把字符串写入临时数组中,然后调用数组的join方法,将其中的字符串元素连接起来。使用字符串的concat函数。方法一: 使用字符串连接符 ‘+’var concat1 = function(str1, str2){return str1 + str2; };方法二: 使用数组的join函数var concat2 = function(str1, str2){var arr = [];...
微软的开发周期中很重要的一块是调整产品的性能。性能调整也是开发者应当留心的关键部分之一。 经过多年发展,业界对于如何优化Win32程序性能已经有非常多的了解。 现在开发者遇到的问题之一是不太清楚是什么导致DTHML和HTML页面运行快或者慢。当然,有一些很简单的方法——比如不要使用2MB大的图片。我们曾经使用过另外一些有趣的技巧提高了DHTML页面的性能,希望它们能帮助你改善自己的页面性能。 这里我使用了一个建立Table的程...