漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)

一圖勝千言

印象中,漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)這兩個(gè)概念是在 CSS3 出現(xiàn)之后火起來(lái)的。由于低級(jí)瀏覽器不支持 CSS3,但是 CSS3 特效太優(yōu)秀不忍放棄,所以在高級(jí)瀏覽器中使用CSS3,而在低級(jí)瀏覽器只保證最基本的功能。二者的目的都是關(guān)注不同瀏覽器下的不同體驗(yàn),但是它們側(cè)重點(diǎn)不同,所以導(dǎo)致了工作流程上的不同。

名詞解釋

漸進(jìn)增強(qiáng)(Progressive Enhancement):一開始就針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面,完成基本的功能,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互、追加功能達(dá)到更好的體驗(yàn)。

優(yōu)雅降級(jí)(Graceful Degradation):一開始就構(gòu)建站點(diǎn)的完整功能,然后針對(duì)瀏覽器測(cè)試和修復(fù)。比如一開始使用 CSS3 的特性構(gòu)建了一個(gè)應(yīng)用,然后逐步針對(duì)各大瀏覽器進(jìn)行 hack 使其可以在低版本瀏覽器上正常瀏覽。

其實(shí)漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)并非什么新概念,只是舊的概念換了一個(gè)新的說(shuō)法。在傳統(tǒng)軟件開發(fā)中,經(jīng)常會(huì)提到向上兼容向下兼容的概念。漸進(jìn)增強(qiáng)相當(dāng)于向上兼容,而優(yōu)雅降級(jí)相當(dāng)于向下兼容。向下兼容指的是高版本支持低版本的或者說(shuō)后期開發(fā)的版本支持和兼容早期開發(fā)的版本,向上兼容的很少。大多數(shù)軟件都是向下兼容的,比如說(shuō)Office2010能打開Office2007,Office2006,Office2005,Office2003等建的word文件,但是用Office2003就不能打開用Office2007,Office2010等建的word文件!

二者區(qū)別

優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)只是看待同種事物的兩種觀點(diǎn)。優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)都關(guān)注于同一網(wǎng)站在不同設(shè)備里不同瀏覽器下的表現(xiàn)程度。關(guān)鍵的區(qū)別則在于它們各自關(guān)注于何處,以及這種關(guān)注如何影響工作的流程。

優(yōu)雅降級(jí)觀點(diǎn)認(rèn)為應(yīng)該針對(duì)那些最高級(jí)、最完善的瀏覽器來(lái)設(shè)計(jì)網(wǎng)站。而將那些被認(rèn)為“過(guò)時(shí)”或有功能缺失的瀏覽器下的測(cè)試工作安排在開發(fā)周期的最后階段,并把測(cè)試對(duì)象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個(gè)版本。在這種設(shè)計(jì)范例下,舊版的瀏覽器被認(rèn)為僅能提供“簡(jiǎn)陋卻無(wú)妨 (poor, but passable)” 的瀏覽體驗(yàn)。你可以做一些小的調(diào)整來(lái)適應(yīng)某個(gè)特定的瀏覽器。但由于它們并非我們所關(guān)注的焦點(diǎn),因此除了修復(fù)較大的錯(cuò)誤之外,其它的差異將被直接忽略。

漸進(jìn)增強(qiáng)觀點(diǎn)則認(rèn)為應(yīng)關(guān)注于內(nèi)容本身。請(qǐng)注意其中的差別:我甚至連“瀏覽器”三個(gè)字都沒(méi)提。內(nèi)容是我們建立網(wǎng)站的誘因。有的網(wǎng)站展示它,有的則收集它,有的尋求,有的操作,還有的網(wǎng)站甚至?xí)陨系姆N種,但相同點(diǎn)是它們?nèi)忌婕暗絻?nèi)容。這使得漸進(jìn)增強(qiáng)成為一種更為合理的設(shè)計(jì)范例。這也是它立即被 Yahoo! 所采納并用以構(gòu)建其“分級(jí)式瀏覽器支持 (Graded Browser Support)”策略的原因所在。

案例分析

看如下這兩段代碼的書寫順序,表示了我們開發(fā)的著重點(diǎn)。

.transition{/*漸進(jìn)增強(qiáng)寫法*/-webkit-transition: all .5s;-moz-transition: all .5s;-o-transition: all .5s;transition: all .5s;}.transition{/*優(yōu)雅降級(jí)寫法*/transition: all .5s;-o-transition: all .5s;-moz-transition: all .5s;-webkit-transition: all .5s;}

前綴CSS3(-webkit-/ -moz-/ -o-*)和正常CSS3在瀏覽器中的支持情況是這樣的:

