《javascript高级程序设计》 第24章 最佳实践 Best Practices
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的更多相关文章
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- JavaScript DOM高级程序设计1.2-循序最佳实践--我要坚持到底!
我这人,最大的毛病就是浮躁. 下面开始我再一次的学习之旅,希望我能坚持到最后.记笔记除了分享以外,更重要的是让自己看见自己学习之路. 先把ADS库贴出来http://vdisk.weibo.com/s ...
- JavaScript高级程序设计第20章JSON 笔记 (学习笔记)
第二十章 JSON 1.Json 可以表示三种类型的值: 1.简单值: 表示数值:5 表示字符串:“hello wrold”注表示字符串时必须使用双引号 2.对象: {“name”:“mi”,”ag ...
- JavaScript 高级程序设计 第5章引用类型 笔记
第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...
- JavaScript高级程序设计第14章表单脚本 (学习笔记)
第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...
- 《JAVASCRIPT高级程序设计》第一章
在使用调制解调器的时代,频繁的表单验证对客户端来说是一个很大的负担,javascript,作为一种专门进行表单验证的客户端脚本语言诞生了.到今天,javascript早已超越了当初设定的角色.Java ...
- 《JavaScript 高级程序设计》第一章:简介
JavaScript 历史 JavaScript的诞生的主要是当时的 netspace 公司谋求为自己的浏览器 Navigator 添加一种脚本语言,以便在本地客户端进行一些行为操作,而这一功能的需求 ...
- JavaScript中变量、作用域和内存问题(JavaScript高级程序设计第4章)
一.变量 (1)ECMAScript变量肯能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象. (2)基本数据类型是按值访问,可 ...
- 《JavaScript高级程序设计》——第一章JavaScript简介
第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...
随机推荐
- Socket重叠IO
1.为什么到现在才弄懂这个 不知道这个Socket重叠IO这种模型是不是socket IO完成端口的基础,不过我感觉,学习一下这个再去学习socket IO完成端口是比较有好处的. 这个Scoket重 ...
- css参考文档; 官方英文说明!! 1 margin padding 百分比参照物 2 margin值为auto时的说明 3 div在div里垂直居中方法 4 dispaly:flex说明
css参考文档 http://css.doyoe.com/ 两篇很好的文章:(下面的css官方英文说明链接 有时间可以研究下 http://www.w3.org/TR/css3-box/ ...
- 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...
- 学习Berkeley DB- 入门
1 导言 首先,我们要了解Berkeley DB的一些基本特性,在IBM的开发网站上有篇文章对其有比较清晰的介绍: 这篇文章讲到了BDB的设计思想和核心数据结构.以及数据访问算法:并有常用函数使用范例 ...
- implement "slam_karto" package on a Freight robot
1. login ssh fetch@<robot ip or robot name> 2. set robot master modify .bashrc in robot's com ...
- iOS - OC NSNull 空值
前言 @interface NSNull : NSObject <NSCopying, NSSecureCoding> 作为占据空间的一个空值,如用在数组或字典中占据一个没有任何值的空间. ...
- [转载] Google数据中心网络技术漫谈
原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...
- JavaWeb学习总结(四)—ServletConfig和ServletContext
一.ServletConfig 1. ServletConfig介绍: ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletCo ...
- GCC编译器和GDB调试器常用选项
http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello ...
- caffe中的filler.hpp源码的作用:
filler.hpp文件:(它应该没有对应的.cpp文件,一切实现都是在头文件中定义的,可能是因为filler只分在网络初始化时用到那么一次吧) 1,首先定义了基类:Filler,它包括:一个纯虚函数 ...