Shim
Nếu bạn đã quen thuộc với mẫu bộ điều hợp, thì bạn sẽ biết shim là gì. Shims chặn các lệnh gọi API và tạo một lớp trừu tượng giữa người gọi và mục tiêu. Thông thường các miếng chêm được sử dụng cho khả năng tương thích ngược. Chẳng hạn, gói es5-shim npm sẽ cho phép bạn viết cú pháp ECMAScript 5 (ES5) và không quan tâm xem trình duyệt có chạy ES5 hay không. Lấy Date.now làm ví dụ. Đây là một hàm mới trong ES5 trong đó cú pháp trong ES3 sẽ là Date (). GetTime () mới . Nếu bạn sử dụng es5-shim, bạn có thể viết Date.now và nếu trình duyệt bạn đang chạy hỗ trợ ES5, nó sẽ chỉ chạy. Tuy nhiên, nếu trình duyệt đang chạy, công cụ ES3 es5-shim sẽ chặn cuộc gọi đến Date.nowvà chỉ trả về Ngày mới (). getTime () thay vào đó. Sự đánh chặn này được gọi là shinkle. Mã nguồn có liên quan từ es5-shim trông như thế này:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Polyfill
Polyfilling thực sự chỉ là một phiên bản chuyên biệt của shinkle. Polyfill là về việc triển khai các tính năng bị thiếu trong API, trong khi đó, shim sẽ không nhất thiết phải thực hiện nhiều tính năng bị thiếu cũng như về việc sửa các tính năng. Tôi biết những điều này có vẻ quá mơ hồ, nhưng trong đó các miếng chêm được sử dụng như một thuật ngữ rộng hơn, polyfill được sử dụng để mô tả các miếng chêm cung cấp khả năng tương thích ngược cho các trình duyệt cũ hơn. Vì vậy, trong khi các miếng chêm được sử dụng để che đậy những tội lỗi cũ, polyfill được sử dụng để mang lại những cải tiến trong tương lai.
Như một ví dụ không có sự hỗ trợ cho sessionStorage trong IE7, nhưng polyfill trong sessionstorage gói NPM sẽ bổ sung thêm tính năng này trong IE7 (trở lên) bằng cách sử dụng các kỹ thuật như lưu trữ dữ liệu trong tên thuộc tính của cửa sổ hoặc bằng cách sử dụng các tập tin cookie.