Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
убийца jQuery
может понадобиться полифил Fetch API
может понадобиться полифил DOM4
может понадобиться полифилл Web Animations APIОткуда вы такие берётесь?
метод matches стал кроссбраузернымВы называете кроссбраузерными методы, работающие в Android-браузере и IE только через префиксы? Серьёзно?
Да, для поддержки старых Internet Explorer и Webkit-based мобильных браузеров вам придется подключить полифилыТо есть обязательно.
Internet Explorer, с недавних пор, ведет себя хорошо <…> обещая в скором времени отказаться от поддержки всех версий до 11Это вы про браузер с 6 режимами эмуляции, который не пишет в юзер-агенте свою версию?
люди покупают новые айфоны с обновленным сафариОчень мило. Осталось рассказать об этом прочим пользователям
1. легче чем jquery?Зависит от пдерживаемых браузеров.
2. удобней чем jquery?Это холиварный вопрос. Для меня — да.
3. функциональней чем jquery?Да.
Представьте себе что вам советуют вместо одного инструмента использовать 6? Неужели это удобней?Да. В качестве параллели могу пивести PostCSS. В в нем нет ничего, нужно юзать плагины а свой вкус. В SASS есть всё. Но всё больше людей используют PostCSS (в том числе и я). Да и полифилы вряд ли можно назвать инструментами. Скорее, это — костыли для старых браузеров.
Вы забыли описать самое главное — какие преимущества?Какие преимущества нативного DOM? Окей.
Да, для поддержки старых Internet Explorer и Webkit-based мобильных браузеров вам придется подключить полифилы
То есть обязательно
а) оно далеко не всегда есть
б) даже если оно есть, это недостаточная причина, чтобы полностью забить на сайт
1) Есть другая статистика, который тоже на первых строчках в гугле по запросу «browser statistic»: www.w3schools.com/browsers/browsers_explorer.asp

