但凡從事互聯網的人基本都會寫幾行html,用過Word的人用Dreamweaver也能做出規整的頁面,所以大部分人會很自然地認為“頁面的開發沒什麼技術含量,很簡單”。不僅有這種普遍的認知,對從業者來說也有很多疑惑:做頁面前端實現,沒問題;兼容性,小case;圖片集成,一直都在用…… 還能有什麼問題?瓶頸啊、天花板啊、轉型啊、出路啊就在從業者中廣泛討論。是不是真的沒什麼問題了呢?網易郵箱前端技術中心也設立好幾年了,似乎有著討論不完的話題,也經常會有一些新的想法讓大家為之一振。那麼頁面開發還有哪些要求,還要做些什麼,這裡面的水有多深,讓我們舀舀看。
在不同的時期對頁面前端的看法似乎是多變的。在互聯網早期的時候,小車還是比房子貴的,燒餅和粉絲還只是用來吃的,菊花還只是用來泡茶的。那時的頁面設計風格相對單一,對應的頁面需求比較簡單,並且當時的浏覽器也基本是IE6的天下,javascript也只是網頁特效的代名詞,HTML頁面本身沒有引起太多人的關注,似乎只要能用div甚至table加css輔助把圖片定好位,把頁面內容預留好就OK了,並且這種觀念存在了很長一段時間。隨著頁面內容的豐富,設計風格的發展,交互復雜性的增加,AJAX的應用,浏覽器的更新換代,又讓大家重新對最基本的頁面本身重視起來。然後熱議的就是浏覽器的兼容性,碰到問題最熱衷的就是滿網絡搜索hack,順便再罵罵IE6、7……當這些都做一遍後,似乎又遇到了瓶頸,又開始尋找出路。我們就從這個階段開始說起。
實現效果圖是最基本的工作
把視覺稿通過頁面代碼的方式表現出來包含了兩個基本訴求:1.能夠真實反映視覺稿;2.能夠通過浏覽器的兼容。這兩個訴求的達成需要我們有追求細節的態度和一定的頁面功底,能完成這兩個內容就可以初步進入頁面前端的從業者行列了,但這就代表著我們可以勝任頁面開發的工作了?不,才剛剛開始!
與設計師的溝通和項目的參與
溝通很重要。先拋出幾個問題:我們有沒有和設計師探討過某些效果對低端浏覽器渲染效率影響比較大?有沒有探討過部分效果可以用CSS3實現從而使得結構更加簡潔清晰?有沒有在代碼和視覺中尋追求過平衡?頁面前端的開發向基本用戶,編寫的代碼也直接作用在浏覽器上,我們有義務對頁面的穩定性和渲染效率負責。我們也經常碰到項目在總體進度壓力下導致的設計與頁面前端開發同步進行,這時更有必要盡量多地獲取項目信息,了解我們還要做些什麼,這些可以幫助我們充分考慮重用和框架拓展。
良好的頁面結構
頁面結構的編寫好比蓋房的地基建設,其好壞會直接影響到CSS代碼的質量、js開發、後台開發還會影響到以後的頁面拓展、迭代和頁面調整。拿到視覺稿後,不要忙著動手開始,多觀察思考。先分析布局,劃分框架,然後規劃結構,編寫代碼。特別在大型項目中,合理使用模塊化的開發不論從整體進行還是拓展維護都有相當大的好處。
關於hack
很多同學在頁面開發時上網搜索最多的就是hack了,是否我們完全要依賴hack來實現頁面兼容性,答案是否定的。大家經常比喻IE6向我們撒了一個謊,結果我們要再撒一百個謊來圓這個謊。不否認IE6經常讓我們口吐鮮血,但不代表我們用更多的“謊言”來彌補就可以心安理得。大部分情況下可以通過變換思路調整HTML結構,或使用一些雖然無法解釋但相對安全的css來干掉hack。誰都無法預計使用hack什麼時候會讓我們栽一個大跟頭。比如觸發 layout或position:relative就可以幫助解決很多IE6的問題。
優美的代碼
現在很多web項目功能復雜,代碼規模也會變得很龐大,如何更好地進行協同開發和維護是我們面臨的一個問題。需要考慮完善統一的規劃,還有要養成良好的代碼開發習慣才會在面臨各種情況時游刃有余。翻閱頁面代碼,看到合理的標簽使用、良好的注釋、清晰的代碼結構、用意准確的css不僅猶如欣賞一個藝術品,更為下游開發和協同開發降低了不小的溝通成本,我們有什麼理由不去這麼做呢?舉個反面例子:div濫用是現在比較典型的一個問題。數數看自己使用的標簽有多少個呢?不同的語義都該使用對應的標簽代碼,特別是HTML5提供了更豐富的語義化標簽,它們都苦苦地在等待戰場上的沖鋒號,讓我們去解放它們吧!
無障礙頁面開發
可訪問性與易用性是非常主觀且人性化的東西。普通人看上去上完美呈現的頁面在特殊群體中不一定顯得那麼貼心。當盲人用讀屏軟件在頁面某個區域內陷入循環時,我們應該感到內疚。只能說目前國內的網站對此的重視程度還遠遠不夠,這就需要我們共同努力,讓更多的人感受到我們的熱情。
保障效率
作為項目開發中比較靠前的一環,頁面開發可能需要盡早完成為項目爭取時間,這就需要我們盡可能地提高效率。“工欲善其事,必先利其器”,除了實戰經驗和代碼習慣的形成可以幫助我們提高效率外,想要提高對自己開發的進度掌控能力,還有很多輔助工具可以幫助我們進行頁面開發。比如使用Less或Sass 可以幫助我們拓展和組織CSS,大大提高CSS的編寫效率增加了可維護性。比如可以通過zen coding的自動自動完成和自定義代碼塊讓你可以劍指如飛。甚至還見過通過自定義輸入法的代碼塊關鍵字來提升開發速度的。多多發掘一定會找到最合適自己使用的工具。
針對服務器的優化
頁面開發也需要了解服務器的優化,盡量減小服務器負擔。比如css sprite就是一個典型減小服務器請求數的例子。在網易郵箱的頁面前端開發中大家不停地在做著各種優化,比如一直在尋求文件大小與服務器請求數的平衡;為了盡可能提高緩存利用率采用了補丁升級;對class名進行了混淆壓縮避免命名過長的冗余;應用base64減少請求數量等等措施。這些都是綜合權衡的結果,需要考慮各個方面整體優化。因為當頁面訪問量達到一定的數量級時,再小的一點優化都會達到可觀的效果,再小的問題都可能會形成巨大的災難。
擁抱HTML5
這是一個充滿機會的時代,HTML5時代的來臨伴隨著移動互聯網的興起創造了更大的機會,還有太多的東西值得我們去學習去發現。 HTML5提供了豐富的JS API接口,需要我們去研究;CSS3的絢麗吸引了足夠多的眼球,需要我們去研究;移動設備上如何開發更加適配的頁面,需要我們去研究……
Stay Hungry, Stay Foolish
水是越舀越多了,卻發現原來下面還深不見底,上面的內容越是深入研究就越會發現更多山川需要翻越。保持饑餓狀態,用眼睛去努力發現發掘,不斷豐富技能才能找到定位,突破瓶頸,正所謂“唯有高屋建瓴方可水到渠成”。形成本文是因為之前和同行討論到瓶頸的問題,想給自己,給頁面前端的同學一起找找定位,梳理一下思路。拿蘋果CEO在斯坦福演講的一句話“Stay Hungry, Stay Foolish”和大家共勉。
By Lemon
文:網易郵箱前端技術中心