最近辞职了,准备北上。期待有个好结果~
 
本文以《Javascript高级程序设计》为基础,结合自身经验来总结下Javascript实际工作方面的知识。
 
一、可维护性
1、代码约定

1.1: 可读性
这里面主要包括 缩进和注释
缩进:使用统一的缩进(推荐4个空格) 
注释:
在下面情况中,应该包含注释
1、函数和方法都应该包含注释,这里面包括函数的目的和可能使用的算法。如果还包括参数是什么,返回值是什么就更好。
2、对于完成单个任务的大段的代码需要在前面放一个注释来解释代码的作用。
3、如果使用了复杂的算法则需要注释来解释。
4、Hack代码一定要写注释,否则别人会以为是没用的代码,然后删除掉。
 
1.2: 变量和函数命名
首先要避免毫无意义的命名(例如a、x、doSomething这些),这里提供一些推荐的命名方法
1、变量名应该为名词,例如car、person等。
2、函数名以动词开始,如getName();返回boolean的函数一般以is开头,如isPerson();
3、变量名应该使用合乎逻辑的名字,不必担心长度,长度问题可以用压缩来解决。
 
1.3: 变量类型透明
因为在Js里面,变量是松散类型的,很容易忘记变量的类型是什么。
建议初始化的时候给予一个初始值来表明变量类型。
 
 
2、松散耦合
2.1: 结构-表现-行为的分离。
具体来说就是避免在html中写css和js(内联style、事件属性等)。
避免在css中使用表达式。
避免在js中动态创建大量html(使用模板),设置样式(使用增加css类的方法)
 
2.2解耦事件和应用逻辑。
大家通常会在一个事件里面把逻辑全写完,例如
element.onclick = function(){
// do something
// some other code
// some other code
}
这里假设函数里面有大量的逻辑,这么写也是很普遍的写法,但这有两个致命点
1,如果不触发事件,如果执行逻辑?
2,如果另外一个事件也会执行相应的逻辑,那么是不是只能复制一遍里面的代码了。
 
所以,一个更好的方法是把里面的大量逻辑封装到一个方法中。
 
解耦事件和应用逻辑的原则:
1,不要将event对象传递给方法,只传来自event对象的数据。
2,任何可以在应用层面的动作都应该可以在不执行事件的情况下进行。
3,任何事件处理程序都应该处理事件,然后将处理转交给应用逻辑。
 
 
3: 编程实践
3.1: 不要修改自己无法控制的对象。
可以使用下面方法为对象创建新的功能。
1、创建新的对象,为这个对象添加属性和方法。
2、创建自定义类型,继承需要修改的那个类型。在自定义类型上扩展方法。
 
3.2: 避免全局变量。
创建一个全局变量,其余变量都当作这个全局对象的属性或方法。
单一全局变量引申出来便是命名空间的概念。
可以使用一个全局对象,之后所有对象都隶属于它。通常可以用公司名来创建,例如:
var BAIDU = {};
BAIDU.util = {};
BAIDU.util.cookie = {...};//用于处理cookie相关
3.3: 使用常量把数据从业务逻辑中分离出来。
常见的比如 接口的url、表单的错误文字等。
分离之后为后续的修改或者国际化都提供了便捷。
以下几种情况是很需要分离的
1、重复值 - 重复多次的值应该抽取出来,这样后续修改起来方便,也避免了漏改的情况。
2、用户界面字符串 - 为以后国际话做铺垫。
3、URLs - url改变后可以快速修改
4、任何可能会改变的值 - 每次用到字面量的时候,问下自己这个值以后是否会改变,如果会,那么应该提出出来作为一个常量。
 
 
二、性能
1、注意作用域
在一个函数中将多次用到的全局变量保存为局部变量。
2、避免使用with语句
3、访问数组比访问对象快,减少查找对象属性的次数。如果可以用数字位置和命名属性访问,那么用数字。例如:
var img = document.getElementsByTagName("img");
img[0] //使用这种方式访问第一个img
4、避免显示或者隐示的调用eval,比如说直接用eval或者在setTimeout中传入字符串
5、使用原生的方法,比如求一个数的平方,那么用Math对象提供的方法更快。
6、switch比复杂的if-else要快,而且switch按照最可能和最不可能的顺序排列可以进一步优化switch
7、使用单个的var来声明所有变量可以加快速度。
8、var name = values[i]; i++; 可以优化成 var name = values[i++];
9、最大程度减少对DOM的操作。比如要插入很多条列表,可以先在js中拼装好,然后插入一次。使用innerHTML比appendChild要快。
10、使用事件委托。
11、减少对NodeList对象的访问,因为每次访问都会实时查询。这里面可以引申出缓存jquery对象。例如
var images = document.getElementsByTagName("img");
for(var i = 0, len = images.length; i < len ; i++){}
这里使用len保存images.length,就避免了每次判断的时候访问images的length属性。
然后这里使用了images保存document.getElementsByTagName("img");也避免了之后每次的查找。
 
 
三、部署
1、构建过程
开发时把js分成多个文件,以提高维护性。发布时通过构建工具,合并代码。
2、验证
构建工具中可以加入验证工具,如jslint
3、压缩
3.1 文件压缩(减少代码长度)
一般有这些操作,删除空白、删除注释、缩短变量名
3.2 HTTP压缩(减少传送字节数)
一般通过设置web服务器用gzip压缩。所有浏览器都可以解压gizp的。
 
 
 