издержки растут очень сильно
доля браузера пренебрежимо мала
рассуждения типа +6% издержек уже могут перекрыть -5% посетителей — так вот это недостаточноКому недостаточно? Вам? Вы отвечаете за издержки проекта и его окупаемость?
Такие проекты есть, но они скорее исключение.
Вы называете кроссбраузерными методы, работающие в Android-браузере и IE только через префиксы? Серьёзно?
Element.prototype.matches = Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.msMatchesSelector;
То есть обязательно.
Это вы про браузер с 6 режимами эмуляции, который не пишет в юзер-агенте свою версию?
Вы предлагаете вместо старой проверенной и надёжной jQuery, которая умеет почти всё, что вообще может придти в голову, использовать библиотеку с 4 методами и 3 (три) полифила для неё.
Да, действительно. Вот вам решение:Отлично. Больше странного кода для бога странного кода. Хотя нет, для этого лучше сделать ещё один полифилл. Хотя нет, лучше не делать полифиллы, не писать странный код, а пользоваться jQuery — стандартом де факто.
Зависит от задачи. Если нужно поддерживать старые ослы, то будьте добры подключить полифилы. Это не сложнее чем подключение библиотеки.Если мы говорим про веб-разработку, то поддерживать надо всё, что поддерживается в пределах бюджета. И использование jQuery улучшает этот процесс.
Если вы пишете проект с долгосрочной поддержкой, полифилы в будущем можно удалить, а от библиотеки избавиться не получится, не переписывая код.Согласен с вами. В теории (идеальном мире). На практике такого почти никогда не происходит — всё равно приходится переписывать.
Я предлагаю функцию с нулём методов, которую можно использовать с полифилами, если того требует ваша задачаВы предлагает код, который почти ничего не делает и предлагаете его расширять нужными полифилами. И в чём разница с использованием jQuery с кастомными плагинами?
Цель поста — не навязать кому-то мою разработку, а призвать пользователей юзать DOM API вместо библиотекDOM API — чудесно, но неюзабельно в реальных проектах без полифилов. А с полифилами выгода от переключения на него весьма сомнительна.
DOM API тоже умеет воти всё, что вообще может прийти в голову и даже больше. Буду капитаном, но его используют разработчики библиотек, в том числе, разработчики jQuery.Иначе говоря, «это уже было в Симпсонах» — он уже используется в jQuery и преимущество от его использования уже есть и ваша библиотека не нужна.
Какие у jQuery преимущества перед bala.js в области применения последнейДопустим (я в это не верю, но допустим что так бывает), у вас действительно нет потребности ни в чём, кроме выборки DOM-элементов. Тогда вы правы — специализированная библиотека (например, bala.js) справится с этой задачей лучше. Более того, это Unix-way.
$('.xyz').append('<xyz />')
[].forEach.call(
document.querySelectorAll('.xyz'),
function (node) {
node.insertAdjacentHTML('beforeend', '<xyz />');
}
);
И совершенно сразу пропадает желание вручную писать
for(let node of $('.xyz')) {
node.insertAdjacentHTML('beforeend', '<xyz />');
}
напишем реализацию абсолютно аналогичную оной из jQuery
Array
.from(document.querySelectorAll('.xyz'))
.forEach(node =>
node.insertAdjacentHTML('beforeend', '<xyz />')
);
Even though the method is invoked on an element, selectors are still evaluated in the context of the entire document.
element.querySelector()
всё делает фреймвёркДа, в основном потому что jQuery встроен почти во все фреймворки.
XMLHttpRequest аналоги $.ajax, сахаром для работы с DOM, Promises. Я считаю утверждение «jQuery встроен почти во все фреймворки» спорным, потому как почти каждый современный популярный фреймверк не тянет jQuery с собой и не зависит от этой библиотеки.jQuery не встроен, например в AngularВ Ангуляр встроен jQlite — тот же jQuery, но без дублируемых ангуляром функций.
Факт первый — рынок фронт-енд разработки, и в мире, и везде, завязан на энтерпрайз.
До появления SPA-фреймворков наличие в этом легаси коде jQuery мне кажется вам сложно будет оспорить — он был везде
и у него в жестких зависимостях jQuery.
Я называю завязкой на энтерпрайз завязку на энтерпрайз. UI для крупных корпоративных приложений, если не понятно.
Постепенно занял лидирующие позиции? В какой реальности? Prototype не был ему равным конкурентом никогда, он всегда имел гораздо меньший процент использования, не надо сочинять.
человек, изучавший популярнейшие в мире фреймворки для SPA сталкивался с jQuery и соответствнно знаком с его API на уровне вещей описанных в статье.
По вашей личной статистике — вполне может быть и так. Судя по вашим комментариям, если вы верстальщиков считаете фронт-энд разработчиками, невысокого уровня специалист.
Чем еще померяемся?
А вы не много на себя берете, начиная разговор с пассажа про UI/UX, считающих, что жуквери это и есть JS?
Я привел аргументацию
нихрена ты, дорогой, и не знал.
Я занимаюсь версткой
Если бы я прийдя на проект увидел, что тут используется такое, был бы крайне недоволен.
Мне не понятно, как можно «поносить» человека, который пытается что-то делать.С моей точки зрения автор не «пытается что-то делать», а замусоривает информационное пространство очередной невероятной библиотекой, единственным плюсом которой является фатальный недостаток других библиотек. Это не «что-то делать», а явный вред.
функция дожата до 377 символов
(typeof s)[7]
typeof s == 'function', движки не оптимизируют этот случай. Год-другой и будет доступны, например, SIMD и типизированые объекты со своим результатом typeof длиннее 7 букв.Может уж лучше потратить лишнюю сотню-другую символов и сделать функцию легко читаемой,Идея в том, чтоб сжать функцию настолько сильно, насколько это возможно, в ущерб читаемости (как в js1k). Для остального есть jQuery-подобные крупные библиотеки или возможность форка для тех, кому очень надо.
быстройА что со скоростью не так? Напротив, применяется как можно меньше операторов и методов.
и без потенциальных проблем?
Год-другой и будет доступны, например, SIMD и типизированые объекты со своим результатом typeof длиннее 7 букв.
Идея в том, чтоб сжать функцию настолько сильно, насколько это возможно, в ущерб читаемости (как в js1k).
А что со скоростью не так? Напротив, применяется как можно меньше операторов и методов.
Какие потенциальные проблемы вы можете встретить сейчас? Я не представляю, кто может догадаться передать SIMD тип в эту функцию.
SIMD это только пример. Других проблем хватает. Например, для данного примера с typeof я ну упомянул о не array-like строках в ES3, хотя, думаю, на ES3 движки, даже с полифилами, код и не ориентирован :) В любом случае, это только 13 символов из 377.как только SIMD появится в стабильной ветке хотя бы в одном браузере, этот момент будет учтен.
typeof s == 'function'.На уже упомянутом простеньком примере.На jsperf не люблю ориентироваться. Лучше бенчмаркать такие вещи в консоли:
window.it = [];
window.x = false;
console.time('xxx');
for(var i=0; i < 1e6; i++) {
x = typeof it == 'function';
}
console.timeEnd('xxx');
console.time('yyy');
for(var i=0; i < 1e6; i++) {
x = (typeof it)[7];
}
console.timeEnd('yyy');
typeof. А вообще — с одного typeof толку мало :)

evalите.window.it = [];
window.x = false;
console.time('xxx');
for(var i=0; i < 1e6; i++) {
x = typeof it == 'function';
}
console.timeEnd('xxx');
console.time('yyy');
for(var i=0; i < 1e6; i++) {
x = (typeof it)[7];
}
console.timeEnd('yyy');
console.time('zzz');
for(var i=0; i < 1e6; i++) {
}
console.timeEnd('zzz');
bala.js — убийца jQuery в менее чем 400 символах кода *