Показать сообщение отдельно
  #18 (permalink)  
Старый 06.02.2020, 10:54
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от voraa
Те же Promise были раньше по разному реализованы в библиотеках, прежде чем войти в язык. И всякие forEach, map... тоже были как отдельные библиотеки, прежде, чем стали стандартом API.
Класс Promise, методы forEach, map, filter, reduce и пр. для работы с массивами не «решают какой-то частный случай», они могут быть использованы для широкого круга задач, также они были уже реализованы во многих языках до того, как появились в JS. Такое полезно в любом окружении, включая браузер.

А VDOM — это узкая задача, что именно будет улучшено в ядре? Какой широкий спектр задач удастся решать? Какие примеры реализации в других языках программирования? Непредвзятые ответы «нет», а значит достаточно библиотеки. (Или вы мечтаете, что в ядро однажды будет включен весь NPM-регистр?)

Сообщение от voraa
Мы используем новые возможности новых браузеров, что бы работало быстро. И зачем их пихать в старые браузеры, если они станут работать медленнее из-за их интерпретации, чем если бы мы решали эту задачу по-другому сразу используя возможности только старых браузеров.
Разработчики скорей всего не задумываются, что новые возможности, которые работают хорошо в новых браузерах, начинают работать там же чуть хуже (или совсем хуже и требуют больше памяти, процессорного времени) после преобразования кода в ES3. Однако возможно код ES2020, который работает в современных браузерах не преобразовывать (только минификация), или преобразовать до ES2018 или ES2016, что не так критично. А старым браузерам давать тот самый ES3. Это возможно благодаря атрибуту nomodule у элемента <script>

<script type="module" src="app.js"></script>
<script nomodule src="fallback-app.js"></script>
Поскольку все современные браузеры понимают type="module" и игнорируют скрипты с nomodule, то в них будет загружен app.js. А поскольку старые браузеры игнорируют скрипты с неправильным type и не понимают nomodule, то в них будет загружен fallback-app.js.

Сообщение от voraa
Какие полифилы? Вы о чем? Назовите мне полифил для прокси? Назовите мне полифил для правильного наследования Array?
Какой полифил для css position:sticky; ?
Достаточно широкий круг возможностей доступен в старых браузерах благодаря Polyfill service — https://polyfill.io/v3/url-builder/ Хотя он всё меньше нужен становится.

Если вам в проекте так критически важно «правильное наследование Array», то ведь не сложно добавить одну строчку с __proto__ в объявлении класса (__proto__ широко доступен с 2010–2013 годов) https://caniuse.com/#feat=mdn-javasc...s_object_proto

«Хочу, чтобы всё работало в IE6» выглядит как теоретический бред, который не несёт никакого практического смысла — Proxy работает во всех современных браузерах с 2015–2016 годов — https://caniuse.com/#feat=mdn-javascript_builtins_proxy Этого вполне достаточно, даже если вы обновляете браузер раз в полтора года!

position: sticky; работает с 2014–2017 годов, в основном ничего не ломается, если не поддерживается. Частное решение — position: fixed; Учитывая, что есть @supports, который поддерживается с 2013–2015 годов (https://caniuse.com/#feat=mdn-css_at-rules_supports), вы можете сделать альтернативное представление элемента для любителей старых браузеров!

А все эти ваши борьбы с системами, где по какой-то параноидальной причине запрещено обновить браузер 15-ти летней давности похожи на Специальную Олимпиаду. Сам же Microsoft активно призывает пользователей переезжать на новый Edge. https://www.microsoft.com/en-us/edge

Также может не стоит исключать SSR, но всё зависит от того, что вы делаете. Например, если делаешь что-то с использованием WebGL, как не крути не трансформируй код, и не придумывай фантастические полифилы, а WebGL в первую очередь должен поддерживаться!

Сообщение от voraa
Google Closure Compiler вообще не при чем ту. Он только сжимает существующий код без всяких преобразований, типа заменим эту функцию на две другие. (И то тут столкнулся, что свежий Compiler не справляется с новыми синтаксическими конструкциями Javascript, которые уже реализованы в Хроме)
Может всё зависит от того, с какими аргументами вы его запускаете? В первую очередь он для стандартного JS. Вам нужно съездить в Вавилон для экспериментов.
Ответить с цитированием