Ростислав Чебыкин

Порождение недосамоучки

Почему мне не нравится jQuery

Взглянули гости на пейзаж
И прошептали: «Ералаш!»

Сергей Михалков. Слон-живописец

Я считаю, что jQuery — это прекрасный инструмент… для чернового прототипирования. То есть, если мы хотим примерно представить себе, как на веб-странице будет выглядеть раздвигающийся блок,— можно не городить полноценный код, а быстренько вставить animate() и посмотреть.

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

jQuery напоминает картину из басни Сергея Михалкова «Слон-живописец». Тут тебе и свой собственный Selectors API, и своя собственная событийная модель, и свой Ajax, и свои Transitions, и DOM API, и Traversal, и ещё куча всего самобытного и самопального.

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

Раньше существование jQuery можно было оправдать тем, что эта библиотека добавляла много вкусных возможностей в старые браузеры (вроде IE 6), где без них совсем тоскливо. Но теперь, с одной стороны, эти браузеры уже ушли в историю. А, с другой стороны, сама jQuery с версии 2.0 отказалась от поддержки древних браузеров, так что смысл её существования совсем теряется.

Если я буду перечислять все недостатки jQuery, у меня получится простыня длиннее, чем у покемона про PHP. Назову только один эпизод, после которого я точно понял, что не буду использовать jQuery, кроме как для черновых прототипов:

$('что-нибудь:even') означает все нечётные элементы из соответствующего набора. То есть первый, третий, пятый и так далее. О как: «even» — нечётные. При этом $('что-нибудь:odd') — наоборот, чётные. Представляете — в jQuery чёрное значит белое, а белое значит чёрное.

Это было бы полбеды, но почти такое же выражение $('что-нибудь:nth-child(even)') при этом выбирает чётные элементы (второй, четвёртый, шестой и так далее), а $('что-нибудь:nth-child(odd)') — нечётные.

Для тех, кто сразу не понял: одно и то же слово «even» в очень похожих контекстах обозначает прямо противоположные вещи. И со словом «odd» — та же фигня. Это как если бы в математике выражение «2 + 2» обозначало бы то «сложить два и два», то «вычесть два из двух». Или если бы вам приходилось одну и ту же свою руку называть то левой, то правой в зависимости от каких-то эзотерических обстоятельств.

JavaScript и технологии клиентского веб-программирования (DOM и прочие браузерные API) — это всё само по себе тёмный лес с бабами-ягами, оно сложное, исторически хитрозапутанное, кривое, громоздкое и неконсистентное. Фреймворки хороши тогда, когда они уменьшают кривизну и неконсистентность, а не наоборот.

Недавно я придумал слово «недосамоучка» и не знал, куда его применить. Теперь знаю — это Джон Резиг, автор jQuery.