關於在javascript中出現的兩個術語 shim以及ployfill的解釋,
shim
首先關於shim的解釋是這樣的,在將一個新API調入到一箇舊環境中,通過shim來在舊環境中模擬出一個新API,而且依靠舊環境已有的手段來實現,以便所有的瀏覽器具有相同的行爲。
主要特徵在於:
- 該 API 存在於現代瀏覽器中;
- 瀏覽器有各自的 API 或 可通過別的 API 實現;
- API 的所有方法都被重新實現;
- 攔截 API 調用,並提供自己的實現;
- 是一個優雅降級。
ployfill
而polyfill 是一段代碼(或者插件),提供了那些開發者們希望瀏覽器原生提供支持的功能。程序庫先檢查瀏覽器是否支持某個API,如果不支持則加載對應的 polyfill。主要特徵:
- 是一個瀏覽器 API 的 Shim;
- 與瀏覽器有關;
- 沒有提供新的API,只是在 API 中實現缺少的功能;
- 以只需要引入 polyfill ,它會靜靜地工作;
shim 的概念要比 polyfill 更大一些,可以將 polyfill 理解爲專門兼容瀏覽器 API 的 shim 。簡單的說,如果瀏覽器X支持標準規定的功能,那麼 polyfill 可以讓瀏覽器 Y 的行爲與瀏覽器 X 一樣。