Jquery может оказаться вредным

Нам постоянно хотелось написать пост из серии ” N может оказаться вредным”

Но, перед тем как мы начнем собственные рассуждения, хотелось бы уточнить, мы считаем, что JQuery внес огромнейший вклад в развитие веба. Он предоставил разработчикам возможность делать такие вещи, о которых раньше не было возможности кроме того помыслить, и подтолкнул создателей браузеров реализовывать их (если бы не было JQuery, нам было нужно обходиться без document.querySelectorAll ). Но сейчас JQuery прошлому нужен лишь тем, кто неимеетвозможности пользоваться новыми продуктам, и тем, кому приходиться трудиться с “реликвиями”, наподобие IE8 либо с чем похуже.

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

Вы вероятно полагаете, что в научном сообществе принято пользоваться современными веб-новинками. Но, именно там JQuery особенно популярен. Из-за чего?

Вследствие того что научное сообщество с ним знакомо, и возможно им некогда либо заинтересованности смотреть за новинками.Jquery может оказаться вредным Они не знают для чего нужен JQuery и просто продолжают им пользоваться.
Не смотря на то, что, это кроме того не самые главные обстоятельства, по которым я стараюсь избегать JQuery.

Да, вероятно вам он вправду не очень-то и нужен…но это кроме того не самая основная обстоятельство, дабы не применять этот фреймворк.

Дабы избежать распространения нативных элементов-прототипов, JQuery применяет собственные враперы. Раньше распространение нативных объектов не осуществлялось, не столько из-за вероятных коллизий, сколько из-за вероятной утечки памяти в ветхих предположениях IE. Исходя из этого, то, что вы приобретаете, в то время, когда прописываете $ (“div”), это не ссылка на элемент, либо на NodeList, это объект JQuery. Последнее свидетельствует, что объект JQuery располагает иными способами,чем ссылки на элемент DOM, массивы либо любой тип NodeList.

Однако, нативные объекты появляются в коде – а также не обращая внимания на то, что JQuery пробует их избегать, вам нужно с ними сталкиваться, даже в том случае, если, вы “обернете” указанные объекты в $ (). К примеру, в случае если функция вызывается посредством .bind () , это отсылка к элементу HTML, а не к библиотеке JQuery. Не говоря уже о том, что довольно часто употребляется код из различных источников – кое-какие из них взаимодействуют с JQuery, а другие нет.

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

В случае если разработчик следовал соглашению о краже имен, в соответствии с которым переменные, которые содержат объекты JQuery (перед именем таких переменных ставится символ американского доллара), и каковые содержат нативные элементы, то это приведёт к меньшему количеству неприятностей (люди довольно часто забывают направляться подобным соглашениям, но давайте предположим, что мы живем в совершенном мире).

Но как правило данное соглашение не соблюдается, исходя из этого в следствии код осознать фактически нереально, в особенности тем, кто видит его в первый раз. Каждое последующе редактирование влечет за собой множество ошибок и проб (“О, это не объект JQuery, мне необходимо обернуть его в $ ()” либо “О, это не элемент, мне необходимо применять [0], для получения элемента”).

Дабы избежать аналогичной путаницы, разработчики довольно часто решают проблему, оборачивая что-либо в $ (), и так эта переменная будет проходить через $ () огромное количество раз. Так что, по сути, вы попадаете в собственную ловушку.

Кроме того в случае если соглашение о краже имен соблюдается, вы не имеете возможность трудиться лишь с объектами JQuery. Вам довольно часто нужно будет использовать нативный DOM либо приводить к функции из скрипта, что не зависит от JQuery. И так, необходимость конвертирования “из” и “в” объекты JQuery, легко напросто сделает ваш код громоздким.

Помимо этого, в то время, когда вы додаёте код к определенной кодовой базе вам приходить оборачивать любой элемент либо ссылку нодлиста посредством $ (), и это при том, что вы кроме того не понимаете каков будет итог аналогичных действий. Так, не только вы попадаете в эту “ловушку”, но и целый ваш будущий код.

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

Прагматичный путь к применению JS

Само собой разумеется, многим библиотекам сейчас нужен JQuery, и, как я сравнительно не так давно писала, в случае если вам удастся его избежать, то вы почувствуете себя диджитал-веганом. Однако, это не свидетельствует, что вам все же нужно будет использовать JQuery. Библиотеки смогут изменяться, по мере появления хороших и дешёвых альтернатив.

Помимо этого, большая часть библиотек написаны так, что им не требуются $ переменная, дабы ссылаться на JQuery. Легко установите jQuery.noConflict (), дабы вернуть переменную $ и иметь возможность назначать ее в том месте, где вы посчитаете нужным. К примеру, я довольно часто устанавливаю эти вспомогательные функции, вдохновившись командной строчком API:

// Returns first element that matches CSS selector {expr}. // Querying can optionally be restricted to {container} s descendants function $(expr, container) { return typeof expr === string? (container || document).querySelector(expr) : expr || null; } // Returns all elements that match CSS selector {expr} as an array. // Querying can optionally be restricted to {container} s descendants function $$(expr, container) { return [].slice.call((container || document).querySelectorAll(expr)); }

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

Кроме этого, в случае если вам весьма нравится JQuery API, но вы не желаете загромождать код, разглядите возможность применения Zepto.

Высоких конверсий!

Случайные статьи:

Жила-была Царевна — Все серии подряд — Самый большой сборник (8 серий + песенка)


Подборка похожих статей:

riasevastopol