Pull to refresh

Comments 33

Буду краток (с).
На дворе 2020, не используйте полифилы.
Если что-то работает в хроме, но не работает в ФФ хотя бы в найтли (или наоборот) — значит фича пока сырая, глюкавая и будет дорабатываться.
Если юзерам нужен ИЕ, то скорее всего у них ХР. Подумайте, нужны ли в 2020 вам такие юзеры. Если даже нужны — пересаживайте их на ESR-версии хрома/ФФ/оперы, там хотя бы асинки работают и большинство из нужных фич.
Полифилы мало того что раздувают ваш бундль, они ещё часто тормозят всех. JS полифил всегда будет выполняться медленнее, чем нативная реализация того же в браузере.
На крайний случай делайте две сборки — нормальную и легаси с полифилами. Vue например умеет такое «из коробки», но не всем так повезло.
Подумайте, нужны ли в 2020 вам такие юзеры.

Вот у нас бизнес подумал и сказал, что нужны. Заметную часть доходов приносят пользователи IE в b2b сфере у многих, насколько я знаю.

А у вас бизнес какие-либо бизнес-метрики снимал с этих юзеров? РОИ там, нагрузка на техподдержку, затраты на тестирование для старых ИЕ, вот это вот всё? Проблема ведь не только в том, что там браузер старый, там скорее всего и комп очень старый (медленный проц, мало ОЗУ). Оно и так еле шевелится, а если туда ещё и полифилов напихать — то по факту приложение запускается, но сколько-нибудь нормально не работает.

Какие-то снимали. И как-то работает, потому что малейший косяк с полифилами в релизе и баги очень быстро приходят уже до разработчиков

А как быть с пользователями, у которых старый Хром 49, потому что они сидят на каком-нибудь Android 5 или 6 и выходят в интернет со стандартного встроенного браузера «Браузер» или «Интернет»? И их, к сожалению, далеко не 1% пользователей.
Ну хром 49 очень далеко ушёл по сравнению с ИЕ9 (ХР), по крайней мере промисы и let/const понимает.
раздувают ваш бундль, они ещё часто тормозят всех

Мы используем такой подход: современные браузеры не тормозим, старые и так медленные.
Первым идёт небольшой скрипт который проверяет фичу и синхронно подключает скрипт полифила.
!window.Promise && document.write('<script src="путь"></script>')

В итоге новый браузер пробегает десяток if и быстро работает, старые браузеры ждут пачки полифилов.

Правда это не работает с async\await и другим новым синтаксисом, но тут мы планируем собирать два бандла.
Если юзерам нужен ИЕ, то скорее всего у них ХР. Подумайте, нужны ли в 2020 вам такие юзеры.


Ушел пересаживать тысячу-другую своих бухгалтеров и юристов на Линукс, пришла команда из хабра.
Рекомендую сначала забрать счёты:)
Пользователи с IE в 2020 году очень даже часто встречаются. И не только c XP. Уже давно с семёркой, как минимум.
А сидят они в IE не по своей прихоти или нежелании переходить на другие браузеры. Основная часть этих пользователей работает или в банковской сфере или работают с банками (или с госструктурами). Он поддерживает нужный тип шифрования. Для этого же браузера пишут специальные расширения для работы. Кроме того, в таких организациях очень не любят что-то менять, если и так хорошо работает.
В части, что полифилы медленнее нативной реализации, согласен, но, когда нет выбора, то без них не обойтись.
Кроме того, в таких организациях очень не любят что-то менять, если и так хорошо работает

В том-то и дело, что работает плохо. Explorer устаревший и самый небезопасный браузер и ничего хорошего там нет. Сидят на нем не от хорошей жизни, и я не понимаю, зачем оправдывать этот старый хлам.

Я не оправдываю. На счёт «работает хорошо», я имел в виду про налаженный процесс, а не про работу самого браузера.
По правде говоря, я и сам не понимаю этого требования на счёт IE. Нормальная система должна работать во всех браузерах. Вот, поэтому, там, где невозможно использовать браузеры актуальной версии или поддерживающие стандартные функции и приходится использовать полифилы (как по мне, частный случай «костылей»).
Это какие такие банки в 2020 требуют ИЕ? Мне кажется лет 5 как вымерли.
Многие. Не скажу о глобальной статистике, но из известных мне — около 85%
Два крупнейших (зелёный и «хочу купить») не требуют.
Решения на основе BSS, которые те самые 85%, тоже давно не требуют именно ИЕ.
в таких организациях очень не любят что-то менять

Ну вот, вот настоящая причина. Вон выше xitt 20 лет назад освоил администрирование ХР, и теперь все его «тысячи-другие бухгалтеров и юристов» должны страдать.
Ну это его проблемы, а речь про разработчиков. Под ИЕ мало просто поставить полифилы, там слишком много всего надо тащить. Вы не можете использовать допустим нативные мультимедиа АПИ напрямую, вы должны брать либу, которая их оборачивает (и тормозит на нормальных браузерах) и тянет флэш для ИЕ. И так куда ни плюнь. А потом всё это нужно тестировать, в том числе в ИЕ. Со своими тысячами бухгалтеров такие как товарищ выше пусть разбираются сами, но почему миллионы разработчиков должны страдать?

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


А так большинство разработчиков поддерживают ИЕ, потому что это входит в условия их работы, они так договорились с работодателем. Уж что-что, а не разу не слышал даже, чтобы поддержка ИЕ появилась в проекте, чтоб пришёл начальник и сказал "ребята, с сегодняшнего дня мы поддерживаем ИЕ" (вернее в третьем тысячелетии ни разу не слышал :) )

Уважаемые читатели! Пользуетесь ли вы полифиллами?

Да, пользуюсь. Давеча было два юзкейса:


  1. <dialog> polyfill (caniuse)
  2. :focus-visible polyfill (caniuse)

Первый уже внедрил на одном проекте, а над вторым как раз подумываю. Какие у вас впечатления по этим полифиллам, если пользовались?


Мне обе фичи очень нравятся: диалоги — своей семантичностью и поддержкой нескольких плюшек (form method=dialog, showModal(), ::backdrop), а :focus-visible — возможностью сделать ненавязчивый focus ring, включающийся только при работе с клавиатуры.

Что касается полифилов. То лучше использовать webpack, который будет компилировать ваш ESNext to ES5. А уже скомпилированный бандл подключать в приложение.

По крайней мере проблему flat и Promise вы бы точно решили.

Просто компиляция в ES5, увы ещё не обеспечивает полифиллы

ИМХО, способ описанный в статье — путь в никуда.
Наиболее адекватное найденное решение на 2019 год — www.npmjs.com/package/webpack-polyfill-injector
Оно конечно не идеально, но на порядок лучше чем искать и подключать необходимые полифиллы ручками из разных источников.
Но в этот плагин же все равно нужно руками вбивать нужные полифиллы? Не использовать ли анализатор кода, который в каждый файл будет сам вставлять полифиллы исходя из того, что в этом файле используется, и затем конкатенировать в отдельный polyfill.js?
Благо на дворе 2020 и такой инструмент есть: browserslist + Can I Use как источник данных, какие технологии поддерживаются в целевых браузерах; @babel/preset-env c useBuiltIns: 'usage' в качестве анализатора кода и инсертера полифиллов; core-js как источник полифиллов; Webpack optimization.splitChunks для вынесения в отдельный кешируемый файл вроде polyfill.somecontenthash.js. Про год шучу, было доступно и раньше.
Этот способ позволяет точно определять необходимые полифиллы для конкретного проекта и соответствует требованиям информационной безопасности. Альтернатива — polyfill.io, внешний скрипт, в который передается вручную набор необходимых фич (например, https://polyfill.io/v3/polyfill.min.js?features=es2017), и их сервер в зависимости от User Agent включит в отдаваемый файл только те полифиллы, которые требуются конкретному браузеру. Так, современным будет отдан с размером менее 1кб, а стареньким — соответствующей возрасту толщиной. Соответственно, как внешний скрипт, на непредсказуемое время может блокировать загрузку страницы и отдавать любой код, крадущий ваши данные (даже доверяя конкретным разработчикам, надо учитывать что и Гугл раз в год бывает взломан). Но многие выбирают именно это решение, да и вообще пользуются опенсорс-пакетами, не валидируют поступающие данные, и… в общем, дело каждого.

В любом случае, думаю что оба решения получше, чем ручной подбор полифиллов (когда я подбирал вручную, ан-нет, а всегда что-то да забывалось, то Date.now забудешь, то .trim(), то Object.assign).

А статья будто из родных 00-х, удивительно сейчас такое читать, как и видеть подобный стиль кода с использованием
// startHere Make some forEach
arr.forEach(function() { someLogic; })
// endHere Make some forEach

Не использовать ли анализатор кода

Не выйдет надежно в силу динамической природы js — можно промахнуться и недоложить полифиллов (ну и я просто не люблю babel — везде использую ts компилятор, даже где просто js).
Задача чуть более реализуема для ts, но готовых инструментов мне не известно.
polyfill.io — накладывает лишнего (webpack-polyfill-injector кстати использует polyfill.io как источник полифиллов).
Несмотря на необходимость ручного подключения, мне как-то легче прописать десяток недостающих функций (пусть и за несколько походов в консоль), чем надеяться на магическую автоподстановку или бороться с желанием порезать лишнее из polyfill.io
Тестировать достаточно всегда только в IE — если в нем нормально заработает — будет работать везде )

