- 原文地址:Why you should have ditched IE support long ago...
- 原文做者:Areknawo
- 譯者:Chor
2025 年 10 月 14 日 —— 記住這個日子,聽說(非官方說法)這一天事後,微軟就再也不支持 IE11 了。爲何我要告訴你這件事呢?由於,正如你可能知道的,IE 做爲一款瀏覽器讓廣大 web 開發者大傷腦筋。不過它真就那麼差嗎?在 2020 年你是否還須要提供對 IE 的支持呢?css
Internet Explorer(IE)是一款最初由微軟在 1995 年發佈的 web 瀏覽器。那時 web 瀏覽器剛誕生不久,標準也沒有廣爲遵循。JavaScript 甚至還在「襁褓」之中(它是在 1995 年 12 月發佈的),而各個瀏覽器都有本身的非標準特性、附加組件以及插件。git
所以,微軟在 1995 年帶着 IE 進軍瀏覽器市場的時候,幾乎沒有遇到競爭對手(除了 網景導航者)。在最初的版本發佈後不久,微軟就開始在其很是流行的操做系統 —— Windows 的每個新版本中免費提供 IE。這帶動了 IE 使用量的急劇增長,在 21 世紀初它的市場份額已經超過了 90%。固然,這裏面並不乏反壟斷以及權力濫用的爭議,但這裏不敞開聊這些。github
「抱歉,該網站只能在 IE 運行」,相似這樣的對話框和彈出窗口一度充斥用戶屏幕。不過,這一切很快就結束了,由於微軟沒有能力改進本身的 web 瀏覽器,反而是引入了各類奇怪的特性。這個時期,Web 的可訪問性獲得加強,其它 web 瀏覽器開始進軍市場(好比 2008 年的 Google Chrome)。再加上移動端(IE Mobile —— 曾經也是有這麼一個東西的)的興起,致使 IE 的市場份額持續下跌,如今只有大約 1.5%。web
瀏覽器市場份額統計表windows
最後,甚至連微軟也認可本身在 web 瀏覽器上的敗北。所以,微軟在 2015 年發佈 Windows 10 的同時,還發布了一款全新的 Edge 瀏覽器,該瀏覽器徹底重寫了之前的內部代碼。不過,低市場份額以及用戶廣泛懷揣着「安裝 Chrome 瀏覽器就夠用了」的心態,無不說明這款瀏覽器難擔大任。微軟不得不另闢蹊徑。瀏覽器
再過幾天,也就是 2020 年 1月 15 號,帶有全新圖標並以 Chromium(Chrome,Opear 以及許多其它的瀏覽器都使用了該內核)做爲內核的 新版本 Edge 將捲土重來。這一次,微軟會再次嘗試贏回本身的用戶羣。你能夠在這裏下載該瀏覽器的 beta 版本,我不得不認可 —— 這款瀏覽器屬實能夠。有點像 Edge 和 Chrome 的合體狀態!安全
讓咱們回到正題。最近,在進行這個網站(譯註:指做者的我的網站)的重構時,我在考慮爲了支持 IE 得作多少工做。結果代表 —— 至關至關多!因此,對那些佔比不到 0.4% 的仍然使用 IE 瀏覽器的讀者們,我感到抱歉,由於日後我就不會再支持 IE 了。爲了證實個人選擇是正確的,咱們來設想一下一個網站爲了支持 IE 11(這裏考慮的甚至不是更古早的版本)須要放棄多少東西。babel
2015 年 ES6 的推出使得 JS 人氣暴漲。因爲 IE 11 是在 2013 年推出的,並於不久後的 2015 年被 Edge 取代,所以它沒有辦法支持現代 ES6 的特性。也許你認爲這算不上一個問題,畢竟相似 Babel 這樣的工具能夠近乎完美地解決兼容性問題。不過,有些特性是沒辦法經過 polyfill(用「舊」代碼替換) 解決的。此外,大部分瀏覽器也都支持 ES6,這時候仍然採用 polyfill,只會形成沒必要要的代碼臃腫和開發流程複雜化。app
Can I Use 上的數據代表,IE 11 不支持大部分 EcmaScript 6(ES6)的特性。這意味着它沒法使用諸如箭頭函數或者是類這樣的語法糖,也沒法使用諸如 Promise 或 WeakSet 這樣的新特性。其它的,諸如(Weak)Map、Set 以及 let
/const
變量聲明,只獲得了部分支持。固然,比 ES6 更新的特性也不多見(若是有的話)。ecmascript
這樣的例子還有不少,但我不想吹毛求疵。其它瀏覽器的舊版本也不支持某些特性,但它們要麼常常(無縫地)更新,要麼沒有那麼流行。
因爲 Web API 不是 JavaScript 自己的一部分,所以它容許在 Web 上使用一些獨有的功能。然而,與那些涉及語法的特性不一樣,這些功能在大部分狀況下都是沒有辦法經過 polyfill 實現的。
從更相關的 Web API 來看,IE 缺少對 Fetch API、Web Notifications 以及 WebRTC 的支持。而這三者之中只有 Fetch API 有對應的經過使用 XMLHttpRequest 實現的 polyfill。值得慶幸的是,Notification API 和 WebRTC 都是爲現代的、功能豐富的 web 應用而設計的,這些應用從一開始就沒有打算面向 IE。
還有一些 Web API 只獲得部分支持。最顯而易見的也許就是 WebGL 了。WebGL 2 很顯然是不支持的,這咱們都清楚,但重點在於 IE 11 甚至要經過 "experimental-webgl"
標識符而不是標準的 "webgl"
來訪問 WebGL 上下文。
若是你想要增長難度的話,能夠建立一個不使用 JavaScript 的網站。不過一想到有服務端渲染(SSR)或者 JAMStack(靜態網站)這類技術做爲支撐 —— 這實際上也並不會很難。但咱們沒辦法不使用 CSS,更別提 HTML 了!不幸的是,IE 偏偏就有不少 HTML 和 CSS 方面的問題。咱們來舉幾個例子。
就 HTML 而言,問題還沒那麼大 —— 若是你認爲對 HTML5 只能作到部分支持「不算問題」的話。拋開一些標準自己發佈後才引入的特性不談,IE 並無缺失對大部分 HTML 特性的支持,因此這方面問題不大。
但 CSS 可就不同了。IE 對不少重要的特性都只能作到部分支持,諸如 彈性佈局、網格佈局、CSS 變量以及視口單位(如 vmax
)。有的可使用前綴實現,有的則要麼缺少某些功能,要麼只支持舊的、不兼容的規範版本。CSS 仍然能夠依靠諸如 PostCSS 這樣的工具進行處理,但仍是太麻煩了,畢竟大多數瀏覽器都徹底能夠支持前面所說的那些特性。
出於撰寫文章的須要,我不得不離開溫馨的 Linux,前往 Windows 10 最黑暗的一角 —— IE 11。不得不認可 —— 這個瀏覽器的體驗和性能實在是差強人意。我忍不住回想起全部關於 IE 的點滴笑話;)。無論怎麼說,既然咱們對 IE 11 受限的特性有了必定了解,如今讓咱們瀏覽一些網站,看看它們是如何工做的吧!
IE 11 上的 Areknawo
首先從個人博客網站開始。在當前的版本中,它表現得還挺好的,只是 JavaScript 沒法運行。頂部廣告沒法顯示,訂閱通知框以及每篇博文下的 Disqus 評論消失了,AJAX 頁面轉換失效。全部的這一切都歸功於......IE 不支持我在代碼中使用的 ES6 模板字符串!
老實說,我並不打算修復這個小問題 —— 尤爲是進行不兼容 IE 的重構時。由於這沒啥意義。這個博客是面向 web 開發人員或者」技術「人員的,而他們一般會使用最新的、最好的工具。大部分的目標用戶羣體根本不使用 IE,就算使用了......興許也只是爲了作測試 ;)。
IE 11 上的 YouTube
在 IE 上打開 YouTube 感受就像是回到了過去。一切正常,但 UI 已通過時了。貌似谷歌給 IE 留下了最後一個兼容的版本。明智之舉。可是對於小組織和小公司來講,維護同一網站的舊版本可能有點浪費資源。
IE 11 上的 GitHub
GitHub 直接了當地告訴你,你當前使用的瀏覽器是不受支持的。有意思的是,GitHub 如今是屬於微軟的。不過我並非在責備他們 —— 他們的作法沒錯。無論怎樣,你能夠關閉這個小對話框,但緊接着你會發現工具欄是壞的,登陸頁面彷佛也有問題,一直顯示在加載中。出於安全性考慮,我沒有嘗試進行登陸 —— IE 過去發生了不少安全性問題。
IE 11 上的 CodePen
CodePen 一樣顯示了一個對話框,不過這個對話框更大,並且」沒法關閉「。上面說,高級會員能夠配合 Debug View 進行使用,不過我沒有進行測試,因此這裏不發表意見。
IE 11 上的 CSS-Tricks
CSS-Tricks 是一個簡單的網站 —— 它使用的 JS 並很少,內容大多都是文本。也沒有任何對話框或者信息彈出 —— 只有內容殘缺的頁面。樣式不生效,部分東西沒法顯示,但至少內容和文章仍是能夠閱讀的。
IE 11 上的蘋果官網
」反 IE「的網站太多了,我沒辦法在本文一一窮舉。不過,我仍是稍微再吐槽一下!流行的生產力工具 Slack 和 Trello 不容許你使用 IE 登陸網站,甚至蘋果官網首頁的佈局也是徹底崩壞的!其它頁面看起來沒問題,可是沒有華麗的滾動特效,而且沒法購買任何東西,除非」更新你的瀏覽器「 。
若是你以爲上面這些案例不夠,你還能夠用 IE 11(若是你使用的是 Windows 10 —— IE 11 可能還在) 打開你常常瀏覽的網站。而後,你就能切身體會到我這一路上經歷的痛楚了!;)
本文的主要目標就是爲了告訴你,已經沒有必要兼容 IE 了。在使用現代特性時,你應該會以爲更加放得開,尤爲是着手新項目的時候。
我據說一些企業依賴於只能在 IE 上運行的代碼,而且承擔不起更新的成本。依我之見,這種設計太差了 —— 無心冒犯。互聯網歷來都是不斷變化和發展的,惟有學會適應和改變才能存活下來。若是你的 app 不容許你這麼作,那麼它就是失敗的。這只是我我的的觀點。事實上,我甚至瀏覽過一個 —— 說來可笑,連 IE 11 都不支持的網站!只有使用舊版本的瀏覽器才能正常訪問該網站 —— 儘管這些瀏覽器早就不被支持了。
因此,除非你面向的用戶羣體很是普遍且特殊,不然我會勸告你:不要在 IE 上花太多功夫。若是對 IE 的支持不會給你帶來任何損失或者是限制你產品的功能,那儘管去支持好了!不過,想一想咱們前面討論過的那些特性,現實每每是殘酷的......
好了,本文內容到這裏就結束了!你對支持 IE 這件事的見解是什麼?你的網站又是否會支持 IE 呢?請在底下的評論發表你的見解。另外,若是你喜歡這篇文章的話,能夠把它分享給其餘人,並關注個人 Twitter 和 Facebook,或者是經過 weekly newsletter 實時獲取個人最新文章。若是你感興趣的話,也能夠關注個人 YouTube 頻道 ,歡迎點贊和訂閱!最後,感謝你閱讀本文,祝你有美好的一天!