(Опубликовано на сайте разработчиков 9 августа 2012)
Август стал немного жарче из-за того что зарелизилась библиотека JQuery 1.8! Вы можете брать код из CDN на сайте JQuery:
code.jquery.com/jquery-1.8.0.min.js (миинфицированный и сжатый код — для рабочих версий сайтов)
code.jquery.com/jquery-1.8.0.js (несжатая библиотека, для отладки)
Как обычно, Google и Microsoft CDNs будут тоже раздавать эти файлы (не спрашивайте нас, когда — мы не знаем!). Если очень хочется, воспользуйтесь нашей копией из JQuery CDN.
Мы не ожидаем получать от вас сообщения об ошибках на релизе, так как было несколько бета-версий и релиз-кандидат; имелось много возможностей для тщательного тестирования (ха-ха, шутка). Мы знаем, что слишком многие из вас ждали финального релиза. Так что теперь нет никаких оснований ждать, и вы можете узнать, нет ли ошибок, о которых сообщалось ранее в багрепортах.
Если вы найдёте ошибку, пожалуйста, создайте тест на jsFiddle или jsbin и отправьте отчет об ошибке в наш багтрекер. Если вы не уверены, что нашли ошибку — приглаашаем на наш форум. Ядро JQuery 1.8.0 совместимо с последними версиями JQuery UI (1.8.22) и JQuery Mobile (1.1.1). Не забудьте обновить их, если вы сообщаете ошибки на страницах, которые связаны с ними.
Быстрый обзор JQuery 1.8
Перечислим большие изменения в этом релизе:
Рефакторинг Sizzle. селекторы в JQuery стали ещё быстрее благодаря переписыванию кода Тимми Виллисоном (в действительности два автора). Конечно, большинство браузеров имеют querySelectorAll, но почти каждая реализация кое-где отстает по скорости и имеет кроссбраузерные особенности. Sizzle спрямляет дорогу для вас. К тому же, вы можете пользоваться селекторами типа :has() со сложным селектором или :contains(). Ах да, IE6/7 всё ещё поддерживаются.
Перерисована анимация. Со временем код анимации в JQuery стал грязноватым. Кори Франг (Corey Frang) с головой погрузился в это болото и прикончил почти всех аллигаторов, ну, то есть ошибок. Большинство изменений не очевидны, интерфейс не затрагивают, поэтому прежние анимации должны работать (и работать лучше). Но есть и некоторые отличные доработки, делающие анимацию мощнее и расширяемее. Одна из заметных и полезных функций — использование progress callbacks в Promises. Мы все еще работаем над подробной документацией, но у нас есть предварительный проект: gist.github.com/54829d408993526fe475. И пример нового кода в действии: jsbin.com/odocid/1/edit.
Автоматическая префиксация CSS. При использовании свойства CSS, либо .css() или .animate(), мы делаем правильный префикс стилям (при необходимости) для браузера. Например, возьмем .css(«user-select», «none»). В Chrome / Safari установим значение "-webkit-user-select", в Firefox — "-moz-user-select", а ИЕ10 будет использовать "-ms-user-select".
Более гибкий $(HTML, свойства). В JQuery 1.8 вы можете использовать любой метод или плагин для объектов из $(html, props). Раньше дпускался краткий список методов, и не было его документирования. Теперь такой список не нужен! Но имейте в виду, что это может привести к другому поведению вашего кода, если плагин будет добавлен позже и имеет то же имя, что и атрибуты HTML.
Закрыто более 160 багов. в частности, переписывание Sizzle и анимаций дало толчок к исправлению нескольких старых ошибок, некоторым из которых уже 2-3 года. Майк Шеров (Mike Sherov) решил большинство ошибок CSS и позиционирования и свёл их почти к нулю. Кроме того, мы не отказались от своей линии устранения раздражающих различий между IE 6/7/8 и современными браузерами, так что вам не придется иметь дело с ними.
Меньший объём кода. Несмотря на все рефакторинги, новые функции и устранения ошибок, сжатый файл JQuery 1.8 стал на несколько сот байт меньше, чем в версии 1.7.2. Сокращение размера не было самоцелью в этой версии, но мы чувствовали, что важно следить за ростом объёма кода, и это дало плоды. Большое спасибо Ричарду Гибсону, контролирующему размер кода по всему проекту.
Модульность: Если вы хорошо знаете JQuery-зависимости своего проекта, то можно использовать новую grunt-систему, чтобы вырезать часть JQuery, которая точно не понадобится. То, что мы сделали сейчас на 1.8 — в действительности, только начало; вы увидите еще больше гибкости, когда мы перейдем к следующим версиям.
Полный список изменений приведён ниже, для случая, если вам будет интересно устранена ли ваша любимая ошибка.
Что было удалено
Короткий ответ: «очень мало». Мы хотели бы предоставить удлинить период уведомлений об устаревших функциях, которые будут удалены в 1.9, чтобы дать время для адаптации кода. Некоторые из вещей, удаленных в 1.8 — недокументированные внутренние функции, которые некоторыми успешно использовались через реверс-инжиниринг, но это всегда рискованно — использовать недокументированные функции. Вот что удалено:
$(element).data(“events”). В версии 1.6 JQuery стала отделять свои внутренние данные от данных пользователя, для предотвращения конфликта имен. Тем не менее, некоторые люди используют недокументированные внутренние «события» структуры данных, поэтому мы давали возможность всё ещё получать их, через .data(). Это сейчас отменяется в 1.8, но вы все еще можете получить данные к событиям для отладки с помощью $._data(element, «events»). Заметим, что это не поддерживается открытым интерфейсом — фактическая структура данных может быть несовместимой от версии к версии.
Deferred.isResolved() и Deferred.isRejected(). Вызывать N-1 методов, возвращающих Boolean, чтобы получить состояние N-й переменной становилось немного глупо, поэтому мы добавили Deferred.state() в JQuery 1.7, чтобы сказать вам состояние за один вызов. Таким образом, эти два старых метода больше не нужны. Это намного удобнее для отладки сценариев, в которых часто хотят знать состояние Deferred в виде строки.
$(element).closest(Array), возвращающий Array. Это было странной особенностью метода .closest(), нужной для устаревшего .live(), но не используется другим кодом, насколько мы знаем. Сейчас, как и везде, .closest() будет возвращать объект JQuery.
$.CurCSS. Этот метод был просто псевдонимом для jQuery.css(), начиная с JQuery 1.3. Хотя свойство никогда не было частью документации API, некоторые его использовали. Теперь его больше нет.
$.AttrFn: Еще одно недокументированное свойство, используется для определения, какие методы могут быть использованы в сочетании с $(html, props). Хотя это не работает в JQuery 1.8, мы оставляем пустыми $.attrFn в JQuery, чтобы избежать ошибок в коде, который его использует. Внимание: Это будет полностью удалено в JQuery 1.9, поэтому обновляйте свой код!
Участники
Этот релиз не мог произойти без напряженной работы талантливой команды Основные участники разработки JQuery: Джулиан Aubourg (jaubourg), Кори Frang (gnarf), Ричард Гибсон (gibson042), Майк Шеров (mikesherov), Рик Уолдрон (rwaldron), и Тимми Willison (timmywil).
Журнал изменений: blog.jquery.com/2012/08/09/jquery-1-8-released/
Автор: spmbt