代码最简化

在重构的过程中,站在我个人的角度,针对代码开发的细节,说一说关于代码最简化的小经验。

1、    同一个页面上js/css可能被你引入多次?

Ajax已被大家广泛应用,常常用来加载一些html的片段。Html片段可能有js的处理,这个时候可能在html片段中写一些js操作或者引入一些js文件,你可有检查,当前页面是否已经加载了该js。如果同一个页面没有被重新加载,不管以前在页面中有的,还是后来html片段中加载的,都会在当前页面生效。而不是片段中的js作用域只是这个片段。所以js不要重复引入,重复引入很有可能充掉你的全局变量,覆盖原来的同名js方法,也可能造成死循环等等问题。例如jquery文件,如果被多次引用就可能造成js死循环,很多原生的jquery方法不好用。

针对这些问题,我们并不是要完全避免在ajax加载的html片段中不写js。而是根据实际情况做合理的安排。第一,千万不要重复加当前页面的js;第二,如果ajax加载的片段只会被当前页面加载一次,并且你写的js只是为当前片段服务,那你可以只在片段中引入;第三,当页面中的js超过20行或者会被多个页面使用的js,建议提取到单独的js文件中;第四,如果js方法是全局的,命名又很大众化像search(), find(),你可要小心了,很可能被别人的js覆盖,你也可能覆盖别人的,怎么办?那就了解一下js面向对象编程吧。建议改成Student.search(),Student.find()等等

2、    为什么a元素也要写一个onclick,然而它只是一个简单的跳转?

这样写累吗?一个简单的跳转操作,标签本身的功能不能遗忘。用什么标签就应该让它做什么样的事。每当我翻阅这样的代码的时候,都是从链接处着手,然后顺着onclick事件,找到onclick对应的方法,然后再看做了什么操作。你会发现最后一行是“location.href=’xxxx/xxx.do?a=” + a + ....”。不觉得有点坑爹吗?我真不知道这种写法的好处。首先这样拼接url如果没有对参数做encodeURIComponent很可能造成参数丢失;再者让人找的好费神。如果直接写在a标签上href上是不是很清晰呢。如果要在新窗口打开加上“target=”_blank””就够了。

3、    url上为什么是一堆参数?去掉无用的参数吧

可能你会说,我为了下个页面少做查询,我就多传了一些参数。但是这样真的带了好处吗?

暂不说传中文可能乱码的问题,其实这样严重增加了以后维护的难度。明知道下个页面只需要某个参数就够了,然而还是要考察每个参数都是要干嘛用的。思前想后,明明只需要考虑一个参数的问题,一下子变成了考虑四五个参数,工作量翻了几翻。可曾有感触呢?如果下个页面只是一个通过id的查询就不要再附加的各种冗余的信息了。除非我们要的内容在当前页面已经有了,而下个页面自己获取真的很影响性能,我们才真的有必要这么做。

4、    为什么要加那么多id在html的元素上?为什么还有重复的?

我想大家都清楚在js里查询某个dom元素使用id是最快的,但是id真的不要用泛滥了。满页都是id,甚至有重复的。这个真的不是好习惯。当维护的人员想添加一个真正有必要用的id时,发现你已经使用了,换用别的名字又感觉不合适,那些无用的还不敢删除,得费死维护人员多少脑细胞。不要庆幸以后修改的人不是我们自己。做为一个有责任的开发人员,我们就要对自己写的代码负责。

5、    无用的sql查询,无用的java方法,无用的http请求,这是要闹哪样?服务器会消化不良的。

一般出现这样的问题是因为修改代码的人添加了新的代码,而没有检查以前的代码是否有用造成。曾记得以前浙师项目就有一个无用的ajax请求,页面一加载就请求一个公告全表的json数据,有几M那么大,而且没有一点用处。可想而知,得有多么影响性能。要想减少这样的问题发生,就要我们更认真更细心,修改代码的时候,务必思前想后,去除干净无用的代码。时常检查http请求是否都是你意料之中的请求。

6、    不要继承不该继承的类,也不要实现没有必要实现的接口,而是当需要的时候才这么做,或者你预知到了什么。除非真的有必要这么做。

7、    不得不说的方法命名。

在java的代码中不要轻易使用get和set开头的方法。除非觉得这个方法是当前类的一个属性。一个好的命名方法胜过那堆臭长的注释。别误解,我可不喜欢开发者不写注释,注释该写还是要写的。写注释给人一种安全感,你不觉得吗?

8、    避免长代码文件。

Jsp,js,java都要避免代码太长。对于jsp文件可以使用include进行拆分,如果是tab页每个tab的内容还很多,建议做成两个jsp页,切换时直接是两个请求。处理问题也就变简单了。对于js的拆分,直接在合适的位置分成多个文件即可,如果是面向对象的js代码,可以考虑使用继承,直接追加属性等方法解决。Java可以添加辅助的工具类,或者辅助的子类等方法解决。

9、    通用模块设计的时候,应该注意的小问题。

有些通用模块,让调用者用的好辛苦,。通用模块的代码,要合理的设计入口参数。根据调用方的需求合理设计入口参数,不传多余无用的参数。要尽可能的让调用者做的更少,除了少传参数,你还可以让用户不写html片段,js初始化操作等等。还有就是考虑代码是否会和别人的代码冲突,像html中的id,js代码(命名要特别注意,最好使用面向对象的方法开法这样的模块),样式表等等。

 

 

总结:

这些都是小问题,或许你不觉得什么,但是放在一起就真的不是小问题了。多一个id,多一个参数,多一个无用查询,多一个无用的请求都会严重的增加以后维护人员的工作。我们不能完全避免这些小问题,但是只要我们每写一个方法,每写一个sql,每写一个ajax请求,每写一句代码,都想一想它的必要性,不写无用的变量定义、无用的判断、无用的循环,这样我可以在很大程序的减少这些小问题的发生。我不是在说最短的代码就是好代码但是臭长的代码绝对不是好代码。写代码前务必保证自己的思路是清晰的。不要使用怪异的方法,没有绝对的提高性能,甚至连自己都不清楚其中的奥妙,真的就没有必要这样做了。在易懂的前提下保证代码最优。当性能真的出现问题时再做深度的算法等一系列的优化。

 

本文为作者原创,转载请注明出处,与你分享我的快乐
http://www.cnblogs.com/weirhp

 

posted @ 2013-08-21 17:09  与您分享我的快乐 ---笨笨  阅读(1356)  评论(9编辑  收藏  举报