`
yunzhongxia
  • 浏览: 647278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 性能优化技术

 
阅读更多

随着Google Chrome的发布,WEB应该说是老树发新芽,在技术本身并没有突破的情况下,每一个环节都在以更快的速度进行前进,譬如:

  1、JavaScript。现在每一个浏览器都在比较谁的执行速度更快,在你追我赶的过程中,毫无疑问,WEB变得更加快速,应用的能力也有越来越强大了。IE6、FF2的时代在现在回顾起来,已经变成老牛拉车的"历史"了。

  2、WEB标准化的速度也越来越快,CSS、HTML5的普及越来越加速,手机也从WAP快速的向WEB标准看齐。原来更多的WEB开发向IE倾斜的趋势,现在更多的向标准化倾斜。

  3、与Flash的争斗,尤其是apple的旗帜鲜明的不支持Flash的战斗,使得HTML5的职能从传统的文字图片迅猛的向2D、动画、视频等领域扩展,私有技术将越来越困难。

  所有的这些,都意味着WEB正在朝着第2春进行努力。本文则试图收集一下目前各主流浏览器的JavaScript加速机制,尝试探讨未来JavaScript能走多远?

  Firefox 3.6 Trace JIT 技术

  Firefox在Chrome的压力之下,迅速的发布了TraceMonkey引擎,相关的技术文档那个可以参考:http://www.ics.uci.edu/%7Efranz/Site/pubs-pdf/ICS-TR-06-16.pdf

  这个技术的特点是:

  1、JS解释器首先将源代码转变成为JavaScript字节码(LIR),每一个字节码都是SSA(Static Single Assignment)的。这个字节码在某种格式上与Java Bytecode是类似的。不同的是,JavaScript字节码缺乏类型信息,因此,在解释的过程中,需要根据当前的数据,进行选择性的处理。因此,每条指令其实都是涉及到更为复杂的运行时类型检查、动态分派的。

  2、TraceMonkey首先以解释的模式运行指令,但对loop(向后跳转)进行特殊关注:每一个向后跳转指令意味着一次循环的开始,TraceJIT关注的是对循环的优化,当一次循环开始时,TraceMoney试图对一次循环的所有指令进行跟踪,拉出一条平坦的执行线索(trace tree)。

  3、每一条执行线索,对其内部的类型信息,已经进行了一个假设,在这条线索执行过程中,相关的字节码实际上可以理解为已经替换为类型化的字节码(类似于Java的Bytecode)了。这个类型化的字节码再经过简单的JIT编译后,直接以机器码的方式执行。在线索执行开始时,会对类型信息进行检查,如果出现类型不匹配,则可能产生一个新的执行线索。

  4、执行线索内在的包含了method inline等技术。

  应该说,这种Trace技术,与以往的method level JIT相比,是完全不同的。在适合的应用里,Trace JIT相比V8等,还会有更大的执行效率提高。

  V8

  Chrome V8毫无疑问是本次浏览器大战的导火索,其功过还需要时间来验证。在http://code.google.com/intl/zh-CN/apis/v8/design.html中描述了V8的优化机制:

  Fast Property Access。快速对象属性访问。其特点是将JS对对象属性的访问,从一个动态的查找过程转换成类似于Java/C++的静态访问。毫无疑问,在JavaScript中,对象属性访问是最为频繁的一类操作,这个动态查找的过程其实是相当之消耗时间的。

  动态机器码生成。这个也是与快速属性访问相关的。它把动态的JS对象转变为一个类似于Java的静态布局对象。

有效的GC。V8提供的是一个 stop-the-world, generational, accurate的GC机制。而FF提供的则不是一个分代的GC。在实际应用中,分代的GC相比不分代的GC显然具有更高的效率。这一点,也是Java Hotspot所必须的。

  其它的,Opera 10.50号称推出了世界上那个最快速的JS引擎,不过,由于没有文档资料,暂时并不清楚其内部机制。

  预测:

  FF的优化机制和V8的优化机制是不一样的,两者完全是可以互补的。因此,可以想象,如果将V8的优化机制,如快速对象属性访问、分代GC等引入进来,结合Trace JIT技术,相信速度会有更大的提升。同理,对于V8而言,如果将Trace技术引入进来,对运行时的类型进行更准确的预测,那么,执行速度应该也有更大幅度的提升。

  综上,这些优化技术赋予了JavaScript更为强大的处理能力,使得浏览器可以更为快速的"下载执行"更大型的应用。使得原本需要在"native"语言中完成的功能,现在开始,可以在脚本语言中支持。

分享到:
评论

相关推荐

    Javascript 性能优化的一点技巧

    ### JavaScript性能优化技巧详解 #### 引言 随着Web应用的日益复杂,JavaScript作为前端开发的核心语言之一,其运行效率直接影响着用户体验与整体性能。因此,掌握一定的JavaScript性能优化技巧对于提升应用程序...

    JavaScript性能优化的小知识总结共23页.pdf

    以下是一些关于JavaScript性能优化的关键知识点: 1. **延迟加载(Lazy Loading)**:为了提高页面加载速度,可以使用延迟加载策略,如图片懒加载,只在用户滚动到可视区域时才加载资源。 2. **代码分割(Code ...

    JavaScript性能优化技巧分享共8页.pdf.zip

    这份"JavaScript性能优化技巧分享共8页.pdf.zip"压缩包文件很可能是对一些关键优化策略的总结,虽然我们无法直接查看具体内容,但根据标题和标签,我们可以探讨一些常见的JavaScript性能优化方法。 1. **延迟加载...

    JavaScript性能优化的小知识总结共23页.pdf.zip

    JavaScript性能优化是提升Web应用响应速度和用户体验的关键领域。这份名为"JavaScript性能优化的小知识总结共23页.pdf"的文档很可能包含了多个方面的重要信息,旨在帮助开发者掌握提高JavaScript代码效率的方法。...

    前端性能优化探索.pdf

    JavaScript性能优化是前端性能优化的重要一环。JavaScript是前端开发中最常用的脚本语言之一,优化它的性能可以有效地提升页面响应速度和流畅度。下面介绍一些常见的JavaScript性能优化方法: 1. 函数节流:函数...

    JavaScript语言精粹(高清电子版)和高性能JavaScript 双语版

    这本书的重点在于优化JavaScript代码的性能,确保应用程序的高效运行。书中可能包含以下知识点: 1. **性能分析**:如何使用开发者工具进行性能测试,识别瓶颈并进行优化。 2. **数据结构和算法**:选择合适的数据...

    前台javascript速度优化

    为了提供更好的用户体验,JavaScript性能优化至关重要。本文将深入探讨"前台JavaScript速度优化"的相关知识点,包括但不限于代码优化策略、工具应用以及Ajax性能提升。 一、代码优化策略 1. 减少DOM操作:频繁的...

    基于WebAssembly的JavaScript性能优化方案研究与实现之计算机分析.docx

    ### 基于WebAssembly的JavaScript性能优化方案研究与实现之计算机分析 #### 1. 研究背景和意义 随着互联网技术的飞速发展,Web应用程序的功能日益丰富,应用平台也呈现多元化趋势。JavaScript作为Web应用开发的...

    Java 大型网站性能优化实战从前端网络 CDN 到后端大促的全链路性能优化

    在构建和运行大型Java网站的过程中,性能优化是至关重要的,它直接影响着用户体验、服务器资源的利用率以及业务的可扩展性。本实战指南将探讨从前端网络到后端大促的全链路性能优化策略,旨在提升网站的整体效率。 ...

    Web 前端性能优化思路与学习方法

    4. 学习性能优化的最新趋势:随着技术的发展,不断有新的优化技术和工具出现,需要及时学习和跟进。 作为腾讯的Web前端高级工程师,对性能优化有着丰富经验,以下是一些具体的优化技巧: - 精简代码:去除无效和...

    web前端性能优化

    针对web前端性能低下的问题,王成、李少元、郑黎晓、缑锦、曾梅琴、刘慧敏等...随着技术的不断进步,前端性能优化的方法和工具也在不断演进,Web开发者需要持续关注新技术,不断学习和实践,才能跟上行业发展的步伐。

    高性能JavaScript PDF

    总的来说,"高性能JavaScript PDF"涵盖了如何利用JavaScript技术提高PDF文档的交互性和性能,这包括理解PDF的JavaScript支持、API使用、性能优化、安全实践等多个方面。通过深入学习和实践这些知识点,开发者能够...

    前端性能优化原理与实践.zip

    这本"前端性能优化原理与实践"小册子深入探讨了如何通过一系列技术手段优化前端页面,旨在帮助开发者构建更快、更流畅的Web应用。以下是该压缩包文件中可能涉及的一些核心知识点: 1. **延迟加载(Lazy Loading)**...

    JavaScript 性能优化小结

    在JavaScript性能优化的范畴中,字符串的拼接是一个常见的操作,也是性能优化的典型案例。通常情况下,开发者会使用类似Java中的StringBuilder或StringBuffer的方式来提升字符串拼接的性能。在JavaScript中,可以...

    你不知道的Node.js性能优化

    在部分内容中,提及了Node.js的性能优化涉及许多层面,包括使用最新的Node.js JavaScript库、C++绑定、libuv、V8等底层技术。这些底层组件的性能提升,直接关联到Node.js应用的性能。例如,V8引擎的优化,包括了对...

Global site tag (gtag.js) - Google Analytics