Неправда. У IE есть то, что не заработает в других браузерах.

Конечно же речь не про специально написанное для IE.
UFO just landed and posted this here

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

UFO just landed and posted this here
Однажды я работал в одной биллинговой конторе. Не суть имя конторы. Так вот. Софт у них был написан еще в начале 2000-х. Причем фронт был заточен только под IE. Причем, под IE 6-7 версии. На 8-ке уже глючило. Софт не маленький и за эти годы было написанно тонные кода.

Когда я пришел туда, и копнул код. Я был в ужасе. Конечно я пришел с предложением переписать код, как многие до меня. Так как оддерживать сие — боль. Да и о новых фишках можно было и не думать.

И ответ топ менеджмента — Дима, у нас нет бюджета и времени на переписание фронта. Мы не можем выделить команду на полтора два года, для этого. Да и в чем смысл для нас? Клиенты покупают, мы продаем — все овольны. Какой профит принесет переписанный фронт допустим на Реакт?

И если подумать — а профита особо и нет для клиента. Увы.

Так что не все зависит от программистов. У него свои рамки и приходится выкручиваться и саппортить ненависный IE.

Когда менеджмент топит (а топит обычно только менеджмент в случае публичного продукта) за поддержку IE подразумевается, что они считают прибыльность его поддержки, включая репутационный ущерб от отказа поддерживать клиентов, которые иной раз десятилетия лояльны компании.

Сказано красиво, но иной раз кажется что это решение основано не на учете всех факторов, а на обычном "так исторически сложилось, если что-то поменять и оно сломается, кто за это отвечать будет?"


Вот поэтому такая ситуация и есть, ждем пока случится какой-то волшебный скачок, как это вышло в истории про IE6 и Youtube.


P.S. особой сложности добавляет здесь то, что IE11 – это последняя версия браузера вообще. То есть если раньше разговор шел о том, чтобы убрать старые версии из поддержки и оставить только новые, то теперь надо убрать браузер из поддержки целиком. А на это сложнее уговорить.

Может по разному бывает, но на проектах, на которых я работал в последние годы, доля ИЕ мониторится и где-то раз в полгода вопрос о целесообразности дальнейшей поддержки поднимается. В смысле доходит до руководства. Разработчики и QA постоянно поминают IE "добрым, тихим словом".


Я бы не сказал, что сложнее уговорить: аргументы одни и те же у сторон в разговорах, как о том, что дропнуть поддержку 9 и 10, так и 11. Тут скорее оценка вероятности, что клиенты обновятся другая.

Sign up to leave a comment.