转载本站文章请注明作者和出处 奇葩一朵朵 – http://www.cnblogs.com/season-huang/ ,请勿用于任何商业用途

Javascript实践技巧的更多相关文章

  1. 一些JavaScript的技巧、秘诀和最佳实践

    文章分享一些JavaScript的技巧.秘诀和最佳实践,除了少数几个外,不管是浏览器的JavaScript引擎,还是服务器端JavaScript解释器,均适用. 本文中的示例代码,通过了在Google ...

  2. JavaScript的技巧45招

    JavaScript奇技淫巧45招 来自仲老师的分享: 原文地址[http://chensd.com/2015-01/45-useful-javascript-tips-tricks-and-best ...

  3. javascript实用技巧、javascript高级技巧

    字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...

  4. 12个非常实用的JavaScript小技巧

    在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是 ...

  5. [转载]DW数据仓库建模与ETL的实践技巧

    一.Data仓库的架构 Data仓库(Data Warehouse DW)是为了便于多维分析和多角度展现而将Data按特定的模式进行存储所建立起来的关系型Datcbase,它的Data基于OLTP源S ...

  6. 数据仓库建模与ETL实践技巧

    数据分析系统的总体架构分为四个部分 —— 源系统.数据仓库.多维数据库.客户端(图一:pic1.bmp) 其中,数据仓库(DW)起到了数据大集中的作用.通过数据抽取,把数据从源系统源源不断地抽取出来, ...

  7. 混合应用中的javascript实践

    混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...

  8. JavaScript调试技巧之console.log()详解

    JavaScript调试技巧之console.log()详解 对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻 ...

  9. javascript小小技巧

    JS的一些小技巧,我主要是做后台的(.NET),前端知识了解得不多,经验非常有限,不过还是经常写JS代码,对前端有着浓厚的兴趣,特喜欢js这门语言,虽然很多人喷它,但还是很喜欢Js.下面说说项目中我经 ...

随机推荐

  1. Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

    执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...

  2. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  3. 04.LoT.UI 前后台通用框架分解系列之——轻巧的弹出框

    LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...

  4. Android 自定义 attr

    好纠结,弄了一个下午老是报错如是总结一下安卓自定视图和自定义属性. (一)自定义属性 在Values文件下建立一个attrs.xml文件,attr的format可以参考:http://www.cnbl ...

  5. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  6. 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?

    注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的.要深刻了解这个管道是如何被构建出来的,我们就必须对WebH ...

  7. 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)

    统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...

  8. 界面设计技法之css布局

    css布局之于页面就如同ECMAScript之于JS一般,细想一番,html就如同语文,css就如同数学,js呢,就是物理,有些扯远,这里就先不展开了. 回到主题,从最开始的css到如今的sass(l ...

  9. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

  10. 体验报告:微信小程序在安卓机和苹果机上的区别

    很多人可能会问:微信小程序和在微信里面浏览一个网页有什么区别? 首先,小程序的运行是全屏的,界面跟进入了一个APP很像,更为沉浸跟在微信里面访问h5不一样:其次,它的浏览体验更为稳定. 不过,这还不够 ...