zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》学习笔记——最佳实践

    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.formsdocument.images

    5.部署(略)

  • 相关阅读:
    查看硬件的一些命令
    InfluxDB部署和使用
    利用mysql时间函数监控表中有没有当天数据
    js基础_for循环(学习笔记)
    JS基础_运算符的优先级
    JS基础_相等运算符
    Apache安装与卸载(win10系统测试)
    MySQL --添加环境变量教程
    MySQL安装教程及遇到的错误提示
    如何完全卸载MySQL
  • 原文地址:https://www.cnblogs.com/chemandy/p/2182951.html
Copyright © 2011-2022 走看看