天天看點

《重構HTML:改善Web應用的設計(修訂版)》——第2章 工具 2.1 備份、測試用機和源碼控制

本節書摘來自異步社群《重構html:改善web應用的設計(修訂版)》一書中的第2章,第2.1節,作者: 【美】elliotte rusty harold 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

自動化工具是重構的重要組成部分。盡管可以使用文本編輯器手動執行重構,甚至有時出于示範的目的我也使用這種方式,但實際上絕大多數的時候我們都使用軟體來輔助工作。據我所知,到本書寫作時為止,還沒有可用于html的主流的重構浏覽器(refactoring browser)。但已經有很多工具可用在重構的過程中。本章會講解一些工具。

自始至終,我都會在本書中向你展示一些非常強大的工具和技術。偉大的教育家stan lee告訴我們:“能力越大,責任越大。”①使用這些技術必須對結果負責,不要讓破壞變得不可彌補。我給你展示的工具中有些可能會“行為不端”,有些被弄糊塗時還有會出現邊際效應。品質不良的html實在太多了,是以這裡讨論的工具做不到面面俱到。是以,重構html至少需要5個步驟。

(1) 确定問題。

(2) 修複問題。

(3) 檢驗已修複的問題。

(4) 確定沒有引入新問題。

(5) 部署解決方案。

錯誤在所難免,是以不要在任何一個線上的網站上使用這些技術。在做任何改動之前,先準備好一份網站的本地副本。完成本地副本的修改之後,仔細檢查所有頁面才進行部署。

現在許多大型網站都已經使用測試用機(staging server)或開發用機,在公開釋出之前可以部署和檢查内容。如果隻是個人靜态的小網站,直接複制一份到本地硬碟上進行修改就可以了。但無論如何都隻在副本中工作,并在部署之前檢查所有的變化。如何檢查變化則是下一節要講述的内容。

當然,就算是經過了最仔細的檢查,還是難以避免一些錯誤,而這些錯誤由最終使用者首先發現。有時網站在測試用機上運作得很好,但到了生産機中就有可能因為未知的配置差別,而碰到各種不可思議的問題。是以,對生産環境的網站進行整體備份,以便新部署的網站不能按預期運作時進行恢複,這是一個非常不錯的做法。定期、可靠、經過測試的備份是不可或缺的。

最後,你應該非常謹慎地把包括html、css和圖檔的代碼存儲在源碼控制系統中。程式員使用源碼控制系統有數十年了,但web開發者和設計者對它還相對陌生,現在是改變的時候了。網站越複雜,那些微乎其微的問題就越有可能被忽略。在重構時,能夠恢複到前一個甚至是數月乃至數年之前的版本是非常關鍵的,這樣才能找到是哪次改變引入了錯誤。源碼控制同時提供以時間為辨別的備份,是以可以還原到指定時間點的狀态。

在web開發中,我強烈推薦使用subversion,很大程度上是因為它非常好地支援目錄間檔案的移動,并且對unicode的出衆支援和對二進制檔案的得體支援也非常有幫助。大部分的源碼控制系統在預設情況下都為程式員配置妥當,不用去關心檔案在目錄間的移動。但是web開發者頻繁地改變網站結構(實際上過于頻繁了),是以系統必須能夠追蹤檔案移動的曆史。如果上級已經幫你配置了如cvs、visual sourcesafe、clearcase或者perforce等其他源碼控制系統,你大可随遇而安。但從長遠看來,subversion可能會做得更好,并且可以減少問題的引發。

如何管理subversion這個主題可以寫一本書,而實際上也已經有很多這樣的書了(我喜歡的是mike mason著的pragmatic version control using subversion[the pragmatic bookshelf,2006])。很多大型網站專門雇傭負責管理源碼控制倉庫的人。但先别擔心,畢竟配置subversion或其他源碼控制倉庫的難度,并不會超過配置apache或其他web伺服器。隻需閱讀少量文檔,修改某些配置檔案,或者求助于新聞討論區,或者通過google搜尋就可以解決難題。這都是切實可行的,而且這些時間值得付出。

如果有必要,你可以使用指令行在subversion中送出或擷取檔案。但如果能使用如bbedit這種内置支援subversion的編輯器,事情會變得更簡單。如dreamweaver這種本身不支援subversion的編輯器也有插件支援subversion。此外,像tortoisesvn和scplugin這種有界面的産品,可以在windows系統上的資料總管或是mac系統上的finder上直接內建subversion。

一些cms(内容管理系統)也有内置的版本控制。如果你使用的cms正好有版本控制,或許就沒有使用外部倉庫的必要了。比如,mediawiki把所有頁面的所有修改都存儲起來,這樣就可以檢視指定頁面在任何時間任何位置的狀況,而且還能夠還原。這是維基百科所安裝的mediawiki子產品中很重要的一個,因為修改是一個很現實的問題。不過即便是不對外開放編輯權限的私有網站,也能在儲存的完整的曆史記錄中得到好處。wiki是web中使用版本控制最普遍的一種,其他一些(如siteline等)cms也提供這樣的功能。