Shim

Коротко

Прослойка кода, которая перехватывает вызовы к API или окружению и подгоняет их под ожидаемый интерфейс, сглаживая различия между версиями и платформами.

Что такое «Shim»

Слово пришло из столярного дела: shim — тонкая подкладка, которой выравнивают перекошенную деталь. В программировании смысл тот же. Есть код, рассчитанный на определённый интерфейс, и есть среда, где этот интерфейс выглядит иначе или устроен по-старому. Шим встаёт между ними и делает так, чтобы код работал без переписывания.

В веб-разработке шимы особенно часто писали в эпоху старых Internet Explorer. Известный пример — html5shiv: небольшой скрипт, без которого IE 8 не умел стилизовать новые теги вроде header и section. Встречаются шимы и вне браузера: в Node.js подставляют браузерные API, в сборщиках подменяют модули для другой платформы.

Пример шима

window.requestAnimationFrame =
  window.requestAnimationFrame ||
  window.webkitRequestAnimationFrame ||
  function (callback) {
    return setTimeout(function () {
      callback(Date.now());
    }, 16);
  };

Код сначала берёт стандартную функцию, затем вариант с вендорным префиксом, а если нет ни того ни другого — подставляет упрощённую замену на таймере. Остальной код вызывает requestAnimationFrame и не думает о различиях браузеров.

Чем отличается от полифила

Границу проводят по-разному, но обычно так. Полифил реализует стандартную возможность там, где её нет, и повторяет её поведение по спецификации. Шим шире: он может переименовывать вызовы, менять порядок аргументов, оборачивать старое API в новое или наоборот, и при этом не обязан строго следовать какому-либо стандарту. Можно сказать, что любой полифил — разновидность шима, но не любой шим — полифил.

Когда шим становится обузой

Шимы пишут под конкретные устаревшие окружения, и со временем эти окружения исчезают. Если в проекте до сих пор подключены прослойки для IE, они только увеличивают объём скриптов. При ревизии кода стоит проверять, для каких браузеров собирается проект, и убирать то, что больше не нужно. Подобные подкладки часто прячутся в вендорных файлах старых тем и плагинов.

Обновлено:

Все термины раздела «Frontend»

Что будем искать? Например,Продвижение