很久以前:瀏覽器前綴CSS3和正常CSS3都不支持;

不久之前:瀏覽器只支持前綴CSS3,不支持正常CSS3;

現(xiàn)在:瀏覽器既支持前綴CSS3,又支持正常CSS3;

未來(lái):瀏覽器不支持前綴CSS3,僅支持正常CSS3.

漸進(jìn)增強(qiáng)的寫法,優(yōu)先考慮老版本瀏覽器的可用性,最后才考慮新版本的可用性。在時(shí)期3前綴CSS3和正常CSS3都可用的情況下,正常CSS3會(huì)覆蓋前綴CSS3。優(yōu)雅降級(jí)的寫法,優(yōu)先考慮新版本瀏覽器的可用性,最后才考慮老版本的可用性。在時(shí)期3前綴CSS3和正常CSS3都可用的情況下,前綴CSS3會(huì)覆蓋正常的CSS3。

就CSS3這種例子而言,我更加推崇漸進(jìn)增強(qiáng)的寫法。因?yàn)榍熬YCSS3的某些屬性在瀏覽器中的實(shí)現(xiàn)效果有可能與正常的CSS3實(shí)現(xiàn)效果不太一樣,所以最終還是得以正常CSS3為準(zhǔn)。如果你好奇究竟是什么屬性在前綴CSS3和正常CSS3中顯式效果不一樣,可以看看這篇文章《需警惕CSS3屬性的書寫順序》。

如何抉擇

如果軟件開發(fā)的預(yù)算和時(shí)間充足,就不存在抉擇的問(wèn)題。然而現(xiàn)實(shí)很殘酷,要么開發(fā)周期短,要么開發(fā)預(yù)算少,或者二者兼而有之,這個(gè)時(shí)候該如何抉擇?就我個(gè)人而言,講講我的觀點(diǎn)。

根據(jù)你的用戶所使用的客戶端的版本來(lái)做決定。請(qǐng)注意我的措辭,我沒(méi)有用瀏覽器,而是用客戶端。因?yàn)闈u進(jìn)增強(qiáng)和優(yōu)雅降級(jí)的概念本質(zhì)上是軟件開發(fā)過(guò)程中低版本軟件與高版本軟件面對(duì)新功能的兼容抉擇問(wèn)題。服務(wù)端程序很少存在這種問(wèn)題,因?yàn)殚_發(fā)者可以控制服務(wù)端運(yùn)行程序的版本,就無(wú)所謂漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)的問(wèn)題。但是客戶端程序則不是開發(fā)者所能控制的(你總不能強(qiáng)制用戶去升級(jí)它們的瀏覽器吧)。我們所謂的客戶端,可以指瀏覽器,移動(dòng)終端設(shè)備(如:手機(jī),平板電腦,智能手表等)以及它們對(duì)應(yīng)的應(yīng)用程序(瀏覽器對(duì)應(yīng)的是網(wǎng)站,移動(dòng)終端設(shè)備對(duì)應(yīng)的是相應(yīng)的APP)。

現(xiàn)在有很成熟的技術(shù),能夠讓你分析使用你客戶端程序的版本比例。如果低版本用戶居多,當(dāng)然優(yōu)先采用漸進(jìn)增強(qiáng)的開發(fā)流程;如果高版本用戶居多,為了提高大多數(shù)用戶的使用體驗(yàn),那當(dāng)然優(yōu)先采用優(yōu)雅降級(jí)的開發(fā)流程。

然而事實(shí)情況是怎么樣的呢?絕大多數(shù)的大公司都是采用漸進(jìn)增強(qiáng)的方式,因?yàn)闃I(yè)務(wù)優(yōu)先,提升用戶體驗(yàn)永遠(yuǎn)不會(huì)排在最前面。例如:新浪微博網(wǎng)站前端的更新,擁有這種億級(jí)用戶的網(wǎng)站,絕對(duì)不可能追求某個(gè)特效而不考慮低版本用戶可不可用,一定是確保低版本到高版本的可訪問(wèn)性,再去漸進(jìn)增強(qiáng),采用新功能給高版本用戶提供更好的用戶體驗(yàn)。但也不是沒(méi)有反例。如果你開發(fā)的是一款面向青少年的軟件(或網(wǎng)站),你知道這個(gè)群體的人總是喜歡嘗試新事物,總是喜歡酷炫的特效,總是喜歡把它們的軟件更新到最新版本(而不像我們老一輩的用戶)。面對(duì)這種情況,漸進(jìn)增強(qiáng)的開發(fā)流程實(shí)為上選。

軟件開發(fā)中,從來(lái)就沒(méi)有銀彈。具體的抉擇,請(qǐng)讀者視情況而定。

作者:康斌

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容