zoukankan      html  css  js  c++  java
  • 代码最简化

    代码最简化

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

    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请求,每写一句代码,都想一想它的必要性,不写无用的变量定义、无用的判断、无用的循环,这样我可以在很大程序的减少这些小问题的发生。我不是在说最短的代码就是好代码但是臭长的代码绝对不是好代码。写代码前务必保证自己的思路是清晰的。不要使用怪异的方法,没有绝对的提高性能,甚至连自己都不清楚其中的奥妙,真的就没有必要这样做了。在易懂的前提下保证代码最优。当性能真的出现问题时再做深度的算法等一系列的优化。

     
     
     
  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3273565.html
Copyright © 2011-2022 走看看