20 世紀(jì) 90 年代初期,圖靈獎(jiǎng)得主 Tim Berners-Lee 締造了計(jì)算機(jī)領(lǐng)域最偉大的發(fā)明之一 —— 萬維網(wǎng),實(shí)現(xiàn)了 HTTP 代理與服務(wù)器的第一次通信。他定義了 Web 的三大基礎(chǔ)技術(shù) URI、HTTP 和 HTML:URI 解決文檔的路由表示和尋址;HTTP 協(xié)議解決文檔的傳輸形式;HTML 解決文檔的組織形式。從設(shè)計(jì)原則上說,他想到應(yīng)當(dāng)盡可能得降低文檔開發(fā)和發(fā)布的復(fù)雜度,建立自由、開放和互聯(lián)互通的分布式系統(tǒng)。網(wǎng)站部署方式應(yīng)該簡單、高效,且用戶無需自行下載,僅僅通過 HTTP 代理軟件 —— 瀏覽器,即可快速獲得想要的資源。在這種設(shè)想下,Tim Berners-Lee 在自己的 NeXT 電腦(Steve Jobs 創(chuàng)立)上架設(shè)了世界上第一個(gè) Web 服務(wù)器和 Web 瀏覽器,域名為?http://info.cern.ch/,延續(xù)至今。
zzpic19728.jpg
<figcaption >程序員小李</figcaption>
隨后,如大多數(shù)人所預(yù)見,瀏覽器被卷入了無休止的商業(yè)戰(zhàn)爭中,第一次瀏覽器大戰(zhàn)、第二次瀏覽器大戰(zhàn)、第三次瀏覽器大戰(zhàn)……。在利益的趨勢下,各種陰險(xiǎn)狡詐的手段層出不窮:操作系統(tǒng)捆版瀏覽器、瀏覽器捆綁搜索引擎、瀏覽器捆綁門戶網(wǎng)站、***病毒修改主頁、流氓安全軟件修改主頁、國產(chǎn)“自主研發(fā)”瀏覽器騙補(bǔ)貼……。同時(shí),競爭也催生了越來越多的程序員品種,前端工程師、網(wǎng)絡(luò)工程師、PHP 工程師、優(yōu)化工程師……;競爭加速了產(chǎn)品的改進(jìn)與更替,事物優(yōu)勝劣汰,Mosaic、Netscape、IE 瀏覽器相繼死去,安全、美觀、高性能的瀏覽器脫穎而出;競爭加速了技術(shù)的迭代與進(jìn)步,無數(shù)的排版引擎、腳本解釋引擎應(yīng)運(yùn)而生,KHTML、Webkit、Trident、Gecko、Blink、Presto……,Chakra、Carakan、JavaScriptCore、SpiderMonkey、V8……。不得不說,沒有戰(zhàn)爭,沒有競爭,就沒有現(xiàn)在前端圈的繁榮與繁華。
<figcaption >瀏覽器們放學(xué)約架</figcaption>
然而,事情并非這么順利,競爭與迭代帶來了很多兼容性遺留問題。新型瀏覽器為了表示它們完全支持舊瀏覽器提供的特性,在 UA 標(biāo)志上動(dòng)手腳,偽裝成目標(biāo)瀏覽器,并增加自己的獨(dú)特標(biāo)志。瀏覽器廠商為了提升市場份額,以差異化為準(zhǔn)則不斷改進(jìn)產(chǎn)品,提升競爭力,卻沒有一套統(tǒng)一的標(biāo)準(zhǔn)來約束基礎(chǔ)技術(shù)架構(gòu)。為此,以 Tim Berners-Lee 為首的人在 1994 年創(chuàng)建了非營利組織 W3C,作為中立機(jī)構(gòu),致力于 Web 標(biāo)準(zhǔn)化的制定,指導(dǎo)瀏覽器正確地工作,推動(dòng)技術(shù)穩(wěn)定有序地發(fā)展。但是,歷史總是在曲折中前進(jìn),其中有一段時(shí)間 W3C 甚至劍走偏鋒,意圖放棄 HTML 轉(zhuǎn)而推廣 XHTML,受到廠商和用戶的一致反對(duì)。因此,由 Opera、Mozilla 基金會(huì)、蘋果這些瀏覽器廠商成成了 WHATWG 工作組,繼續(xù)編寫和擴(kuò)展 HTML 標(biāo)準(zhǔn)。直至今天,W3C 和 WHATWG 兩個(gè)機(jī)構(gòu)同時(shí)在運(yùn)作。WHATWG 制定的標(biāo)準(zhǔn)稱為 Living Standard,W3C 制定的標(biāo)準(zhǔn)成為 Recommendation;WHATWG 只負(fù)責(zé)跟進(jìn)最新的標(biāo)準(zhǔn),W3C 會(huì)對(duì)歷史版本標(biāo)準(zhǔn)進(jìn)行歸檔;WHATWG 制定的標(biāo)準(zhǔn)更加激進(jìn),W3C 只提供成熟、穩(wěn)定且大部分已經(jīng)被瀏覽器實(shí)現(xiàn)的標(biāo)準(zhǔn);WHATWG 社區(qū)更加活躍,W3C 會(huì)復(fù)制粘貼他們的成果。另外,即使有標(biāo)準(zhǔn)的制定和約束,但并非強(qiáng)制性要求,瀏覽器廠商可以根據(jù)自己的情況選擇性支持其中之一。
<figcaption >W3C/WHATWG 拳打腳踢</figcaption>
唯物辯證法指出,一切存在的事物都由既相互對(duì)立、又相互統(tǒng)一的一對(duì)矛盾組合而成:標(biāo)準(zhǔn)制定者與瀏覽器開發(fā)者、瀏覽器開發(fā)者與 Web 開發(fā)者、Web 開發(fā)者與 Web 用戶群體。標(biāo)準(zhǔn)制定者抱怨瀏覽器開發(fā)者不按照他們所制定的標(biāo)準(zhǔn)來實(shí)現(xiàn),后者抱怨前者太過偏激、草率;Web 開發(fā)者抱怨瀏覽器開發(fā)者解析執(zhí)行代碼效率過低,后者抱怨前者調(diào)用姿勢錯(cuò)誤;Web 用戶群體抱怨 Web 開發(fā)者寫的界面太丑、交互不合理、BUG 太多,后者抱怨前者用戶行為詭異、不按常理出牌。雖然說矛盾推動(dòng)了技術(shù)的發(fā)展,但同時(shí)也帶來了更大的危機(jī)和沖突。瀏覽器各種功能和特性的差異化給 Web 開發(fā)者帶來了極大的困擾與痛苦,不得不采取各種 hack 手段、兼容手段,讓代碼在任一瀏覽器內(nèi)無差錯(cuò)執(zhí)行。開源社區(qū)也涌現(xiàn)了大量的解決方案,致力于抹平瀏覽器之間的差異。core-js 基于 ES3 的語法提供 ES5、ES2015+ 的特性 Polyfill;Autoprefixer 基于 caniuse-db 來決定是否添加瀏覽器私有樣式前綴;Babel 基于 compat-table 來編譯高階語法到低階語法;Browserslist 基于 BrowserStack 來統(tǒng)計(jì)市場份額以及提供瀏覽器產(chǎn)品列表。即使如此,仍存在一些不可抗力因素,使得 Web 開發(fā)者沒有辦法彌合或徹底消除這些差異。比如,Service Worker、Web Worker、WebAssembly、Web Bluetooth、Proxy、Grid Layout、<dialog> Element、CSS Houdini 等這些特性,我們沒有辦法通過上訴方式解決。
<figcaption >世界末日?</figcaption>
痛點(diǎn)并不是完全無法解決。我們的訴求是需要一種手段來解決產(chǎn)品差異化帶來的問題,一種手段是兼容低版本瀏覽器;另一種手段是只適配高版本瀏覽器,并且告知用戶應(yīng)該升級(jí)他們的瀏覽器,才能正常使用我們的服務(wù)。無論使用哪種手段,我們都應(yīng)該要去避免這種情況:頁面加載后一片空白或者點(diǎn)擊某個(gè)按鈕完全沒有響應(yīng),頁面布局錯(cuò)位、頁面腳本執(zhí)行錯(cuò)誤,然而用戶并不知道我們的網(wǎng)站不兼容他們的瀏覽器。為了解決這個(gè)問題,我們可以想到有很多方案,一種簡單的方案是使用條件注釋,比如 <!–[if lt IE 9]>...<![endif]–>;一種方案是基于特性的檢測,檢查全局對(duì)象 window 是否存在某個(gè)對(duì)應(yīng)屬性;另一種更好的方案是使用 UA 判斷,在頁面運(yùn)行期間檢測當(dāng)前代理是否滿足開發(fā)者的要求,遺憾的事實(shí)是社區(qū)中并沒有一個(gè)很好的通用方案來實(shí)現(xiàn)這個(gè)目標(biāo)。因此,我們按照后者的設(shè)想,致力于提供一個(gè)工具,并集成于現(xiàn)有的前端工具鏈中,來達(dá)到目標(biāo)。
<figcaption >“這次可能真的成了!”</figcaption>
Obsolete Webpack Plugin 是筆者在業(yè)余時(shí)間開發(fā)的工具,檢測用戶瀏覽器是否支持網(wǎng)站代碼。方法很簡單,當(dāng)頁面處于 Idle 狀態(tài)時(shí),檢測 UA 是否滿足開發(fā)者預(yù)設(shè)的目標(biāo)瀏覽器。如果配對(duì)失敗,則執(zhí)行腳本,把預(yù)設(shè)的模板插入 DOM 樹中,來提醒用戶他們的瀏覽器不支持,應(yīng)該升級(jí)或者下載一款新的瀏覽器,避免一片空白茫然不知所措的局面。工具上手難度、配置復(fù)雜性很低,我們基于社區(qū)中最普遍、廣泛依賴的基礎(chǔ)庫 Browserslist 來作為輸入預(yù)設(shè),無縫整合到當(dāng)前的前端工具鏈中,所以最后決定選擇 Webpack 插件作為切入點(diǎn),打包時(shí)額外生成一份兼容 ES3 語法的腳本,結(jié)合 HTML Webpack Plugin 一起注入到 HTML 中。
歷史的車輪滾滾向前,最后,祝所有的 Web 開發(fā)者有一個(gè)愉快的開發(fā)體驗(yàn),讓技術(shù)牽動(dòng)用戶使用更好的瀏覽器,而不是讓用戶阻礙了技術(shù)的進(jìn)步。
9eff325416be933216924134f29095d.jpg
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享題目:什么是ObsoleteWebpackPlugin?-創(chuàng)新互聯(lián)
本文URL:http://www.sd-ha.com/article30/phppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容