Gernar
Frontend DeveloperBrowser API

Интервью-вопрос

Что такое полифил

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

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше объяснить, что такое полифил?

Вы отвечаете коротко в начале интервью.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Полифил закрывает дыру в возможностях среды выполнения. Вы пишете код под стандартный API, но часть браузеров этот API еще не знает. Тогда полифил добавляет реализацию, чтобы код не падал у пользователей с такими браузерами.

Короткий ответ на интервью может звучать так:

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

Важно не звучать так, будто полифил делает браузер полностью современным. Он решает только конкретную задачу и только в рамках того, что вообще можно реализовать на JavaScript или поверх доступных браузерных возможностей.

Чем это отличается от транспиляции

Транспиляция отвечает за синтаксис. Например, сборщик может превратить стрелочную функцию в обычную функцию, чтобы старый браузер смог распарсить файл.

Полифил отвечает за runtime API. Если в браузере нет метода или объекта, одного переписывания синтаксиса мало.

const hasSelected = selectedIds.includes(currentId);

Если старый браузер не поддерживает Array.prototype.includes, этот код может упасть с ошибкой. Транспилятор не обязан автоматически заменить такой вызов. Нужен полифил, явная совместимая альтернатива или настройка инструмента, который добавит нужные runtime зависимости.

Как решить, нужен ли полифил

Хороший ответ показывает критерий выбора. Не нужно говорить, что полифилы всегда нужны или всегда вредны. Сначала есть продуктовый вопрос: кого вы поддерживаете и что случится, если API недоступен.

Если без API ломается форма оплаты, авторизация или основной экран, полифил может быть оправдан. Если речь о небольшой декоративной функции, иногда лучше дать fallback и не увеличивать общий JavaScript.

Как выбрать подход

1API отсутствует в целевых браузерах и нужен для основного сценария?
Подключите точечный полифил и проверьте его ограничения.
2Проблема только в новом синтаксисе?
Настройте транспиляцию, полифил тут не решит парсинг кода.
3Функция нужна редко или не критична?
Рассмотрите fallback, lazy loading или graceful degradation.
4Есть риск менять глобальные объекты?
Посмотрите в сторону ponyfill или локальной обертки.

Как подключать безопаснее

Опасный путь выглядит так: импортировать большой набор полифилов в точке входа и не проверять, кому он нужен. Это может быть проще на старте, но потом бандл растет, а пользователи современных браузеров получают лишний код.

Более аккуратный путь: поддерживать список целевых браузеров, смотреть поддержку конкретных API, проверять результат в bundle analyzer и тестировать старые среды, если они важны для продукта.

Если в проекте есть SSR, отдельно проверьте, где выполняется код полифила. Импорт, который обращается к window или document на сервере, может сломать рендер до отправки HTML. Для таких случаев нужен клиентский guard, динамический импорт или полифил, безопасный для серверной среды.

Безопаснее
  1. 1Зафиксировать целевые браузеры
  2. 2Проверить поддержку конкретного API
  3. 3Подключить минимальный полифил
  4. 4Проверить размер бандла и реальные сценарии
Опасно
  1. 1Импортировать весь набор полифилов
  2. 2Не смотреть на browserslist и аналитику
  3. 3Не проверять ограничения реализации
  4. 4Считать, что старый браузер стал полностью современным

Пример ловушки в коде

Плохой пример, если вы обещаете поддержку браузеров без fetch:

async function loadProfile() {
  const response = await fetch("/api/profile");
  return response.json();
}

Такой сценарий может сломаться в среде, где нет fetch или Promise. Без fetch вызов упадет в рантайме, а без Promise может не работать код вокруг async и await. В интерфейсе это выглядит как пустой профиль, вечный loading или ошибка до того, как пользователь увидит понятное сообщение.

Безопаснее добавить проверенный полифил до старта приложения или вынести запросы в клиентскую обертку, которая умеет показать fallback для неподдерживаемой среды. При этом полифил не заменяет обработку сетевых ошибок. Все равно нужно проверять статус ответа и показывать loading, error и empty state.

На интервью полезно сказать не только, что вы подключите fetch polyfill. Добавьте, что проверите, какие еще зависимости нужны, например Promise, и протестируете критичный сценарий в целевом браузере.

Ограничения и trade-off

Полифилы стоят денег в производительности. Браузер должен скачать, распарсить и выполнить дополнительный JavaScript. На слабых устройствах это заметно влияет на первый экран и интерактивность.

Есть и поведенческий риск. Нативная реализация браузера может быть быстрее и точнее, а полифил может покрывать только часть стандарта. Поэтому для сложных API лучше читать документацию пакета и не обещать, что все edge cases будут работать как в современном браузере.

Если хотите усилить ответ, добавьте фразу про ponyfill. Например: если мне не нужно менять глобальные объекты, я могу взять ponyfill или локальный helper. Так меньше риск конфликта со сторонним кодом.

Практический вывод

На собеседовании отвечайте в три шага. Сначала дайте определение: полифил добавляет отсутствующий стандартный API. Затем отделите его от транспиляции: синтаксис и runtime это разные проблемы. После этого покажите практику: подключать нужно только под реальные целевые браузеры и с проверкой размера бандла.

Такой ответ лучше простого перечисления core-js и fetch, потому что показывает инженерное решение. Вы не просто знаете термин, а понимаете, как он влияет на пользователей, сборку и поддержку проекта.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Путать полифил и транспиляцию

    Транспилятор может переписать синтаксис, но сам по себе не создаст недостающий метод в рантайме. Если старый браузер не знает Array.prototype.includes, код упадет даже после преобразования синтаксиса. В ответе лучше прямо разделить эти две задачи.
  2. 2

    Подключать слишком широкий набор

    Импорт всего core-js/stable без проверки потребностей может добавить лишние килобайты и замедлить загрузку. Безопаснее начинать с целевых браузеров и конкретных возможностей, которые реально используются в приложении.
  3. 3

    Считать полифил идеальной заменой нативного API

    Некоторые возможности завязаны на поведение браузера, сеть, потоковые API или безопасность платформы. Полифил может закрыть базовый сценарий, но не все edge cases. Критичные функции нужно проверять в браузерах, которые вы обещаете поддерживать.
  4. 4

    Менять глобальные объекты без причины

    Полифил часто патчит прототипы или глобальные переменные. Это может конфликтовать с другим кодом, особенно если реализация неполная. Если вы не хотите менять глобальную среду, рассмотрите ponyfill или явный helper.
  5. 5

    Не связывать ответ с пользовательским риском

    На интервью слабый ответ звучит как определение из словаря. Сильнее сказать, что без нужного полифила часть пользователей получит падение JavaScript, неработающую форму или пустой экран. Практичный ответ сразу называет действие: проверить поддержку API, добавить точечный полифил или дать fallback для этого сценария.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют понимание совместимости, сборки и браузерных ограничений.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание