Shim
Shim 指的是在一個舊的環(huán)境中模擬出一個新 API ,而且僅靠舊環(huán)境中已有的手段實現(xiàn),以便所有的瀏覽器具有相同的行為。主要特征:
- 該 API 存在于現(xiàn)代瀏覽器中;
- 瀏覽器有各自的 API 或 可通過別的 API 實現(xiàn);
- API 的所有方法都被重新實現(xiàn);
- 攔截 API 調(diào)用,并提供自己的實現(xiàn);
- 是一個優(yōu)雅降級。
比如:Object.defineProperty 是 ES5 中一個無法 shim 的特性,這也就是為什么 Vue 不支持 IE8 以及更低版本瀏覽器。
這是我在看Vue的文檔的時候看到的,學習記錄一下
Polyfill
polyfill 是一段代碼(或者插件),提供了那些開發(fā)者們希望瀏覽器原生提供支持的功能。程序庫先檢查瀏覽器是否支持某個API,如果不支持則加載對應的 polyfill。主要特征:
- 是一個瀏覽器 API 的 Shim;
- 與瀏覽器有關(guān);
- 沒有提供新的API,只是在 API 中實現(xiàn)缺少的功能;
- 以只需要引入 polyfill ,它會靜靜地工作;
shim 的概念要比 polyfill 更大一些,可以將 polyfill 理解為專門兼容瀏覽器 API 的 shim 。簡單的說,如果瀏覽器X支持標準規(guī)定的功能,那么 polyfill 可以讓瀏覽器 Y 的行為與瀏覽器 X 一樣。