代碼最簡化


在重構的過程中,站在我個人的角度,針對代碼開發的細節,說一說關於代碼最簡化的小經驗。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM