编写高效的JavaScript程序.docx

编写高效的JavaScript程序.docx

ID:28576073

大小:664.62 KB

页数:15页

时间:2018-12-11

编写高效的JavaScript程序.docx_第1页
编写高效的JavaScript程序.docx_第2页
编写高效的JavaScript程序.docx_第3页
编写高效的JavaScript程序.docx_第4页
编写高效的JavaScript程序.docx_第5页
资源描述:

《编写高效的JavaScript程序.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、JavaScript引擎包括GoogleV8(Chrome,Node)都是专为快速执行大型JavaScript程序而设计的。在开发过程中,如果你在乎内存使用率和性能情况,那么你应该会关心在用户的浏览器中JavaScript引擎背后是怎么样的。无论是V8、SpiderMonkey(Firefox)、Carakan(Opera)、Chakra(IE)还是其他,有了它们可以帮助你更好的优化应用程序。  我们应该时不时地询问自己:·我还能做些什么使代码更加有效?·主流的JavaScript引擎做了哪些优化?·什么是引擎无法优化的,我能

2、期待利用垃圾回收进行清洁吗?   快速的加载Web网页就如同汽车一样,需要使用特殊工具。  当涉及到编写高效的内存和快速创建代码时总会出现一些常见的弊端,在这篇文章中我们将探索高效编写代码的测试验证方法。  一、JavaScript如何在V8中工作?  如果你对JS引擎没有较深的了解,开发一个大型Web应用也没啥问题,就好比会开车的人也只是看过引擎盖而没有看过车盖内的引擎一样(这里将Web网页比如成汽车)。Chrome浏览器是我的优先选择,这里我将谈下V8的核心组件:·一个基本的编译器,在代码执行前分析JavaScript、生

3、成本地机器代码而非执行字节代码或是简单的解释,该段代码之初不是高度优化的。·V8用对象模型“表述”对象。在JavaScript中,对象是一个关联数组,但是V8中,对象被“表述”为隐藏类,这种隐藏类是V8的内部类型,用于优化后的查找。·运行时分析器监视正在运行的系统并优化“hot”(活跃)函数。(比如,终结运行已久的代码)·通过运行时分析器把优化编译器重新编译和被运行时分析器标识为“hot”的代码,这是一种有效的编译优化技术,(例如用被调用者的主体替换函数调用的位置)。·V8支持去优化,也就是说当你发现一些假设的优化代码太过乐观

4、,优化编译器可以退出已生成的代码。·垃圾回收,了解它是如何工作的,如同优化JavaScript一样同等重要。  二、垃圾回收  垃圾回收是内存管理的一种形式,它试图通过将不再使用的对象修复从而释放内存占用率。垃圾回收语言(比如JavaScript)是指在JavaScript这种垃圾回收语言中,应用程序中仍在被引用的对象不会被清除。手动消除对象引用在大多数情况下是没有必要的。通过简单地把变量放在需要它们的地方(理想情况下,尽可能是局部作用域,即它们被使用的函数里而不是函数外层),一切将运作地很好。  垃圾回收清除内存  在Jav

5、aScript中强制执行垃圾回收是不可取的,当然,你也不会想这么做,因为垃圾回收进程被运行时控制着,它知道什么时候才是适合清理代码的最好时机。  1.“消除引用”的误解(De-ReferencingMisconceptions)  在JavaScript中回收内存在网上引发了许多争论,虽然它可以被用来删除对象(map)中的属性(key),但有部分开发者认为它可以用来强制“消除引用”。建议尽可能避免使用delete,在下面的例子中deleteo.x的弊大于利,因为它改变了o的隐藏类,使它成为通用的慢对象。varo={x:1};d

6、eleteo.x;//trueo.x;//undefined  目的是为了在运行时避免修改活跃对象的结构,JavaScript引擎可以删除类似“hot”对象,并试图对其进行优化。如果该对象的结果没有太大改变,超过生命周期,删除可能会导致其改变。  对于null是如何工作也是有误解的。将一个对象引用设置为null,并没有使对象变“空”,只是将它的引用设置为空而已。使用o.x=null比使用delete会更好些,但可能也不是很必要。varo={x:1};o=null;o;//nullo.x//TypeError  如果这个引用是最

7、后一个引用对象,那么该对象可进行垃圾回收;倘若不是,那么此方法不可行。注意,无论您的网页打开多久,全局变量不能被垃圾回收清理。varmyGlobalNamespace={};  当你刷新新页面时,或导航到不同的页面,关闭标签页或是退出浏览器,才可进行全局清理;当作用域不存在这个函数作用域变量时,这个变量才会被清理,即该函数被退出或是没有被调用时,变量才能被清理。  经验法则:  为了给垃圾回收创造机会,尽可能早的收集对象,尽量不要隐藏不使用的对象。这一点主要是自动发生,这里有几点需要谨记:1.正如之前我们提到的,手动引用在合适

8、的范围内使用变量是个更好的选择,而不是将全局变量清空,只需使用不再需要的局部函数变量。也就是说我们不要为清洁代码而担心。2.确保移除不再需要的事件侦听器,尤其是当DOM对象将要被移除时。3.如果你正在使用本地数据缓存,请务必清洁该缓存或使用老化机制来避免存储那些不再使用的大量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。