移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript性能瓶颈

介绍

本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3。博文也分为三个大部分:

1. 众望所归的HTML5将主要介绍HTML5的前世今生,主要功能和API以及相关Demo,Demo的代码都可以在文章附件中下载到;

2. 高性能JavaScript将主要介绍如何让JavaScript更流畅,JavaScript debug和分析工具,可以说,没有JavaScript就不可能有互联网的今天,更不可能有移动互联网的明天,编写高性能的JavaScript至关重要;

3. 变化万千的CSS3将主要介绍如今异常强大的CSS3,结合HTML5编写动态的Web应用。熟练使用异常Fashion & Cool & 炫的CSS3将使Web应用增色不少。

本篇是高性能JavaScript介绍的第一篇,主要介绍JavaScript语言特性,为什么要编写高性能的JavaScript代码,以及对编写高性能JavaScript代码的开篇小结。

HTML5 系列文章

移动Web应用程序开发 HTML5篇 (一) HTML5简介

移动Web应用程序开发 HTML5篇 (二) 新功能介绍和测试

移动Web应用程序开发 HTML5篇 (三) Canvas API

移动Web应用程序开发 HTML5篇 (四) 多媒体 API

移动Web应用程序开发 HTML5篇 (五) 地址位置 API

移动Web应用程序开发 HTML5篇 (六) 通信(Communication) API

移动Web应用程序开发 HTML5篇 (七) Web Sockets API

移动Web应用程序开发 HTML5篇 (八) Offline Web Applications

移动Web应用程序开发HTML5篇 (九) Web Storage API

1. JavaScript 介绍

JavaScript用于Web编程的功能实现,被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies,以及更多的应用。按照WiKipedia的说法,它是:

Prototype-based scripting language;

Dynamic, weakly typed and has first-class functions language;

Implementation of the ECMAScript language standard. ECMA-262-3。

我们依次来解释其中每句话的意思。

1. JavaScript是基于原型的脚本语言:基于原型的语言和传统基于类型的语言如Java等相对的。基于原型的语言所有的对象都是实例,通过原型来继承属性,构造函数或者原型指定了一组初始的属性.可以对一个对象或者一组对象动态的增加和删除属性。

2. 动态的,弱类型以及拥有First class function 的语言。

动态是指JavaScript是运行时动态解释的语言,系统不会将其编译为二进制文件进行执行。

弱类型是和强类型相对的,弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。

First Class Function是指"能够用于类型生命",即变量的类型可以是函数,可以赋值和传递函数。

3. 多范式的,支持基于对象的,指令模式和函数编程。

4. JavaScript是ECMAScrip标准的一个实现,目前使用的是ECMA-262-3. ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)通过ECMA-262标准化的脚本程序设计语言。

2. 为什么JavaScript性能很重要

通过上面的介绍,我们了解了JavaScript的属性和大致情况,那么为什么程序员在开发JavaScript代码时需要特别注重JavaScript性能呢?原因主要有以下几点:

1. 在过去的十年中,互联网改变了一切,最近的2年中,移动互联网深刻地改善了人们的生活,各种新技术层出不穷,HTML5,CSS3等等。网络负载越来越大,网页内容越来越丰富,加载的内容也越来越多,所有的一切都变了,只有JavaScript没有变。其作为一种脚本语言,伴随着互联网的发展十余年,都没有改变过。所以在以前没有的性能问题,如今都显现出来,如长时间Block UI Thread等问题。这就迫切需要我们深入了解其机制,编写高性能的JavaScript代码。

2. JavaScript是一个动态解释的语言,其固有特性导致运行的速度比编译成二进制代码的语言要慢很多,要想加快运行速度迫使开发者开发高性能的JavaScript代码。

3. 由于JavaScript是动态运行的,并没有编译环节,所以也迫使开发者编程时要完成很多本来可以由编译器完成的优化选项。比如gcc -o3的这些优化原理需要开发者在开发JavaScript代码时,自己手动去编写。

3. 总结

综上所述,JavaScript作为一个广受欢迎的web开发脚本语言,因为其已使用的特点,被广大Web开发者用来开发各种应用程序,但是由于网络环境,负载情况和运行环境在近几年都发生了很大的变化使开发者必须为Web应用优化JavaScript代码才能使其得到高效的运行,同时JavaScript固有特性使开发者需要去做可以由编译器完成的优化工作,也迫使开发者编写高性能的JavaScript代码。

本篇完,在第二篇中将给大家介绍目前流行的JavaScript引擎以及如何使用JavaScript性能分析工具来Tuning你的JavaScript代码。

参考文献: High performance JavaScript O'Reilly Yahoo Press

相关文章阅读:

JavaScript被扩展以支持并行运算

For more complete information about compiler optimizations, see our Optimization Notice.