【js】性能问题
执行环境和作用域
一.全局变量和局部变量
每个执行环境都有与之关联的变量对象(变量和函数存储在这里),全局执行环境是最外围的执行环境,根据ECMA实现所在的宿主不同,表示的执行环境的对象也不同。在web浏览器中,全局执行环境被认为是window对象。
每个函数都有自己的执行环境,有自己对应的变量对象(arguments对象),当执行流进入一个函数时,函数的环境会被推进一个环境栈,函数执行完后,栈将其环境弹出,把控制权交给之前的执行环境。
当代码在一个环境执行的时候,会创建变量对象的作用域链。
二.延长作用域链(有点不理解延长?)
try-catch中的catch(IE8前catch捕获的错误对象被存在了执行环境的变量对象中,而不是catch语句的变量对象中,IE9修复了这问题)
with语句:
(function addUrl(){
var qs="?a=4";
with(location){
console.log("href : "+href);
//访问location的属性成功
var url=href+qs;
}
//console.log("href : "+href);
//访问location的属性失败
console.log("url : "+url);
})();
//with的变量对象中包含了location对象的所有属性和方法,这个变量对象被添加到了作用域链前端,而location的属性和函数只能在with的作用域内访问,在with之外的addUrl函数访问不到,但with之外的addUrl函数可以访问到with内新建的变量url。
(这里和“没有块作用域”的知识有矛盾,因为这里的with里面的location属性在with外面访问不到,所以with内部本身有变量对象,但是下面的知识点又提及到语句没有块作用域)
(严格模式下不允许使用with , with大量使用会影响性能)
三.没有块作用域
if else , for 等语句定义的变量会存放在最近的执行环境中,本身没有执行环境。
使用var声明的变量会自动被添加到最近的执行环境。
标识符的查询是由近到远。
内存
一.自动的垃圾收集机制
垃圾收集器会按照固定的时间间隔周期性地找出那些不再继续使用的变量,然后释放其占有的内存。
有两种方式:
标记清除(最常用,标记的方式有很多,原理一样);
引用计数(容易造成循环引用,特别是IE8及其以下的js的COM对象!);
二.管理内存
出于安全考虑,一般计算机系统分配给wed浏览器的内存数量比桌面应用程序少,所以要在有限的内存里达到更好的性能,就可以使用解除引用的方式,此时解除一个值的引用不是说自动收回所占用的内存,而是让值脱离执行环境以便垃圾收集器下次运行的时候回收。
【js】性能问题的更多相关文章
- js性能优化-事件委托
js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...
- 客户端JS性能的一些优化的小技巧
下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...
- js 性能基准测试工具-告别可能、也许、大概这样更快更省
平时写js经常遇到这样做是不是更快点?但又没有具体简单可测试的工具,最近也倒序看博客园司徒正美 js分类下的文章 [ps:去年灵光一闪,发现看博客园排名前100的博客.按照文章分类倒序看是学习最快的方 ...
- js性能的进阶
为了说明js性能方面的差异用一个简单的例子说明下, <style> #ul1{ padding: 5px; overflow: hidden; } #ul1 li{ list-style: ...
- 你不知道的Node.js性能优化,读了之后水平直线上升
本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...
- js 性能优化利器:prepack
1. js 性能优化 js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已. 这就要提到 prep ...
- js 性能优化 篇一
JS性能优化 摘自:http://www.china125.com/design/js/3631.htm 首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...
- js性能优化文章集锦
总结的js性能优化方面的小知识http://www.it165.net/pro/html/201503/35336.html 如何优化你的JS代码http://www.php100.com/html/ ...
- web优化 js性能高级篇
今天我们继续上一个阶段关于web的性能优化,如何对js高级进行优化 (1)闭包 何为闭包; 一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 我认 ...
- 关于js性能
1,声明变量要赋初值2,尽量避免声明全局变量,可以减少与系统的重名3,当编写大量js代码时,难免会遇到命名冲突,这是可以通过模拟命名空间方式 来避免冲突4,尽量避免使用全局变量,搜索全局变量是 ...
随机推荐
- 一个好的函数(gcd)求最小公约数
这个函数是我无意中看到的很不错,很给力,我喜欢 是用于求最小公约数的 简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0) ...
- 深入理解HTTP协议(转)
http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...
- mongo db 启动停止
1.下载压缩包,解压,bin目录放在path中: 2.cmd中输入mongod --dbpath d:\xx\yy\data 启动了 3.如果错误关闭,到d:\xx\yy\data中删除.lock文件 ...
- eclipse jsp html 格式化 format
eclipse jsp html 格式化 format http://blog.csdn.net/hexin373/article/details/7677250
- easyUI tootip组件使用
easyUI tootip组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- SVG六基本元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- overflow:hidden 你所不知道的事
overflow:hidden 你所不知道的事 overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. ...
- iOS 环信消息撤回
这两天在做环信的消息回撤,在网上找了许久没有这种案例,之后官方的一些方法,但是自己做,还是需要花点时间去整理,所以我决定等我把这个做好之后,分享给大家,如果做的不好多多指教,谢谢- 首先要实现消息撤回 ...
- kafka 以windows服务的方式在windows下安装并自启动
准备工作: 下载kafka http://apache.fayea.com/kafka/0.10.0.0/kafka_2.10-0.10.0.0.tgz 解压kafka至D:\bigdata\kafk ...
- [TPYBoard-Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...