<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[jQuery 4.0: ES Modules и отказ от legacy в современной веб-разработке]]></title><description><![CDATA[<p dir="auto">jQuery 4.0 вышел после почти десяти лет ожидания. Эта версия фокусируется на <strong>ES Modules</strong> и убирает устаревший код, делая библиотеку легче и быстрее. Разработчики получат совместимость с современными bundler’ами вроде Vite и Webpack.</p>
<p dir="auto">Переход помогает сократить размер бандла и ускорить загрузку страниц. Старый код на AMD уходит в прошлое, а нативные Promises заменяют Deferred. Это решает проблемы с CSP и упрощает миграцию на модульные workflows.</p>
<h2>ES Modules: новый стандарт импорта</h2>
<p dir="auto">jQuery 4.0 переписан на <strong>ES Modules</strong> вместо AMD. Теперь можно импортировать библиотеку напрямую: <code>import $ from 'jquery'</code>. Это работает в современных bundler’ах и через <code>&lt;script type="module"&gt;</code>. Переход с RequireJS на Rollup сделал сборку эффективнее, с поддержкой tree-shaking.</p>
<p dir="auto">Раньше прямой импорт требовал AMD-loader’ов, что тормозило интеграцию с Vite или Webpack 5. Добавлен exports в package.json для разных окружений. Тесты теперь запускаются отдельно на ESM, ловя модульные баги. Такой подход aligns jQuery с vanilla JS и SSR-фреймворками.</p>
<ul>
<li><strong>Прямая совместимость</strong>: Vite, Rollup, Webpack 5 обрабатывают jQuery как стандартный модуль.</li>
<li><em>Tree-shaking</em>: Удаляются неиспользуемые части, снижая размер бандла на тысячи байт.</li>
<li><strong>Глобальный fallback</strong>: Основной файл остается UMD для legacy-кода.</li>
<li>Поддержка <code>&lt;script type="module"&gt;</code> без bundler’а в браузере.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Старый способ (AMD)</th>
<th>Новый способ (ES Modules)</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>require(['jquery'], ...)</code></td>
<td><code>import $ from 'jquery'</code></td>
</tr>
<tr>
<td>RequireJS обязателен</td>
<td>Работает с Rollup/Vite</td>
</tr>
<tr>
<td>Нет tree-shaking</td>
<td>Полная оптимизация</td>
</tr>
<tr>
<td>Проблемы с CSP</td>
<td>Нативная поддержка</td>
</tr>
</tbody>
</table>
<h2>Отказ от legacy: что удалили и зачем</h2>
<p dir="auto">В jQuery 4.0 убрали deprecated API вроде <code>jQuery.isArray</code>, <code>parseJSON</code>, <code>trim</code> и <code>now</code>. Браузеры давно имеют нативные аналоги: <code>Array.isArray()</code>, <code>JSON.parse()</code>, <code>String.prototype.trim()</code>, <code>Date.now()</code>. Это сэкономило بیش 3000 байт в gzipped-версии.</p>
<p dir="auto">Slim-билд стал 19.5KB, исключив Deferred, Callbacks и Queue. Нативные <strong>Promises</strong> покрывают большинство случаев, кроме IE11. Ajax-изменения: нет авто-JSONP, скрипты не выполняются без <code>dataType: "script"</code>, все async-запросы через script-теги. Это фиксит CSP-violations.</p>
<ul>
<li><strong>Удаленные утилиты</strong>:
<ul>
<li><code>jQuery.isArray</code> → <code>Array.isArray()</code></li>
<li><code>jQuery.trim</code> → <code>str.trim()</code></li>
</ul>
</li>
<li><em>Event order</em>: blur → focusout → focus → focusin по W3C.</li>
<li><strong>Trusted Types</strong>: Поддержка для манипуляций HTML, безопасно для CSP.</li>
<li>Убраны internal методы вроде <code>push</code>, <code>sort</code> на прототипах.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Функция</th>
<th>Замена</th>
<th>Экономия</th>
</tr>
</thead>
<tbody>
<tr>
<td>Deferred</td>
<td>native Promise</td>
<td>12KB в slim</td>
</tr>
<tr>
<td>parseJSON</td>
<td>JSON.parse()</td>
<td>3KB+</td>
</tr>
<tr>
<td>AMD source</td>
<td>ES Modules</td>
<td>Совместимость</td>
</tr>
</tbody>
</table>
<h2>Ключевые breaking changes и миграция</h2>
<p dir="auto"><strong>Ajax-изменения</strong> ломают старый код: JSON не промоутится в JSONP, скрипты требуют явного dataType. Script-теги для всех async, избегая CSP-блоков. Attributes: убрали <code>toggleClass(Boolean)</code> сигнатуру. Core: slim без callbacks/deferred.</p>
<p dir="auto">Event.special больше не наследует Object.prototype, фиксит прототипные pollution. Manipulation: Trusted Types и DOMParser вместо implementation. Selector: backport логики контекста. Для legacy-плагинов expose глобально: <code>window.jQuery = $</code>.</p>
<ul>
<li><strong>Шаги миграции</strong>:
<ol>
<li>Проверьте deprecated API в upgrade guide.</li>
<li>Замените Deferred на async/await.</li>
<li>Тестируйте Ajax на CSP.</li>
</ol>
</li>
<li><em>Focus events</em>: Используйте <code>focusin</code>/<code>focusout</code> для timing.</li>
<li>Обновите bundler до Webpack 5+.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Проблема</th>
<th>Решение</th>
</tr>
</thead>
<tbody>
<tr>
<td>AMD loaders</td>
<td>Перейти на ESM</td>
</tr>
<tr>
<td>Deferred</td>
<td>Promise + polyfill для IE</td>
</tr>
<tr>
<td>CSP blocks</td>
<td>Script tags everywhere</td>
</tr>
<tr>
<td>Bundle size</td>
<td>Slim build 19.5KB</td>
</tr>
</tbody>
</table>
<h2>jQuery 4.0 в реальных проектах</h2>
<p dir="auto">Библиотека ускорила дашборды: виджет-дерево грузится за 500мс. Модалки с AI-генерацией контента стали легче. Preview AI-видео с slim-билдом сэкономил 12KB. Совместимость с modern workflows упрощает SaaS-разработку.</p>
<p dir="auto">Нативная Promise-интеграция идеальна для async/await в маркетинговых агентах. Event-order по W3C фиксит кросс-браузерные quirks. Array.flat() где поддерживается, ускоряет обработку. Осталось протестировать edge-кейсы с Trusted Types и подумать о полифиллах для редких сценариев.</p>
]]></description><link>https://forum.exlends.ru/topic/1071/jquery-4.0-es-modules-i-otkaz-ot-legacy-v-sovremennoj-veb-razrabotke</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:12:47 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1071.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Mar 2026 13:27:47 GMT</pubDate><ttl>60</ttl></channel></rss>