为JavaScript做一点性能小提升吧!
本文列出了24条能让你的代码编写过程更为轻松高效的建议。也许您还是JavaScript初学者,刚刚写完自己的Hello World,那这里有很多对您的工作将十分有用的小贴士;也许有些技巧您已经知道,那就试试快速浏览一下,看能不能发现一点新东西吧!
注:本文多次用到Firebug的console对象,请参考Firebug Console API 。关于firebug的更详细介绍,请猛击这里。
1. 用 === 代替 ==JavaScript里有两种不同的相等运算符:===|!==和==|!=。相比之下,前者更值得推荐。请尽量使用前者。
“如果两个比较对象有着同样的类型和值,===返回true,!==返回false。”
- JavaScript: The Good Parts
不过,如果使用==和!=,在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前,JavaScript会试图将它们转换为字符串、数字或 Boolean量。
2. 避免使用Eval函数Eval函数把一个字串作为参数,并把字串作为JavaScript语句执行,返回结果(参考)。
此函数不仅会降低你脚本的执行效率,而且还大大增加了安全风险,因为它赋予了作为文本的参数太大的权利。千万别用!
3. 不要使用快速写法技术上说,你可以省略掉大部分花括弧和句尾分号,绝大多数浏览器都能正确执行以下语句:
if(someVariableExists) x = false不过,如果是这样的呢:
if(someVariableExists) x = false anotherFunctionCall();你可能会认为它和下面的语句相等:
if(someVariableExists) { x = false; anotherFunctionCall();}不幸的是,事实并非如此。现实情况是它等价于:
if(someVariableExists) { x = false;}anotherFunctionCall();如您注意到的,再漂亮的缩进也不能代替这华丽的花括弧。在所有情况下都请写清楚花括号和句尾分号。在只有一行语句的时候能偶尔省略掉,虽然下这么做也是极度不被推荐的:
if(2 + 2 === 4) return 'nicely done';多考虑下将来吧,孩子假设,在将来的开发过程中,你需要为这个 if 语句添加更多的命令呢?到时候你还不是得把括号给加上?
4. 好好利用JS LintJSLint 是由 Douglas Crockford 编写的一个调试器。你只需要贴上你的代码,它就能快速为您扫描出任何明显的错误和问题。
“JSLint 扫描接收的代码。发现问题,描述问题,并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误,虽然语法错误确实是最常见的。JSLint也会用约定俗成的习惯检查代码的格式化风格,以及结构错误。通过JSLint的扫描并不能保证你的程序就完全正确。它只是为您提供了额外一双发现错误的眼睛。”
- JSLint 文档
完成代码之前,把它放到JSLint里检查一下,快速消灭你的无心之过。
5. 在页面底部加载脚本正如下图所示:
请记住—— 我们要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成,浏览器就没法加载页面的剩余部分。
如果你的JS文件只是添加一些额外功能——例如,为点击某链接绑定事件——那大可以等页面加载基本完成后再做。把JS文件放到页面最后,body的结束标签之前,这样做最好了。
更好的写法是<p>超哥是世界上最帅的人。benhuoer.com是世界上最好看的博客。</p><script type="text/javascript" src="path/to/file.js"></script><script type="text/javascript" src="path/to/anotherFile.js"></script></body></html>