Javascript 最佳实践

平稳退化:确保网页在没有Javascript 的情况下也能正常工作。
分离Javascript :把网页的结构和内容与Javascript 脚本动作行为分开。
向后兼容性:确保老版本的浏览器不会因为你的Javascript 脚本而死掉。
性能考虑:确定脚本执行的性能最优。 

1.平稳退化

  平稳退化编程属于保守派的编程思想,对于公司而言,公司更喜欢这种开发思想,因为用户至上嘛。假设:一款3D游戏的添加了光晕滤镜特殊处理效果,用户要是没有安装该技术库支持,就不给进入游戏or游戏进入就崩溃吧?怎么可能,这对于公司来说流失了多少用户。

1 //如你想为用户创建一个简洁新窗口,使用window 对象的open() 方法来创建新的浏览器窗口。
2 window.open( url, name, features );
3 //url:打开的网页的URL地址。 name:则是新窗口的名字。 features:新窗口的各种属性,属性间逗号间隔。
4 
5 //这个函数是创建一个宽300像素,高500像素的新窗口“popup”。
6 function popUp(winURL){
7     window.open( winURL,"popup","width = 300,height = 500" );
8 }
9 //下面用如何的方式来调用这条函数?

  "Javascript:"伪协议

  真协议就是用来传输网络数据包,如HTTP协议(http://)、FTP协议(ftp://)等,伪协议只是让我们通过链接来调用Javascript函数。具体用法<a href = "javascript: function();"></a>

<!--我们可以用伪协议调用popup 或者 用onclick 属性来调用。-->
<a href = "javascript: popup('http://baidu.com');">new</a>
<a href = "#" onclick = "popup('http://baidu.com'); return false;">new</a>

  如上这样调用的代码很糟糕,如果用户禁止掉Javascript 脚本 或者 浏览器太老,将无法打开如上链接。“平稳退化”思想就是让我们的代码预留后路,让访问者即使没有Javascript的支持也能将操作进行下去。

1 <!--为这条Javascript 代码预留退路很简单-->
2 <a href = "http://baidu.com" onclick = "popUp('http://baidu.com'); return false;">new</a>
3 <!--作为程序猿,同样的代码能用一次的,绞尽脑汁也不会让它出现第二次。-->
4 <a href = "http://baidu.com" onclick = "popUp(this.getAttribute('href')); return false;">new</a>
5 <!--由DOM提供的this.href,可以再让它精简-->
6 <a href = "http://baidu.com" onclick = "popUp( this.href ); return false;">new</a>

 2.分离Javascript

  随着技术的飞跃发展,更新迭代,技术的分工越来越明确、精细。大项目里不可能一人独揽所有开发,大家都是分工明确的,你做你的UI,我做我的脚本。

  那么如何将上面Javascript 内嵌的事件处理函数分离?

 1 //可以在外部Javascript 文件里把一个事件添加到HTML 文档中的某个元素上
 2 //element.event = action... 如:getElementsById(id).onclick = function()
 3 //分离Javascript 如下
 4 //首先我们要给a 标签加个class ,class = "popup";
 5 window.onload = prepareLinks;
 6 function prepareLinks(){
 7     var links = document.getElementsByTag('a');
 8     for( var i = 0; i < links.length; i++ ){
 9         if( links[ i ].getAttribute("class") == "popup" ){
10             links[ i ].onlick = function{
11                 popUp( this.href );
12                 return false;
13             }
14         }
15     }
16 }

 3.向后兼容

  有时候遇到一些比较老版本的Javascript DOM的js库不是很丰富,出现无法理解DOM 提供的方法和属性。这时候可能你的Javascript 脚本也不一定能运行。不止是在Javascript这方面,这是在开发时也经常出现的问题,当加载某些类库时,有时我们无法判断这个类库是否有没这个封装方法 or 有没开启这个配置项,就像那些做外包小项目的,做好随手一丢,在你的机子上测试没问题,在客户手上就不一定了。

 

 1 window.onload = prepareLinks;
 2 function prepareLinks(){
 3 //当js 库没有这个方法时,则中途离开
 4     if( !document.getElementsByTag ) return false;
 5     var links = document.getElementsByTag('a');
 6     for( var i = 0; i < links.length; i++ ){
 7         if( links[ i ].getAttribute("class") == "popup" ){
 8             links[ i ].onlick = function{
 9                 popUp( this.href );
10                 return false;
11             }
12         }
13     }
14 }

 

4.性能考虑 

  尽量少访问 DOM,尽量减少标签(过多不必要的标签会增加DOM 树的规模,进而增加遍历元素时间)。

 1 //这段代码用了两次方法去执行相同的操作,浪费了一次搜索。
 2 if( document.getElementsByTag("a").length > 0 ){
 3     var links = document.getElementsByTag("a");
 4     for( var i = 0; i < links.length; i++ ){
 5         //对每一个链接对象做处理
 6     }
 7 }
 8 //正确做法
 9 var links = document.getElementsByTag("a");
10 if( links.length > 0 ){
11     for( var i = 0; i < links.length; i++ ){
12         //对每一个链接对象做处理
13     }
14 }

   合并和放置脚本,例如:A.js、B.js、C.js、D.js等导入js文件,不是框架的尽量合并放在一起,减少请求数量通常都是在性能优化时首先要考虑的。页面的初次加载时间也有很大影响,传统我们都把加载项放在<head>区域上,为了让用户得到最佳的阅览体验,可以将较大的js放到</body>之前,可以让页面变的更快。

  压缩代码,是指把代码中不必要的字节,如空格和注释,统统删除,从而达到压缩文件的目地。

posted @ 2018-01-12 10:32  稻草x  阅读(188)  评论(0编辑  收藏  举报