javascript编程的最佳实践推荐

时间:2022-12-30 12:54:24

推荐的javascript编程的最佳实践,摘要记录在这里:

可维护的代码
保证代码的性能
部署代码

1 可维护的代码
1.1什么是维护的代码:
可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原开发人员的完整解释。
直观性——代码中的东西一看就能明白,不管其操作过程多么复杂。
可适应性——代码以一种数据上的变化不要求完全重写的方法撰写。
可扩展性——在代码架构上已考虑到在未来允许对核心功能进行扩展。
可调试性——当有地方出错时,代码可以给予你足够的信息来尽可能直接地确定问题所在。

1.2 代码约定:
可读性
变量和函数命名
命名的一般规则如下所示:
变量名应为名词如 car 或 person。
函数名应该以动词开始,如 getName()。返回布尔类型值的函数一般以 is 开头,如isEnable()。
变量和函数都应使用合乎逻辑的名字,不要担心长度。长度问题可以通过后处理和压缩来缓解。
变量类型透明

1.3 松散耦合
解耦 HTML/JavaScript
解耦 CSS/JavaScript
解耦应用逻辑/事件处理程序

1.4 编程实践
尊重对象所有权
  不要为实例或原型添加属性
  不要为实例或原型添加方法
  不要重定义已存在的方法
  创建包含所需功能的新对象,并用它与相关对象进行交互
  创建自定义类型,继承需要进行修改的类型。然后可以为自定义类型添加额外功能。
避免全局量
  最多创建一个全局变量,让其他对象和函数存在其中,单一的全局量的延伸便是命名空间的概念
避免与 null 进行比较,如果看到了与 null 比较的代码,尝试使用以下技术替换
  如果值应为一个引用类型,使用 instanceof 操作符检查其构造函数
  如果值应为一个基本类型,使用 typeof 检查其类型
  如果是希望对象包含某个特定的方法名,则使用 typeof 操作符确保指定名字的方法存在于对象上。
  代码中的 null 比较越少,就越容易确定代码的目的,并消除不必要的错误。
使用常量
  重复值
  用户界面字符串
  URLs
  任意可能会更改的值

2. 性能
2.1 注意作用域
  避免全局查找
  避免 with 语句
2.2 选择正确方法
  避免不必要的属性查找,最简单、最快捷的算法是常数值即 O(1)
  优化循环
    减值迭代
    简化终止条件
    简化循环体
    使用后测试循环
    展开循环,考虑使用一种叫做 Duff 装置的技术

//credit: Jeff Greenberg for JS implementation of Duff’s Device
//假设 values.length > 0
var iterations = Math.ceil(values.length / 8);
var startAt = values.length % 8;
var i = 0;
do {
switch(startAt){
case 0: process(values[i++]);
case 7: process(values[i++]);
case 6: process(values[i++]);
case 5: process(values[i++]);
case 4: process(values[i++]);
case 3: process(values[i++]);
case 2: process(values[i++]);
case 1: process(values[i++]);
}
startAt = 0;
} while (--iterations > 0);
//credit: Speed Up Your Site (New Riders, 2003)
var iterations = Math.floor(values.length / 8);
var leftover = values.length % 8;
var i = 0;
if (leftover > 0){
do {
process(values[i++]);
} while (--leftover > 0);
}
do {
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
} while (--iterations > 0);

    避免双重解释, eval("alert('Hello world!')"); setTimeout("alert('Hello world!')", 500);
    性能的其他注意事项
      原生方法较快
      Switch 语句较快, 还可以通过将 case 语句按照最可能的到最不可能的顺序进行组织
      位运算符较快 诸如取模,逻辑与和逻辑或都可以考虑用位运算来替换。
2.3 最小化语句数
    多个变量声明,var count = 5, color = "blue", values = [1,2,3], now = new Date(); 变量声明只用了一个 var 语句,要比单个变量分别声明快很多。
    插入迭代值
    使用数组和对象字面量
