Web標(biāo)準(zhǔn)前途是否依賴瀏覽器技術(shù)

原文:http://www.alistapart.com/articles/fromswitchestotargets
作者:Eric Meyer
當(dāng)我讀了一遍Aaron Gustafson的Beyond DOCTYPE: Web Standards, Forward Compatibility, and IE8 后,我心里的第一反應(yīng)就是深深的否定這種觀點(diǎn). Aaron描述的version-targeting機(jī)制是完全錯(cuò)誤的, 是完全倒退的, 是和我們應(yīng)該做的事情完全相反的. 在web開發(fā)領(lǐng)域十多年的我的每條神經(jīng)都在反對(duì).
為什么我會(huì)如此的抗拒? 部分原因是目標(biāo)轉(zhuǎn)換器像是"瀏覽器嗅探"技術(shù)的復(fù)仇. 真的, 在眾多瀏覽器正確的支持標(biāo)準(zhǔn)前, 嗅探器是應(yīng)付它們之間不兼容情況的必需的方法, 但是到最后它都沒(méi)有起到作用. 在你上傳你的腳本之后沒(méi)多久, 一個(gè)瀏覽器的新版本就出現(xiàn)了, 并且又破壞了它. 瀏覽器嗅探技術(shù)脆弱的,弄巧成拙的本性是將標(biāo)準(zhǔn)帶給我們的瀏覽器的理想背后的反抗力量. 如果從瀏覽器的代碼層把它合法化, 那他又將成為一種破壞標(biāo)準(zhǔn)之路的力量了.
首先, 我為目標(biāo)轉(zhuǎn)換器感到煩擾, 因?yàn)樗@樣做和向前兼容的發(fā)展背道而馳. 這曾經(jīng)是我們的行業(yè)多年來(lái)的最優(yōu)方法, 是在瀏覽器戰(zhàn)爭(zhēng)中艱難的發(fā)現(xiàn)的生存方式. 我們著眼于未來(lái)的開發(fā), 大部分使用普及的穩(wěn)定的功能來(lái)實(shí)現(xiàn), 然后使用一些不影響我們網(wǎng)站正常使用的 "尖端技術(shù)" - 這逐漸就成為了 "逐步加強(qiáng)". 這種方法的一個(gè)例子是在"Go To Print"中描述過(guò)的技術(shù), 這種技術(shù)可以讓進(jìn)步的瀏覽器在需要打印的頁(yè)面上顯示出鏈接的URL,但是又不會(huì)破壞不具備這項(xiàng)功能的瀏覽器的打印的效果.
對(duì)于目標(biāo)轉(zhuǎn)換器而言,什么為未來(lái)作出規(guī)劃, 什么前瞻性, 都幾乎被摧毀殆盡了. 瀏覽器會(huì)承諾總是向后兼容. 對(duì)于瀏覽器來(lái)說(shuō)目標(biāo)轉(zhuǎn)換器就像是個(gè)時(shí)間機(jī)器, 它的想法是當(dāng)用IE 10來(lái)裝載IE 7的頁(yè)面時(shí), IE 10要讓自己像IE 7一樣的工作, 不管在這些年里發(fā)生過(guò)什么.
從而, 作為一個(gè)開發(fā)者, 沒(méi)有必要追求超現(xiàn)實(shí)狀態(tài)的瀏覽器. 我甚至可以假設(shè), 瀏覽器們始終會(huì)支持我做的東西, 甚至是那些目光短淺的, 特定瀏覽器的, 無(wú)論如何都需要標(biāo)準(zhǔn)的. 至于瀏覽器預(yù)期將支持的方向: CSS或者JavaScript又或是HTML5...誰(shuí)又在意呢? 現(xiàn)實(shí)調(diào)查
那么, 誰(shuí)在意呢? A List Apart 的讀者們, 的確, 以及我們中的大部分. 但是在調(diào)查分析后顯示, 大多數(shù)的網(wǎng)頁(yè)內(nèi)容都沒(méi)有很重視基于標(biāo)準(zhǔn),向前兼容的原則.
是的, 我們已經(jīng)取得了長(zhǎng)足的發(fā)展. 對(duì)開發(fā)者進(jìn)行的教育也結(jié)出了一些果實(shí). 盡管如此, 我們必須正確的對(duì)待這些. 我們沒(méi)有(標(biāo)準(zhǔn))到達(dá)所有的人, 或許永遠(yuǎn)都不會(huì). 一些網(wǎng)站是根據(jù)當(dāng)前瀏覽器能做什么進(jìn)行開發(fā)的, 而從不管對(duì)照規(guī)范是否錯(cuò)誤, 或者其他瀏覽器中的行為是否正確.
這讓瀏覽器廠商在面對(duì)他們的缺陷時(shí)處于一個(gè)進(jìn)退兩難的境地: 修正它或是保留它? 最經(jīng)典的一個(gè)例子是 "Internet Explorer的原始width和height" , 這是對(duì)CSS規(guī)范的錯(cuò)誤執(zhí)行. IE 團(tuán)隊(duì)在發(fā)布IE 3后不久就意識(shí)到這個(gè)問(wèn)題了...但是一直到了IE 6才真正修復(fù), 這樣的延誤減慢了CSS的應(yīng)用, 并引發(fā)了所有的JavaScript嗅探和CSS Hacks.
Doctype的轉(zhuǎn)換確實(shí)拯救了它們, 允許IE 6在"quirks mode"保留舊的(錯(cuò)誤的)行為, 在"standards mode"下進(jìn)行正確的解析 - Mac版本的IE5引進(jìn)的一個(gè)機(jī)制, 也很快被其他瀏覽器采用了.
讓我們想一想, 通過(guò)Doctype的轉(zhuǎn)換, 瀏覽器有效的認(rèn)可了兩種狀態(tài): 老的和正確的. 這是在Doctype轉(zhuǎn)換出現(xiàn)之前的日子里的一種最新的,最偉大的方法.
#p# 加快發(fā)展
我們已經(jīng)有了一個(gè)版本目標(biāo)的例子(Doctype轉(zhuǎn)換). 當(dāng)我用這種方法實(shí)現(xiàn)了, 我卻陷入了混亂. 畢竟, 我是Doctype轉(zhuǎn)換的推行者, 并且現(xiàn)在還在依賴它進(jìn)行工作. 我應(yīng)該憎恨這整個(gè)想法嗎, 或者不?
就像在2000年的Doctype轉(zhuǎn)換, 版本目標(biāo)否定廠商的說(shuō)法,怕破壞了現(xiàn)有的網(wǎng)站,現(xiàn)有的行為是不能改變的. 如果IE 8能夠修正它對(duì)一些CSS屬性或DOM方法的實(shí)現(xiàn)的話, 那在IE 9中的錯(cuò)誤我們就可以在站點(diǎn)不被破壞的基礎(chǔ)上修正了.
而且, 如果這一切就像標(biāo)榜的那樣, 那最終會(huì)讓web開發(fā)更少的依賴于虛擬計(jì)算機(jī). 如果你需要支持當(dāng)前的瀏覽器,又要顧及之前版本的, 你只需要更改你的X-UA-Compatible值到一個(gè)較早的版本然后看看事情變得怎么樣了 - 不需要VirtualPC的副本. 這不會(huì)立刻發(fā)生, 但是這是合理的最終結(jié)局. 新的嗅探測(cè)試
我們超越了瀏覽器嗅探, 不是嗎? 沒(méi)有人把這稱為 "脆弱" 與 "弄巧成拙"?
我們知道的瀏覽器嗅探技術(shù)和版本目標(biāo)器之間有至關(guān)重要的差別. 首先, "瀏覽器嗅探技術(shù)" 在現(xiàn)在意味著 "編寫代碼檢查正在用什么瀏覽器, 然后對(duì)標(biāo)簽/CSS/JS/服務(wù)器端響應(yīng)/任何東西進(jìn)行相應(yīng)的調(diào)整." 版本目標(biāo)器完全相反, 它讓 "瀏覽器自己檢查頁(yè)面是什么時(shí)候開發(fā)的, 并做出相應(yīng)的調(diào)整." 換句話說(shuō), 版本目標(biāo)把web開發(fā)者從嗅探中解放出來(lái), 并把這個(gè)責(zé)任交給瀏覽器開發(fā)商.
這不是個(gè)能輕松討論的改變. 瀏覽器的實(shí)現(xiàn)者們常用資源有限的借口來(lái)回絕我們, 但是卻依然指揮著比我們之中的任何人能召集的還要多的資源和技術(shù)進(jìn)行回退測(cè)試. 而且, 瀏覽器開發(fā)商對(duì)確保版本目標(biāo)像承諾的那樣不破壞舊站點(diǎn)比網(wǎng)站作者更新舊站點(diǎn)以支持新瀏覽器具有更大的既得利益. 后知后覺(jué)的好處
瀏覽器嗅探技術(shù)和版本目標(biāo)器之間的第二個(gè)區(qū)別是瀏覽器嗅探技術(shù)是向未來(lái)看, 而版本目標(biāo)器是向過(guò)去看. 向未來(lái)看是瀏覽器嗅探之所以脆弱的主要原因之一: 很難去預(yù)知未來(lái). 舉例來(lái)說(shuō): Safari在用戶端的標(biāo)識(shí)符中包含了"like Gecko"讓很大一群嗅探腳本出錯(cuò)了 - 甚至是那些做得比較好的. 這些腳本的作者因?yàn)椴荒茴A(yù)知一個(gè)Apple的non-Gecko的瀏覽器會(huì)在用戶端標(biāo)識(shí)符中包含"Gecko"這個(gè)詞而完全失敗了.
現(xiàn)在, 我們的前景是瀏覽器自身會(huì)做瀏覽器嗅探了, 然后會(huì)向后看了, 這會(huì)有更多的穩(wěn)定性: 過(guò)去的總是比預(yù)知未來(lái)更容易掌握.
此外, 我們已經(jīng)為瀏覽器們寫了足夠的腳本和Hacks來(lái)適應(yīng)他們, 是不是該是瀏覽器開始來(lái)適應(yīng)我們的頁(yè)面的時(shí)候了? 總而言之
我們知道向前兼容的研究工作. 更多的是, 雖然關(guān)于它的一切我們都知道了. 在互聯(lián)網(wǎng)初始的時(shí)候, 除Doctype轉(zhuǎn)換以外, 瀏覽器一直是以"所見即所得"為目標(biāo)的. 開發(fā)者們?cè)谕茰y(cè)未來(lái)的瀏覽器要做什么的同時(shí)還要被迫保持和過(guò)去的瀏覽器一樣的行為.
向前兼容的發(fā)展以及它的親戚: 逐步加強(qiáng)是適合的,必須的, 因?yàn)檫@是我們的網(wǎng)站能在未來(lái)正常工作的唯一希望. 對(duì)向前兼容的歌頌在我們工作的世界中是必需的.
在另一個(gè)瀏覽器開始采用版本目標(biāo)的世界里, 可能就是另一種選擇了. 誰(shuí)會(huì)知道會(huì)發(fā)生什么? 可能我們會(huì)發(fā)現(xiàn)向前兼容變得非常脆弱, 甚至相當(dāng)可笑.
我們說(shuō)向前兼容的發(fā)展是衡量一個(gè)專家的的標(biāo)志, 因?yàn)槲覀兊闹苯記Q定了這樣. 版本目標(biāo)的出現(xiàn), 那種要求可能就會(huì)完全消失了, 呈現(xiàn)出來(lái)的不再出錯(cuò),但是變得毫無(wú)意義. 雖然我根深蒂固的本能仍在抵抗這種結(jié)論, 但是我不得不進(jìn)我最大的努力去看這個(gè)可能會(huì)發(fā)生的未來(lái), 然后問(wèn)自己, 這會(huì)不會(huì)比我們知道更好或是更壞?
這看起來(lái)更好.
在最后, 讓我非常震驚的, 我原來(lái)并不討厭這個(gè)想法. 版本目標(biāo)使瀏覽器更容易開發(fā)新的功能, 并且在原有功能上修復(fù)錯(cuò)誤和缺點(diǎn), 這會(huì)潛在的加速web設(shè)計(jì)和發(fā)展, 單單這一個(gè)理由就就足夠給它一個(gè)機(jī)會(huì)了. 是的, 但是...
當(dāng)然, 我還是有所顧慮.
最大的顧慮是保真度. 會(huì)不會(huì)IE 8的向后兼容代碼工作起來(lái)看起來(lái)還是像IE 8一樣, 或者會(huì)不會(huì)有細(xì)微的改變但是還是破壞了舊的網(wǎng)站? 可能會(huì)這樣, 但是我們不敢說(shuō), 新的缺陷會(huì)影響未來(lái)瀏覽器的向后兼容嗎? 畢竟, 門會(huì)向兩邊擺: 廠商可能會(huì)讓他們的"向后看"代碼不是很嚴(yán)密, 就像開發(fā)者可能會(huì)讓他們的 "向前看" 代碼不是很嚴(yán)密一樣. 諷刺一下.
另一個(gè)小小的顧慮是版本目標(biāo)代碼在瀏覽器程序上的大小問(wèn)題. 這會(huì)讓瀏覽器變成一個(gè)臃腫的程序嗎? 一些人會(huì)認(rèn)為 "誰(shuí)在意啊? 現(xiàn)在的硬盤都很大了!" 但是我仍舊堅(jiān)定的不同意"資源廉價(jià)"的觀點(diǎn). 不管它們?nèi)绾蔚牧畠r(jià), 那也都是人們努力出來(lái)的. 我真誠(chéng)的希望未來(lái)的瀏覽器不會(huì)需要1或2G的存儲(chǔ)空間, 它的歷代版本Jacob Marley他過(guò)去的行為一樣. 名詞解釋
我完全不是 "edge" 這個(gè)詞的崇拜者. 原因是, 它的存在似乎使每個(gè)人都用自己的方法使用鎖定機(jī)制, 比如 "IE=1024"或是其他更大的數(shù)字. 問(wèn)題在于提供一個(gè)關(guān)鍵詞當(dāng)量創(chuàng)建一個(gè)官方賦予的氛圍的事情, 我不認(rèn)為microsoft會(huì)提供. 讓所有人都使用這個(gè)機(jī)制是他們的利益所在, 這個(gè)關(guān)鍵字在希望取消它的人們面前充當(dāng)著一個(gè)眼色,一個(gè)點(diǎn)頭. 我完全贊同人們遵守這個(gè)鎖定機(jī)制,如果他們希望的話 - 我能更好地完成這個(gè)工作, 但是這需要用到hacks, 而并不是官方的關(guān)鍵字.
Doctype作為版本目標(biāo)
我想我會(huì)感到高興, 如果頁(yè)面在不使用任何版本目標(biāo)信息也能被處理的話. 如果一個(gè)頁(yè)面不包含任何版本目標(biāo)信息, 那么Doctype就會(huì)充當(dāng)版本目標(biāo)的代理人. 比如說(shuō), 所有的HTML 4和XHTML 1的Doctype會(huì)在IE 7中作為默認(rèn)鎖定值. 在未來(lái), HTML 5的Doctype會(huì)作為IE 9或IE 10的默認(rèn)鎖定值, 這取決于被打開的文件.
當(dāng)然, 開發(fā)者可以提供一個(gè)明確的瀏覽器版本來(lái)忽略所有的: 一個(gè) HTML 2的文檔可以被IE9鎖定, 一個(gè)HTML 6的文檔可以被IE 7鎖定. 但是在沒(méi)有明確的版本目標(biāo)信息時(shí), Doctype要作為替身來(lái)連接到一個(gè)特定的版本. Microsoft的觀點(diǎn), 這是必需的: 如果沒(méi)有這種方式, 沒(méi)有目標(biāo)的頁(yè)面會(huì)被新版本的IE破壞. 我了解這點(diǎn). 但是這意味著為了能像他們本來(lái)的樣子那樣處理頁(yè)面, 隨著瀏覽器的進(jìn)步, 你就必須為目標(biāo)機(jī)制作Hacks: 用一個(gè)很大的版本號(hào)數(shù)字 - 或者用edge關(guān)鍵字, 如果它沒(méi)有被剔除的話.
最大的挑戰(zhàn), 似乎是, 他們必須確保版本目標(biāo)在未來(lái)的瀏覽器中以這樣的方式運(yùn)作而要像Doctype轉(zhuǎn)換那樣的不會(huì)破壞網(wǎng)站功能. 換句話說(shuō), 我們還要確保它的向前兼容.
我想我的那些本能最后又出現(xiàn)在身邊了.
#p#
相關(guān)文章
AudioContext 實(shí)現(xiàn)音頻可視化(web技術(shù)分享)
這篇文章主要分享的是web技術(shù)的 AudioContext 實(shí)現(xiàn)音頻可視化,要實(shí)現(xiàn)音頻可視化得先實(shí)現(xiàn)一些炫酷的效果需要借助 Web Audio API提供的一些方法 AudioContext,下面詳細(xì)內(nèi)容2022-02-23- 這篇文章主要給大家介紹了web技術(shù)中的WebRTC記錄音視頻流,文章內(nèi)容圍繞主題展相關(guān)資料,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-02-23
- 這是我通過(guò)網(wǎng)上查閱資料總結(jié)的一些編碼規(guī)范,用于鞏固對(duì)html,css頁(yè)面重構(gòu)時(shí)的基礎(chǔ),需要的朋友可以參考下2020-12-19
前端編碼規(guī)范(4)—— CSS 和 Sass (SCSS) 開發(fā)規(guī)范
這篇文章主要介紹了前端編碼規(guī)范(4)—— CSS 和 Sass (SCSS) 開發(fā)規(guī)范,需要的朋友可以參考下2017-01-21Web前端開發(fā)規(guī)范2017(HTML/JavaScript/CSS)
這是一份旨在增強(qiáng)團(tuán)隊(duì)的開發(fā)協(xié)作,提高代碼質(zhì)量和打造開發(fā)基石的編碼風(fēng)格規(guī)范,其中包含了 HTML, JavaScript 和 CSS/SCSS 這幾個(gè)部分。我們知道,當(dāng)一個(gè)團(tuán)隊(duì)開始指定并實(shí)行2017-01-21- 這篇文章主要為大家介紹了前端開發(fā)團(tuán)隊(duì)遵循和約定的代碼書寫規(guī)范,意在提高代碼的規(guī)范性和可維護(hù)性,需要的朋友可以參考下2017-01-21
響應(yīng)式Web之流式網(wǎng)格系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了響應(yīng)式Web之流式網(wǎng)格系統(tǒng)的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-04在網(wǎng)頁(yè)標(biāo)題欄上和收藏夾顯示網(wǎng)站logo的實(shí)現(xiàn)方法
下面小編就為大家分享一篇在網(wǎng)頁(yè)標(biāo)題欄上和收藏夾顯示網(wǎng)站logo的實(shí)現(xiàn)方法。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-03-16Visual Foxpro 6.0 中文版安裝向?qū)?圖解)
基于很多用戶都在下載Visual Foxpro 6.0,但是有安裝vtp6.0經(jīng)驗(yàn)的朋友確很少,在安裝過(guò)程中總會(huì)出現(xiàn)這樣那樣的問(wèn)題,基于這些問(wèn)題,下面小編抽個(gè)時(shí)間把Visual Foxpro 6.02015-09-09網(wǎng)站日志200 0 64狀態(tài)碼的分析(協(xié)議子狀態(tài))
網(wǎng)站日志200 0 64狀態(tài)碼的分析介紹2012-10-29