源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

优化 JavaScript 代码的方法小结

  • 时间:2020-08-31 01:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:优化 JavaScript 代码的方法小结
优化 JavaScript 代码 作者: Gregory Baker, GMail 软件工程师 和 Erik Arvidsson, Google Chrome 软件工程师 需要的经验: JavaScript 相关工作知识 客户端脚本能让你的应用更加地动态和活跃, 但是浏览器对代码的解析可能造成效率问题, 而这种性能差异在客户端之间也不尽相同. 这里我们讨论和给出一些优化你的 JavaScript 代码的提示和最佳实践. [b]使用字符串[/b] 字符串连接操作会对 Internet Explorer 6 和 7 的垃圾收集带来很大的影响. 尽管这个问题在 Internet Explorer 8 里面得到解决 -- 字符串连接在 IE8 和其它非 IE 浏览器(如 Chrome)中稍微更有效率一点 -- 如果你的用户中有很大一部分在使用 Internet Explorer 6 或 7, 你就需要非常注意你构建字符串的方式了. 有如下示例代码:
[url=http://blogs.msdn.com/ie/archive/2007/01/04/ie-jscript-performance-recommendations-part-3-javascript-code-inefficiencies.aspx]IE+JScript Performance Recommendations Part 3: JavaScript Code inefficiencies[/url] 获得更多有关在 IE 中使用闭包的信息. [h2]避免使用 [code]with[/code][/h2] 在你的代码中避免使用 [code]with[/code]. 它对性能有非常坏的影响, 因为它修改了作用域链, 让查找在其它作用域的变量变得代价高昂. [h2]避免浏览器内存泄漏[/h2] 内存泄漏对 Web 应用而言是个很普遍的问题, 它会带来严重的性能问题. 当浏览器的内存使用上升时, 你的 Web 应用, 连同用户系统的其他部分, 都会变慢. Web 应用最常见的内存泄漏原因是: 在 JavaScript 脚本引擎和浏览器 DOM 的 C++ 对象实现间的循环引用(例如, 在 JavaScript 脚本引擎和 Internet Explorer 的 COM 基础架构间, 或者 JavaScript 引擎和 Firefox 的 XPCOM 基础架构间). 下面是避免内存泄漏的一些经验法则: [h3]使用一个事件系统来附加事件处理函数[/h3] 最常见的循环引用模式 [ DOM 元素 --> 事件处理函数 --> 闭包作用域 --> DOM ] 在 [url=http://blogs.msdn.com/ericlippert/archive/2003/09/17/53028.aspx]这篇[/url] MSDN 的 Blog 文章中讨论过了. 为避免这个问题, 可以使用一个经过严格测试的事件系统来附件事件处理函数, 例如 [url=http://code.google.com/p/doctype/source/browse/trunk/goog/events/events.js#348]Google doctype[/url], [url=http://api.dojotoolkit.org/jsdoc/1.3/dojo.connec]Dojo[/url], or [url=http://docs.jquery.com/Events/bind#typedatafn]JQuery[/url]. 另外, 在 IE 中使用内联(inline)的事件处理函数会导致另外一类泄漏. 这不是通常的循环引用泄漏, 而是内存中临时匿名脚本对象的泄漏. 详情请查看 [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ietechcol/dnwebgen/ie_leak_patterns.asp]理解和解决 IE 泄漏模式(Understanding and Solving Internet Explorer Leak Patterns)[/url] 的 "DOM 插入顺序泄漏模型(DOM Insertion Order Leak Model)" 一节, 另外在 [url=http://www.javascriptkit.com/javatutors/closuresleak/index.shtml]JavaScript Kit 教程[/url] 中还有一个例子. [h3]避免使用扩展(expando)属性[/h3] 扩展属性是附加到 DOM 元素上的任意 JavaScript 属性, 也是循环引用的常见原因. 你能够在使用扩展属性时不导致内存泄漏, 但是很容易不小心就引入一个泄漏. 这个泄漏的模式是 [ DOM 元素 --> 扩展属性 --> 中间对象 --> DOM 元素 ]. 最好的方法就是避免使用它们. 如果你要使用它们, 就只使用简单的值类型. 如果你要非简单的类型, 那么在不再需要扩展属性时将它设为空(null). 参见 [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ietechcol/dnwebgen/ie_leak_patterns.asp]理解和解决 IE 泄漏模式(Understanding and Solving Internet Explorer Leak Patterns)[/url] 中的 "循环引用(Circular References)" 一节.
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部