2.4 优化DOM交互
    最小化现场更新,即不要频繁的动态修改或生成DOM
    使用 innerHTML
    使用事件代理
    注意 HTMLCollection,编写 JavaScript 的时候,一定要知道何时返回 HTMLCollection 对象
    
3 部署
3.1 构建过程
  知识产权问题
  文件大小
  代码组织
  记住通过<script>标记引用 JavaScript 文件是一个阻塞操作
  使用 Ant进行 JavaScript 和 CSS 的构建自动化

<project name="JavaScript Project" default="js.concatenate">
<!-- 输出的目录 -->
<property name="build.dir" value="./js" />
<!-- 包含源文件的目录 -->
<property name="src.dir" value="./dev/src" />
<!-- 合并所有 JS 文件的目标 -->
<!-- Credit: Julien Lecomte, http://www.julienlecomte.net/blog/2007/09/16/ -->
<target name="js.concatenate">
<concat destfile="${build.dir}/output.js">
<filelist dir="${src.dir}/js" files="a.js, b.js"/>
<fileset dir="${src.dir}/js" includes="*.js" excludes="a.js, b.js"/>
</concat>
</target>
</project>

# ant js.concatenate

3.2 验证
  有些工具可以帮助确定 JavaScript 代码中潜在的问题,其中最著名的就是 Douglas Crockford 的 JSLint (www.jslint.com)。
  JSLint 可以查找 JavaScript 代码中的语法错误以及常见的编码错误。
    eval()的使用;
    未声明变量的使用;
    遗漏的分号;
    不恰当的换行;
    错误的逗号使用;
    语句周围遗漏的括号;
    switch 分支语句中遗漏的 break;
    重复声明的变量;
    with 的使用;
    错误使用的等号(替代了双等号或三等号);
    无法到达的代码。
它也可以使用基于Java的Rhino JavaScript引擎(www.mozilla.org/rhino/)运行于命令行模式下
# java -jar rhino-1.6R7.jar jslint.js a.js b.js c.js

<target name="js.verify">
<apply executable="java" parallel="false">
<fileset dir="${build.dir}" includes="output.js"/>
<arg line="-jar"/>
<arg path="${rhino.jar}"/>
<arg path="${jslint.js}" />
<srcfile/>
</apply>
</target>

# ant js.verify

这个目标假设 Rhino jar 文件的位置已经由叫做 rhino.jar 的属性指定了,同时 JSLint Rhino 文件的位置由叫做 jslint.js 的属性指定了。output.js 文件被传递给 JSLint 进行校验,然后显示找到的任何问题。

3.3 压缩
  文件压缩
    删除额外的空白(包括换行);
    删除所有注释;
    缩短变量名。
  YUI 压缩器,http://yuilibrary.com/projects/yuicompressor
  java -jar yuicompressor-2.3.5.jar -o cookie.js CookieUtil.js

<!-- Credit: Julien Lecomte, http://www.julienlecomte.net/blog/2007/09/16/ -->
<target name="js.compress">
<apply executable="java" parallel="false">
<fileset dir="${build.dir}" includes="output.js"/>
<arg line="-jar"/>
<arg path="${yuicompressor.jar}"/>
<arg line="-o ${build.dir}/output-min.js"/>
<srcfile/>
</apply>
</target>

# ant js.compress

  HTTP 压缩
    对于 Apache Web服务器,  
      for apache 1.3 httpd.conf 文件或者是.htaccess 文件添加 mod_gzip_item_include file \.js$
      for apache 2.0 AddOutputFilterByType DEFLATE application/x-javascript

  
    

  

  
        

      
    

    
    
    
    
  

