24.1 可维护性 Maintainability
24.1.1 什么是可维护的代码 What Is Maintainable Code?
24.1.2 代码约定 Code Conventions 
24.1.3 松散耦合 Loose Coupling
24.1.4 编程实践 Programming Practices
24.2 性能 Performance
24.2.1 注意作用域 Be Scope-Aware
24.2.2 选择正确方法 Choose the Right Approach
24.2.3 最小化语句数 Minimize Statement Count
24.2.4 优化DOM 交互 Optimize Dom Interactions
24.3 部署 Deployment
24.3.1 构建过程 Build Process
24.3.2 验证 Validation
24.3.3 压缩 Compression

3. 解耦应用逻辑/事件处理程以下是要牢记的应用和业务逻辑之间松散耦合的几条原则:

 勿将event 对象传给其他方法;只传来自event 对象中所需的数据;
 任何可以在应用层面的动作都应该可以在不执行任何事件处理程序的情况下进行;
 任何事件处理程序都应该处理事件,然后将处理转交给应用逻辑。

3.避免与null 进行比较
如果看到了与null 比较的代码,尝试使用以下技术替换:
 如果值应为一个引用类型,使用instanceof 操作符检查其构造函数;  if (values instanceof Array)
 如果值应为一个基本类型,使用typeof 检查其类型;
 如果是希望对象包含某个特定的方法名,则使用typeof 操作符确保指定名字的方法存在于对
象上。

24.2.1 注意作用域
1.避免全局查找
var doc = document;
var imgs = doc.getElementsByTagName("img");
2. 避免with 语句

24.2.2 选择正确方法
1. 避免不必要的属性查找
使用变量和数组要比访问对象上的属性更有效率,后者是一个O(n)操作。

24.2.3 最小化语句数
//用4 个语句创建和初始化数组——浪费
var values = new Array();
values[0] = 123;
values[1] = 456;
values[2] = 789;

//只用一条语句创建和初始化数组
var values = [123, 456, 789];

24.2.4 优化DOM交互
var list = document.getElementById("myList"),
fragment = document.createDocumentFragment(),

for (i=0; i < 10; i++) {
item = document.createElement("li");
fragment.appendChild(item);
。。。
2. 使用 innerHTML

3. 使用事件代理
任何可以冒泡的事件都不仅仅可以在事件目标上进行处理,目标的任何祖先节点上也能处理。使用这个知识,就可以将事件处理程序附加到更高层的地方负责多个目标的事件处理。

4. 注意HTMLCollection
避免在循环体内多次调用HTMLCollection。
var images = document.getElementsByTagName("img"),
image,
i, len;
for (i=0, len=images.length; i < len; i++){
image = images[i];
//处理
}

24.3.3 压缩
1. 文件压缩
2. HTTP 压缩

《javascript高级程序设计》 第24章 最佳实践 Best Practices的更多相关文章

  1. 《JavaScript高级程序设计》——第二章在HTML使用JavaScript

    这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...

  2. JavaScript DOM高级程序设计1.2-循序最佳实践--我要坚持到底!

    我这人,最大的毛病就是浮躁. 下面开始我再一次的学习之旅,希望我能坚持到最后.记笔记除了分享以外,更重要的是让自己看见自己学习之路. 先把ADS库贴出来http://vdisk.weibo.com/s ...

  3. JavaScript高级程序设计第20章JSON 笔记 (学习笔记)

    第二十章 JSON 1.Json 可以表示三种类型的值: 1.简单值: 表示数值:5  表示字符串:“hello wrold”注表示字符串时必须使用双引号 2.对象: {“name”:“mi”,”ag ...

  4. JavaScript 高级程序设计 第5章引用类型 笔记

    第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...

  5. JavaScript高级程序设计第14章表单脚本 (学习笔记)

    第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...

  6. 《JAVASCRIPT高级程序设计》第一章

    在使用调制解调器的时代,频繁的表单验证对客户端来说是一个很大的负担,javascript,作为一种专门进行表单验证的客户端脚本语言诞生了.到今天,javascript早已超越了当初设定的角色.Java ...

  7. 《JavaScript 高级程序设计》第一章:简介

    JavaScript 历史 JavaScript的诞生的主要是当时的 netspace 公司谋求为自己的浏览器 Navigator 添加一种脚本语言,以便在本地客户端进行一些行为操作,而这一功能的需求 ...

  8. JavaScript中变量、作用域和内存问题(JavaScript高级程序设计第4章)

    一.变量 (1)ECMAScript变量肯能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象. (2)基本数据类型是按值访问,可 ...

  9. 《JavaScript高级程序设计》——第一章JavaScript简介

    第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...

随机推荐

  1. 【leetcode❤python】 223. Rectangle Area

    #-*- coding: UTF-8 -*-#先判断是否有重叠class Solution(object):    def computeArea(self, A, B, C, D, E, F, G, ...

  2. 滤镜模糊效果,利用了文字阴影和透明。其实是抄的iSlider官网的

    <!DOCTYPE html> <html> <meta charset="UTF-8"> <meta name="viewpo ...

  3. 【转】Ajax中send方法参数的使用(get/post)

    Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : ...

  4. [原创] 使用LP Wizard 10.5 制作 Allegro PCB封装

    本文只讲述使用 Calculator 和 Wizard 功能制作封装,通常学会使用这种方法,通用的标准封装就都可以生成了.下面以一个简单的SOIC-8封装的芯片来说明软件使用方法. 第一步,查找相关d ...

  5. gastic 安装

    所有文件下载地址: ftp://ftp.broadinstitute.org/pub/GISTIC2.0/ cd /home/software/ tar zxf GISTIC_2_0_22.tar.g ...

  6. DIV与IDIV的用法

    DIV (unsigned divide) 无符号数除法 格式:DIV SRC 执行的操作: 字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中.表示为 (AL) ...

  7. SQL判断临时表是否存在

    IF EXISTS(select * from tempdb..sysobjects where id=object_id('tempdb..#tb')) BEGIN DROP TABLE #tb E ...

  8. Shell Sort(草稿)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Shel ...

  9. 拓扑排序--UVa10305

    题目 Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortun ...

  10. LINQ之路 2:C# 3.0的语言功能(上)

    在上一篇的LINQ介绍中,我们已经看到了隐式类型变量var,扩展方法(extension method)和lambda表达式的身影.没错,他们正是LINQ技术的基石,是他们让LINQ的实现成为可能,并 ...