一映九、背景介紹
在前端開發(fā)過程中,如果有注意的話瞎颗,發(fā)現(xiàn)有些寫css3屬性時件甥,兼容性的寫法順序不太一樣捌议。比如transform屬性,有些把transform放在前面有些是放在后面引有,這就引出了兩個概念:優(yōu)雅降級和漸進(jìn)增強(qiáng)瓣颅。
漸進(jìn)增強(qiáng)和優(yōu)雅降級這兩個概念是在css3出現(xiàn)之后火起來的。由于低級瀏覽器不支持css3譬正,但是也不能因噎廢食而放棄css3宫补。所以就產(chǎn)生了一種解決方式,即在高級瀏覽器中使用css3曾我,而在低級瀏覽器只保持最基本的功能粉怕,這樣就能皆大歡喜了。
二抒巢、知識剖析
1贫贝、什么是漸進(jìn)增強(qiáng)?
就是一開始就針對低版本的瀏覽器構(gòu)建頁面蛉谜,完成最基本的功能稚晚,然后再針對高級瀏覽器進(jìn)行效果,交互悦陋,追加各種功能以達(dá)到更好用戶體驗蜈彼。其實也就相當(dāng)于向上兼容。
2俺驶、什么是優(yōu)雅降級幸逆?
一開始就構(gòu)建站點(diǎn)的完整功能,然后針對瀏覽器測試和修復(fù)暮现。比如一開始使用 CSS3 的特性構(gòu)建了一個應(yīng)用还绘,然后逐步針對各大瀏覽器進(jìn)行 hack 使其可以在低版本瀏覽器上正常瀏覽。也就相當(dāng)于向下兼容栖袋。
三拍顷、常見問題
優(yōu)雅降級(Graceful Degradation)和漸進(jìn)增強(qiáng)(Progressive Enhancement)有什么區(qū)別?
四塘幅、解決方案
優(yōu)雅降級
優(yōu)雅降級觀點(diǎn)認(rèn)為應(yīng)該針對那些最高級昔案、最完善的瀏覽器來設(shè)計網(wǎng)站。而將那些被認(rèn)為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發(fā)周期的最后階段电媳,并把測試對象限定為主流瀏覽器踏揣。在這種設(shè)計范例下,舊版的瀏覽器本認(rèn)為僅能提供“簡陋卻無妨”的瀏覽體驗匾乓。你可以做一些小的調(diào)整來適應(yīng)某個特定的瀏覽器捞稿。但由于它們并非我們關(guān)注的焦點(diǎn),因此除了修復(fù)較大的錯誤之外了,其它的差異將被直接忽略娱局。這就有一種“誰讓你們那么差彰亥,作為吊車尾還不趕快自己努力趕上來”的意味在里面。
漸進(jìn)增強(qiáng)
漸進(jìn)增強(qiáng)觀點(diǎn)認(rèn)為應(yīng)該關(guān)注內(nèi)容本身衰齐。內(nèi)容是我們建立網(wǎng)站的誘因任斋。有的網(wǎng)站展示它,有的則收集它耻涛,有的尋求仁卷,有的操作,還有的網(wǎng)站甚至?xí)陨系姆N種犬第,但相同點(diǎn)是它們都涉及到內(nèi)容。這使得漸進(jìn)增強(qiáng)成為一種更為合理的設(shè)計范例芒帕。這就有一種“一個也不能落下”的人道主義精神在里面了歉嗓。雖然你版本低,但是也不能放棄你背蟆。
五鉴分、編碼實戰(zhàn)
這兩個概念看起來其實差別也沒那么大,似乎也就是順序不同而已带膀。但是有時候志珍,順序不同值朋,相同屬性產(chǎn)生的作用是不同的唤冈。比如border-radius屬性和-webkit-border-radius屬性,當(dāng)屬性值超過一個參數(shù)值的時候靠娱,兩個屬性產(chǎn)生的作用是不同的嗽元×哺伲看代碼。
六剂癌、擴(kuò)展思考
漸進(jìn)增強(qiáng)和優(yōu)雅降級如何抉擇淤翔?
如果軟件開發(fā)的預(yù)算和時間充足,就不存在抉擇的問題佩谷,可以兩者都調(diào)整到一個最佳狀態(tài)旁壮。然而現(xiàn)實中實際上要么開發(fā)周期短,要么開發(fā)預(yù)算少谐檀,或者二者兼而有之抡谐,那么如何抉擇?
1稚补、如果低版本用戶居多童叠,當(dāng)然優(yōu)先采用漸進(jìn)增強(qiáng)的開發(fā)流程。
2、如果高版本用戶居多厦坛,為了提高大多數(shù)用戶的使用體驗五垮,當(dāng)然優(yōu)先采用優(yōu)雅降級的開發(fā)流程。
然而事實情況是怎么樣的呢杜秸?絕大多數(shù)的大公司都是采用漸進(jìn)增強(qiáng)的方式放仗,因為業(yè)務(wù)優(yōu)先,提升用戶體驗永遠(yuǎn)不會排在最前面撬碟。例如:新浪微博網(wǎng)站前端的更新诞挨,擁有這種億級用戶的網(wǎng)站,絕對不可能追求某個特效而不考慮低版本用戶可不可用呢蛤,一定是確保低版本到高版本的可訪問性惶傻,再去漸進(jìn)增強(qiáng),采用新功能給高版本用戶提供更好的用戶體驗其障。
但也不是沒有反例银室。如果你開發(fā)的是一款面向青少年的軟件(或網(wǎng)站),你知道這個群體的人總是喜歡嘗試新事物励翼,總是喜歡酷炫的特效蜈敢,總是喜歡把它們的軟件更新到最新版本(而不像我們老一輩的用戶)。面對這種情況汽抚,優(yōu)雅降級的開發(fā)流程是“墜吼的”抓狭。
七、更多討論
對于漸進(jìn)增強(qiáng)和優(yōu)雅降級你的看法是什么造烁?
我們在學(xué)習(xí)工作中寫代碼時用的是哪種方式否过?
如果要建立個人網(wǎng)站,你會用哪種方式膨蛮?
八叠纹、參考文獻(xiàn)
參考二:漸進(jìn)增強(qiáng)和優(yōu)雅降級之間的區(qū)別在哪里?