Author:chemandy
第二十章 最佳实践
1.可维护性
1.1 什么是可维护的代码:
□可理解性
□直观性
□可适应性
□可扩展性
□可调试性
1.2 代码约定
①可读性
1)代码缩进,建议使用4空格缩进
2)代码注释
□函数和方法
□大段代码
□复杂的算法
□Hack
②变量和函数名
□变量名应为名词
□函数名应该以动词开头
□变量和函数都应使用合乎逻辑的名字,不要担心长度(进行js压缩时会替换掉)
③变量类型透明
□初始化,当定义一个变量后,应初始化一个值,来暗示它将来应该如何应用。
var found = false;
□使用匈牙利标记法指定变量
var bFound; //布尔值
var iCount; //整数
var sName; //字符串
var oPerson; //对象
□使用类型注释
var found /* Boolean */ = false;
2.松散耦合
①解耦HTML/JavaScript
②解耦CSS/JavaScript
③解耦应用逻辑/事件处理程序
3.编程实践
①尊重对象所有权
1)如果你不负责维护某个对象、它的对象或者它的方法,那么你就不能对他们进行修改。
□不要为实例或原型添加属性。
□不要为实例或原型添加方法。
□不要重定义已存在的方法。
2)最佳的方法是永远不修改不是由你所有的对象,可以通过以下方式为对象创建新的功能:
□创建包含所需功能的新对象,并用它与相关对象进行交互。
□创建自定义类型,继承需要进行修改的类型。然后为自定义类添加额外功能。
②避免全局变量
使用命名空间:
//创建全局对象。
var Wrox = {};
//为Professional JavaScript创建命名空间
Wrox.ProJS = {};
//将书中用到的对象附加上去
Wrox.ProJS.EventUtil = {…};
Wrox.ProJS.CookieUtil = {…};
③避免与null进行比较
□如果值为一个引用类型,使用instanceof操作符检查其构造函数;
□如果值为一个基本类型,使用typeof检查其类型
□如果是希望对象包含某个特定的方法名,则使用typeof操作符确保指定名字的方法存在于对象上。
□代码中的null比较少,就容易确定代码的目的,并消除不必要的错误。
④使用常量
□重复值
□用户界面字符串
□URLs
□任意可能会更改的值
4.性能
4.1 注意作用域
①避免全局查找:在一个函数中若会用到多次的全局对象则存储为局部变量。
②避免with语句
4.2 选择正确方法
①避免不必要的树形查找
□一旦多次用到对象属性,应该将其存储在局部变量中。第一次访问改值为O(n),后续访问为O(1).
②优化循环
□减值迭代
□简化终止条件
□简化循环体
□使用后测试循环
③展开循环
□当循环的次数是确定的,消除循环并使用多次函数调用往往更快。
□Duff装置处理循环。
④避免双重解析
□当JavaScript代码想解析JavaScript的时候就会存在双重解析惩罚。
当使用eval()函数或者是function构造函数以及使用setTimeout()传入一个字符串参数时。
⑤性能的其他注意事项
□原生方法较快
□switch语句较快
□位运算符较快
4.3 最小化语句数
完成多个操作的单个语句要比完成单个操作的多个语句快。
①多个变量声明
②插入迭代值
③使用数组和对象字面量
4.4 优化DOM交互
①最小化现场更新
②使用innerHTML
③使用事件代理
④注意NodeList
发生一下情况会返回NodeList对象
□getElementsByTagName()
□获取元素的childNodes属性
□获取元素的attribute属性
□访问了特殊的集合,document.forms、document.images等
5.部署(略)