javascript编程的最佳实践推荐的更多相关文章

  1. &lpar;译&rpar; 《Javascript 24条最佳实践》

    (摘录) <Javascript 24条最佳实践> 自己一直偏向于实用主义,不是学院派,不是学究派,只讲究把东西能够很好的做出来,但经过一段时间的开发工作当自己总结出来一些东西时,觉得挺有 ...

  2. 学习现代 JavaScript 编程的最佳教程

    天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...

  3. 【转】超实用的JavaScript技巧及最佳实践

    众所周知,JavaScript是一门非常流行的编程语言,开发者用它不仅可以开发出炫丽的Web程序,还可以用它来开发一些移动应用程序(如PhoneGap或Appcelerator),它还有一些服务端实现 ...

  4. 超实用的JavaScript技巧及最佳实践

    众所周知,JavaScript是一门非常流行的编程语言,开发者用它不仅可以开发出炫丽的Web程序,还可以用它来开发一些移动应用程序(如PhoneGap或Appcelerator),它还有一些服务端实现 ...

  5. 超实用的JavaScript技巧及最佳实践(上)

    在这篇文章中,作者将会向大家分享JavaScript开发的小技巧.最佳实践等非常实用的内容,不管你是前端开发者还是服务端开发者,都应该来看看这些小技巧,它们绝对会让你受益的. 文中所提供的代码片段都已 ...

  6. JavaScript Web 应用最佳实践分析

    [编者按]本文作者为 Mathias Schäfer,旨在回顾在客户端大量使用JavaScript 的最佳 Web应用实践.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 对笔者来说,Jav ...

  7. python高级编程之最佳实践&comma;描述符与属性01

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...

  8. Javascript继承之最佳实践

    尊重原创,转载请注明出处:http://blog.csdn.net/zoutongyuan 什么是继承? 继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和 ...

  9. jQuery编程的最佳实践

    好像是feedly订阅里看到的文章,读完后觉得非常不错,译之备用,多看受益. 加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN ...

随机推荐

  1. weex 小结 --官方扩展组件

    <wxc-tabbar>  页面底部的 tab 标签,通过点击在不同页面之间切换 属性: selected-index {number}:设置默认选中的 tab 索引,默认值为 0(第一个 ...

  2. Js注释

    注释 介绍 作用 合作分享:方便他人阅读,便于分享 沉淀总结:容易忘记代码,自己总结沉淀 形式 1.// 双斜杠 2./**/斜杠星号 常用标签 标签 描述 @module 标明当前文件模块,在这个文 ...

  3. php大力力 &lbrack;044节&rsqb; PHP的POST语句一定要大写!!if&lpar;&excl;empty&lpar;&dollar;&lowbar;POST&lbrack;&&num;39&semi;id&&num;39&semi;&rsqb;&rpar;&rpar; &lbrace;

    早上花了几个小时,寻找错误!!! 不应该这样写 if(!empty($_Post['id'])) { 应该这样写 if(!empty($_POST['id'])) { 万万不能小谢!

  4. java多次替换&lpar;replace不行&rpar;

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static vo ...

  5. 311&period;&Tab;Sparse Matrix Multiplication

    题目: Given two sparse matrices A and B, return the result of AB. You may assume that A's column numbe ...

  6. MVC Razor 一些常用的方法

    一.在ASP.NET MVC中,创建视图最典型的方式是调用一个action方法,它使用模型准备视图数据.action方法然后调用控制器的视图方法创建视图. 1 <% Html.RenderAct ...

  7. java学习笔记11-static关键字

    如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...

  8. Python接口自动化

    1.unittest单元测试框架&接口介绍 2.接口测试框架设计 3.接口的安全机制 4.Mock服务介绍&实现原理 5.Jenkins使用和配置 6 .发送邮箱设置

  9. zepto引用touch模块后,click失效

    近日,有个拼图小活动,引用了zepto,以及zepto的touch模块. 在拼图结束之后,进行抽奖的活动,该抽奖结果是以弹框展示. 这里的关闭按钮需要添加点击事件: $(document.body). ...

  10. Java时间的使用

    JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字 ...