尤雨溪:Vue3.0 官宣徹底拋棄 IE 瀏覽器

尤雨溪官宣


原因
自Vue 3的開發(fā)開始到2018年底,我們一直被要求提供IE11支持。許多用戶詢問Vue 3是否將支持IE11,我們最初的計劃是發(fā)布Vue 3并使其穩(wěn)定,然后添加稍后會支持IE11。
在漫長的開發(fā)過程中,我們還就IE11兼容性進(jìn)行了研究和實(shí)驗,但是由于所涉及的復(fù)雜性和手頭上的其他工作量大,因此已將其優(yōu)先處理。
當(dāng)我們再看一下2021年的今天的問題時,瀏覽器和JavaScript的狀況已經(jīng)發(fā)生了很大變化。現(xiàn)在,越來越多的開發(fā)人員正在使用現(xiàn)代語言功能,更重要的是,Microsoft本身已經(jīng)開始通過對Edge的投資積極地將用戶推離IE。
它還在自己的主要項目(如Microsoft 365)中放棄IE11支持。就在幾天前,WordPress還決定放棄對IE11的支持。IE11的全球使用率已降至1%以下。當(dāng)我們談?wù)撁嫦蚬姷木W(wǎng)站和應(yīng)用程序時,IE11呈明顯的快速下降趨勢。
我們相信這是一個重新思考IE11對Vue 3支持的機(jī)會。
對Vue3 中支持 IE11的成本?
行為不一致
Vue 2的反應(yīng)系統(tǒng)基于ES5 getter / setter。Vue 3利用ES2015代理獲得了性能更高且更完整的反應(yīng)系統(tǒng),該系統(tǒng)無法在IE11中進(jìn)行多填充。這是主要障礙,因為這意味著Vue 3要支持IE11,它實(shí)際上需要發(fā)布兩個具有不同行為的不同版本-一個使用基于Proxy的反應(yīng)系統(tǒng),另一個使用類似于Vue 2的基于ES5-getter / setter的系統(tǒng)。。
Vue 3的基于代理的反應(yīng)性系統(tǒng)提供了幾乎完整的語言功能覆蓋。它能夠檢測許多在ES5中不可能或不可行的操作,例如屬性添加/刪除,數(shù)組索引和length突變以及in操作員檢查。為Vue 3的代理版本編寫的相同代碼在IE11版本中不起作用。這不僅給我們帶來了技術(shù)上的復(fù)雜性,也給開發(fā)人員帶來了持續(xù)的精神負(fù)擔(dān)。
我們最初的計劃是在IE11版本的開發(fā)版本中同時交付Proxy和ES5反應(yīng)性實(shí)現(xiàn)。當(dāng)它在啟用代理的開發(fā)環(huán)境中運(yùn)行時,它將檢測并警告不兼容IE11的用法。從理論上講,這是可行的,但由于需要將這兩種實(shí)現(xiàn)混合在一起,并且在開發(fā)和生產(chǎn)之間存在行為差異的風(fēng)險,因此造成了極大的復(fù)雜性。
長期維護(hù)的負(fù)擔(dān)
支持 IE11 也意味著我們必須考慮在整個代碼庫中使用的語言特性,并為我們的發(fā)布版本找到合適的 poliyfill / 編譯策略。
每一個不能在 IE11 中被 polyfill 的新特性都會帶來新的行為警告。一旦 Vue 3 承諾支持 IE11,就永遠(yuǎn)沒辦法擺脫了,直到下一個大版本。
對于那些實(shí)在需要 IE11 支持的人
如果您需要 IE11 支持,我們的建議是使用 Vue 2。與其為 Vue3 和未來的版本承擔(dān)巨大的技術(shù)債,我們相信,把工作重心放在讓 Vue2 擁有更多 Vue3 類似的特性更有意義,讓兩個版本之間的開發(fā)體驗更相似。
原文地址
https://github.com/vuejs/rfcs/blob/ie11/active-rfcs/0000-vue3-ie11-support.md https://zhuanlan.zhihu.com/p/362000763
