第一大挑戰(zhàn):兼容性
瀏覽器種類非常多,IE、Firefox、Chrome、Opera、還有眾多的IE加殼瀏覽器,類似搜狗、傲游、360,再加上這些瀏覽器的移動終端版本。需要有Web標(biāo)準(zhǔn),前端的知識大部分通用于各個瀏覽器,但還是會有歷史遺留問題,不同版本的瀏覽器有不同的問題。特別是市場占有率最高的IE系,雖然IE 9/10看起來相當(dāng)標(biāo)準(zhǔn),但向之前版本間各有各的問題,向前兼容非常頭疼。如果不積累點經(jīng)驗,面對疑難雜癥那是一頭霧水。
第二大挑戰(zhàn):交互的復(fù)雜度
CSS和DOM提供的接口水平過低,而BOM提供的控件只有input、select、textarea這幾種最基本的,稍復(fù)雜一點的UI效果,都要前端自己利用CSS和DOM去組合創(chuàng)造??吹揭粋€需求,腦子里第一步要想如何利用CSS、DOM這些基本的零件組合成最終的效果,實現(xiàn)最終效果其實是一個“創(chuàng)造”的過程,比如說tabView,treeView,richEditor,colorPicker這種看起來常見的組件,其實在前端里都是沒有現(xiàn)成可用的,需要自己去實現(xiàn)。
前端語言的 膠水性需求 太強。CSS、DOM、JS是三種不同的技術(shù),這也是前端知識系統(tǒng)中要掌握的最重要的三個基本功。前端的效果是通過CSS、DOM、JS三者配合起來最終呈現(xiàn)出來的,脫了任何一個技術(shù)都寸步難行,時刻要同時考慮多個方向的知識點。前端編程像是開了三個線程同時在跑,復(fù)雜度成倍增長。
第三大挑戰(zhàn):代碼可維護性
復(fù)雜度的提升直接影響代碼的維護性。CSS+DOM+JS的組合實在太強大了,同一個效果可以有多種完全不同的實現(xiàn)方式,每一種實現(xiàn)方式都會有不同的開發(fā)難度、擴展性、可維護性。解決方案太多,看到一個效果首先會先想到如何用CSS和DOM里那些low level的接口實現(xiàn),這是一個“創(chuàng)造”的過程,這時腦子里可能冒出好多種不同的實現(xiàn)方法,“創(chuàng)造”完了之后還要“比較”,權(quán)衡各種解決方案的優(yōu)劣,糾結(jié)一陣之后,才能選出最適合的方案。當(dāng)然,并非前端都是完美主義,一定要選一個最好的方式出來,而是因為前端是GUI編程,直接面向用戶,是最直接的產(chǎn)品呈現(xiàn)的部分,是門面。正因為如此,前端也是最容易被反復(fù)修改的部分。反復(fù)“修改”有多可怕,是個程序員都懂的,如果可維護性不好,那簡直是惡夢。所以前端不得不重視可維護性,不重視可維護性直接等于自虐。
第四大挑戰(zhàn):性能
第五大挑戰(zhàn):個人成長
前端的開發(fā),如果沒有總體的設(shè)計思路,會成為一種碎片似地程序,一個效果一堆代碼,一個功能一灘腳本,一個需求片邏輯。曾經(jīng)遇到過,因為ue調(diào)整,把整個前端的代碼除了核心數(shù)據(jù)處理函數(shù)保留,其余的全部修改的情況?;旧锨岸说拈_發(fā),處于DOM操作,數(shù)據(jù)處理,數(shù)據(jù)交互三部分,如果合理的分配這三部分的功能,那么前端的代碼就很容易擴展和調(diào)整。
真正的前端開發(fā)挑戰(zhàn),還在于開發(fā)者的思路。兼容性,布局,CSS和JS都不是問題,問題在于如何合理地組織語言邏輯;如何正確抽象出需求中的模塊;如何用代碼處理,清楚地用代碼表達出思路、寫好注釋,給后續(xù)維護者一個可閱讀的思路。前端的改動量,是后端的數(shù)倍,前端沒有絕對,只有跟隨需求不停的修改。