<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Vue</title>
    <description/>
    <link>https://tproger.ru/tag/vue</link>
    <atom:link href="https://tproger.ru/tag/vue/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 06 Oct 2026 17:09:10 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Vue</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Vue без Node: как Julia Evans тестирует компоненты в браузере</title>
      <link>https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere</link>
      <comments>https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere</guid>
      <description><![CDATA[<p>Julia Evans показывает, как тестировать Vue-компоненты прямо в браузере без Node, Deno и сборки. QUnit, mountComponent, waitFor — полный перевод поста.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere">Vue без Node: как Julia Evans тестирует компоненты в браузере</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 07 May 2026 14:30:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если у вас pet-проект на Vue, в котором вы боитесь что-то менять, потому что без билда и без тестов любое изменение похоже на лотерею, — рабочий способ обойтись без Node, Deno и сборщика всё-таки есть. Julia Evans (автор «Wizard Zines» и блога jvns.ca) описала минимальный рецепт в посте от 2 мая 2026: компоненты кладутся в window._components, функция mountComponent рендерит их в скрытый div, тесты QUnit запускаются прямо со страницы. Это перевод поста.</p><p>Заметка короткая и практическая. Сначала — краткий вывод, потом полный текст Julia.</p><ul><li><b>Что в посте:</b> рабочий минимум для тестирования Vue-компонентов в браузере без Node, Deno и сборки. Тесты запускаются на отдельной странице через QUnit (тестовый фреймворк, который рендерится прямо в браузере), компоненты экспортируются в window._components, рендерятся через mountComponent в скрытый div вне viewport.</li><li><b>Как ждать DOM:</b> Julia пишет свою функцию waitFor(), которая раз в 20 мс проверяет условие и сдаётся через 2 секунды. Без sleep()-затычек, обычным опросом DOM — паттерн, к которому рано или поздно приходит любая фронтенд-команда.</li><li><b>Заполнение форм требует событий:</b> в Vue недостаточно присвоить value или checked — нужно диспатчить событие (input для текстов, change для чекбоксов), иначе реактивность Vue не отслеживает изменение.</li><li><b>Test coverage — Chrome это умеет из коробки:</b> панель Coverage показывает покрытие JS и CSS-кода. Чтобы хорошо работало, Julia рекомендует выключить sourcemaps в DevTools и смотреть покрытие по бандлу.</li><li><b>Открытые вопросы:</b> как запускать те же тесты в CI, как уйти от привязки к CSS-классам в селекторах (правильнее — getByRole или data-testid), и стоит ли переехать на Testing Library/Vue Test Utils.</li></ul><h2>Контекст: я хочу тестировать без Node</h2><p>Привет! Один из моих долгосрочных проектов — выяснить, как писать frontend-JavaScript без Node и любого другого серверного JS-рантайма.</p><p>Главная проблема, в которую я постоянно упираюсь в своих frontend-проектах: я не знаю, как писать для них тесты. Раньше я пробовала Playwright, но он казался медленным и неуклюжим — всё время приходилось запускать новые browser-процессы, и оркестрация требовала Node-кода.</p><p>В итоге я просто не тестирую свой frontend, и это неприятно. Обычно я и не обновляю проекты особо часто, поэтому болезненность не сильно проявляется, но было бы хорошо вносить изменения с большей уверенностью!</p><p>Так что подходящий способ frontend-тестирования давно лежит у меня в списке желаний.</p><h3>Идея: просто запускать тесты во вкладке браузера</h3><p>Alex Chan когда-то написал отличный пост — «Testing JavaScript without a (third-party) framework» — в ответ на одну из моих предыдущих заметок этой серии. Там он показал, как сделать крошечный фреймворк юнит-тестирования, который запускается прямо со страницы в браузере.</p><p>Мне тогда очень понравился подход, но в посте речь шла только про unit-тесты, а мне нужны были end-to-end интеграционные тесты для моих Vue-компонентов, и я не знала, как это сделать.</p><p>Поэтому, когда на днях знакомый Marco в разговоре сказал «знаешь, ты же можешь просто запускать тесты Vue-компонентов в браузере», я подумала: «эй, надо попробовать ещё раз!»</p><p>Я всё это сделала только вчера, так что наверняка многое можно улучшить, — но хочу записать пару наблюдений по ходу дела, пока не забыла.</p><p>Это было слегка непросто: документация Vue обычно предполагает, что вы используете Node как часть build-процесса (там много «шаг 1: npm install ЧТО-ТО»), а я не хотела использовать Node, Deno и так далее. Но на практике оказалось не очень сложно.</p><p>Проект, который я буду здесь тестировать, — это <a href="https://jvns.ca/blog/2024/06/24/zine-feedback-site/" rel="noopener">сайт фидбэка по моим зинам</a>, который я написала в 2023.</p><h3>Тестовый фреймворк: QUnit</h3><p>Я использовала QUnit — тестовый фреймворк для JavaScript, который умеет запускаться прямо со страницы в браузере без Node-окружения (когда-то именно его использовала команда jQuery). Он отлично работает, но рассказать про его внутреннее устройство мне особо нечего — поэтому ограничусь этим. Думаю, подход Alex с самописным фреймворком тоже сработал бы. Я следовала <a href="https://qunitjs.com/intro/" rel="noopener">официальной инструкции</a>.</p><p>Что я оценила в QUnit — кнопка «rerun test», которая запускает только один конкретный тест. У меня в тестах много network requests, поэтому возможность запустить только один тест сильно облегчает дебаг.</p><h3>Шаг 1: подготовить компонент к тестированию</h3><p>Первое, что я сделала — настроила свои Vue-компоненты для тестового окружения.</p><p>В основном приложении я положила все компоненты в window._components, примерно так:</p><p>Затем смогла написать функцию mountComponent, которая делает то же самое, что мой обычный mount-код в production (рендерит крошечный шаблон с нужным компонентом).</p><p>Отличия только два:</p><ul><li>Можно опционально передать дополнительные данные, чтобы использовать их как props.</li><li>Компонент монтируется во временный невидимый div, который удаляется из DOM по завершении теста. Div позиционирован за пределами viewport (position: absolute; top: -10000, ...), так что его не видно.</li></ul><p>Вот как выглядит вызов mountComponent:</p><p>А вот её код. Здесь qunit-fixture — это служебный div, который QUnit добавляет в тестовую страницу и автоматически очищает после каждого теста (его id зашит в QUnit, нужно только положить &lt;div id="qunit-fixture"&gt;&lt;/div&gt; в HTML тестовой страницы):</p><p>Результат — div, в котором можно программно кликать, заполнять формы, проверять, что появился нужный контент, и так далее. (Примечание переводчика: в оригинальной версии у Julia функция возвращала просто div, но дальше во всех вызовах используется const {div} = mountComponent(...). С return div такая деструктуризация даст undefined — поэтому мы поправили на return {div}. И добавили явный app.mount(div), который тоже опущен в оригинале.)</p><h3>Шаг 2: добавить fixture-данные</h3><p>Поскольку я писала end-to-end интеграционные тесты, в которых клиентский JS должен работать в связке с сервером, в БД нужны были тестовые данные. Я написала ~25 строк SQL для подготовки тестовых данных и добавила endpoint в dev-сервер, который запускает этот SQL и сбрасывает тестовые данные в известное состояние.</p><p>Затем просто вызываю await reset() в начале каждого теста, которому нужны тестовые данные.</p><p>Моя reset() на самом деле не всегда полностью сбрасывает всё — не очень хорошо, но для старта рабочий вариант, и его всегда можно улучшить.</p><h3>Шаг 3: базовый тест</h3><p>Так выглядит базовый тест! По сути мы рендерим div и проверяем, что в нём есть приблизительно правильные данные.</p><p>Это все базовые кирпичики! А теперь — несколько проблем, на которые я наткнулась по ходу.</p><h2>Как ждать рендера: проблема и waitFor()</h2><p>В моих тестах много сетевых запросов, и нужно время, чтобы они завершились, а Vue потом сделал с результатами своё дело и обновил DOM.</p><p>Думаю, мы давно усвоили: вставлять sleep()-затычки и надеяться, что тайминги совпадут, — медленно, нестабильно и доводит до бешенства. Поэтому нужен другой способ.</p><p>Насколько я понимаю, обычный путь — найти способ по DOM понять, можно ли двигаться дальше. Что-то вроде «если эта кнопка видна — значит, можно действовать».</p><p>Поэтому я написала маленькую функцию waitFor(), которая опрашивает условие каждые 20 мс. Таймаут — 2 секунды.</p><p>Версия в посте Julia не показана прямо — приведём свою, минимально работающую (и идейно соответствующую её описанию):</p><p>Использование выглядит так:</p><p>Похоже, существует много реализаций этой идеи, и они продуманы лучше моей (беглый поиск в Google: <a href="https://github.com/dgtlife/qunit-wait-for" rel="noopener">qunit-wait-for</a>, Playwright expect.poll).</p><h2>Понять, чего именно ждать, — нетривиально</h2><p>Иногда мне казалось, что я нашла правильную точку для ожидания в DOM («просто дождись, пока появится этот textarea!»), но на практике из-за внутренних деталей программы нужно было ждать чего-то другого, что было сложно зацепить.</p><p>В итоге я добавила в один компонент произвольное значение в DOM, когда он завершал важное действие (вроде data-this-thing-is-ready=true). Это не очень-то красиво.</p><p>Думаю, правильный способ починить такую проблему теста — рефакторинг, который заодно делает приложение более надёжным для пользователя. Если в DOM есть элемент, с которым пользователю на самом деле ещё нельзя взаимодействовать — может быть, его и не стоит показывать?</p><h2>Добавлять CSS-классы для селекторов? Спорный вопрос</h2><p>В итоге я добавила несколько классов на HTML-элементы — нужно было их находить в тестах, чтобы кликать или ждать появления в DOM.</p><p>Я могу позже изменить этот подход — тестовые фреймворки для frontend обычно советуют избегать CSS-классов и использовать что-то вроде getByRole (выбор по семантической роли элемента, например «кнопка» или «поле формы») или, в крайнем случае, data-testid (специальный data-атрибут, который добавляют исключительно ради тестов и игнорируют в production-стилях).</p><p>Похоже, миграция на getByRole решает обе проблемы сразу: и приложение становится более доступным для скринридеров, и тесты — устойчивее к рефакторингу разметки.</p><h2>Заполнение форм — отдельная боль</h2><p>Чтобы заполнить форму, недостаточно просто выставить value — нужно ещё диспатчить событие, чтобы Vue понял, что элемент изменился. И для checkbox, и для textarea нужны разные события.</p><p>Это слегка раздражает — и заставляет понять, зачем вообще могут понадобиться UI-тестовые библиотеки. Например, Testing Library (набор фреймворк-агностичных утилит для тестирования UI с упором на доступность) и Vue Test Utils (официальная библиотека Vue для unit-тестов компонентов). Их подходы к формам выглядят иначе:</p><ul><li>Пример заполнения формы из <a href="https://testing-library.com/docs/example-input-event/" rel="noopener">Testing Library</a> выглядит совершенно иначе, чем то, что делаю я.</li><li>У <a href="https://test-utils.vuejs.org/guide/essentials/forms" rel="noopener">Vue Test Utils</a> раздел про работу с формами выглядит так, будто сильно упрощает всё это.</li></ul><h2>Test coverage — Chrome это умеет из коробки</h2><p>Мне хотелось понять, какое у меня test coverage, и оказывается, в Chrome есть встроенная функция code coverage для JS и CSS!</p><p>Мой JS собирается в один файл bundle.js через esbuild — поэтому я могу просто посмотреть на bundle.js и увидеть, какие строки не покрыты тестами.</p><p>Процесс получился чуть капризный: пришлось выключить sourcemaps в Chrome DevTools, чтобы заработало, и есть специфическая, не самая очевидная последовательность действий, чтобы увидеть данные покрытия.</p><h2>Это было прикольно</h2><p>Как обычно с такими постами: я никогда особо не работала frontend- или backend-разработчиком (кроме как для себя!) и чувствую, будто постоянно учусь делать совсем базовые штуки.</p><p>Мне реально кайфовалось от этого. Мои frontend-проекты всегда кажутся хрупкими, потому что они без тестов; и, может быть, однажды у меня появится тест-сьют, в котором я буду уверена.</p><p>Что я ещё обдумываю:</p><ul><li>Пока писала пост, нашла frontend-библиотеку Testing Library — у неё много рекомендаций, как писать тесты, которые сильно отличаются от моих первоначальных идей. Я попробовала переписать всё на Testing Library — получилось неплохо, посмотрим, что из этого выйдет. Они распространяют .umd.js файл, который работает без Node.</li><li>Не до конца понимаю, как относиться к тому, что эти тесты никак не запускаются из командной строки. Может быть, есть простой способ работать в основном в браузере, но иметь возможность погонять и в CI, если нужно?</li></ul><h2>Что забрать с собой</h2><blockquote>Мои frontend-проекты всегда кажутся хрупкими, потому что они без тестов. Может быть, однажды у меня появится тест-сьют, в котором я буду уверена.</blockquote><p>Главный вывод поста: для маленьких персональных или библиотечных проектов «тестовая страница в браузере» — совершенно рабочий путь. Не нужно тащить Node, build-сервер и jsdom только ради того, чтобы у вас были тесты. Чек-лист минимальной настройки:</p><ol><li>Положить компоненты в window._components (или другое глобальное пространство имён).</li><li>Подключить QUnit (или другой фреймворк, который умеет запускаться прямо со страницы) в HTML-файл с тестами.</li><li>Написать mountComponent(template, data), которая создаёт временный div и монтирует туда Vue-app.</li><li><b>Опционально</b> (если у компонента есть бэкенд): сделать endpoint /api/reset_test_data на dev-сервере для сброса БД к фикстуре.</li><li>Реализовать waitFor(condition, timeout=2000) для ожидания DOM-условий вместо sleep().</li><li>Для форм диспатчить input (текстовые поля) и change (чекбоксы) после изменения свойств элементов. Для кликов хватит обычного .click() на элементе.</li><li>Для покрытия — Chrome DevTools, вкладка Coverage; sourcemaps выключить.</li></ol><p>Оригинал поста Julia Evans — на <a href="https://jvns.ca/blog/2026/05/02/testing-vue-components-in-the-browser/" rel="noopener">jvns.ca</a>. Альтернативы для тех, кто хочет больше готового: <a href="https://test-utils.vuejs.org/" rel="noopener">Vue Test Utils</a> (через jsdom в Node), <a href="https://testing-library.com/" rel="noopener">Testing Library</a> (с UMD-сборкой работает без Node).</p>]]></content:encoded>
    </item>
    <item>
      <title>React vs Vue в 2026 году: какой фреймворк выбрать</title>
      <link>https://tproger.ru/articles/react-vs-vue-v-2026-godu--kakoj-frejmvork-vybrat</link>
      <comments>https://tproger.ru/articles/react-vs-vue-v-2026-godu--kakoj-frejmvork-vybrat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/react-vs-vue-v-2026-godu--kakoj-frejmvork-vybrat</guid>
      <description><![CDATA[<p>Сравниваем React и Vue в 2026 году по производительности, экосистеме, рынку вакансий и порогу входа. Актуальные данные и рекомендации по выбору фреймворка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/react-vs-vue-v-2026-godu--kakoj-frejmvork-vybrat">React vs Vue в 2026 году: какой фреймворк выбрать</a>»</p>]]></description>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 28 Mar 2026 15:32:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>React или Vue — вечный спор среди фронтенд-разработчиков. Одни клянутся гибкостью React и его экосистемой, другие ценят элегантность Vue и низкий порог входа. Но в 2026 году оба фреймворка серьёзно изменились: React получил Server Components и Compiler, Vue готовит революционный Vapor Mode. Разберёмся на актуальных данных, какой инструмент подойдёт именно вам.</p><p><b>React</b> — JavaScript-библиотека для создания пользовательских интерфейсов, разработанная Meta (ранее Facebook). <b>Vue.js</b> — прогрессивный фреймворк для создания UI, созданный Эваном Ю (Evan You). Оба инструмента используют компонентный подход и виртуальный DOM, но различаются в философии, синтаксисе и экосистеме.</p><p>— React лидирует по npm-загрузкам (429 млн/мес против 47 млн у Vue) и рынку вакансий</p><p>— Vue проще в освоении и имеет более целостную экосистему «из коробки»</p><p>— React 19.2 принёс Activity, Performance Tracks и useEffectEvent</p><p>— Vue Vapor Mode обещает производительность без виртуального DOM</p><p>— Для крупных корпоративных проектов React остаётся безопасным выбором</p><p>— Для быстрого старта и небольших команд Vue даёт преимущество в скорости разработки</p><h2>React в 2026 — что нового</h2><p>React продолжает эволюционировать. В 2025–2026 годах произошло несколько значимых событий, которые определили направление развития библиотеки.</p><h3>React 19 и Server Components</h3><p>React 19 стал самым масштабным обновлением со времён хуков. <b>Server Components (RSC)</b> — компоненты, которые рендерятся на сервере и не увеличивают клиентский бандл — перешли из экспериментального статуса в стабильный. Это позволяет снизить объём JavaScript, отправляемого клиенту, на 30–50% в типичных приложениях.</p><p>Ключевые нововведения React 19:</p><ul><li><b>Actions</b> — встроенная обработка форм с серверными и клиентскими экшенами</li><li><b>useOptimistic</b> — хук для оптимистичных обновлений UI</li><li><b>use()</b> — новый хук для чтения промисов и контекста в рендере</li><li><b>Нативная поддержка метаданных</b> — title, meta, link можно рендерить прямо в компонентах</li><li><b>Улучшенная поддержка Web Components</b> — полная интеграция с кастомными элементами</li></ul><h3>React 19.2 и Compiler v1.0</h3><p>Вышедший в 2026 году React 19.2 добавил экспериментальные фичи: <b>Activity</b> (управление жизненным циклом скрытых компонентов), <b>React Performance Tracks</b> (интеграция с DevTools для профилирования) и <b>useEffectEvent</b>.</p><p>Отдельное событие — выход <b>React Compiler v1.0</b>. Компилятор автоматически мемоизирует компоненты, устраняя необходимость ручного использования useMemo, useCallback и React.memo. По данным Meta, это сократило количество ре-рендеров в их приложениях на 40%.</p><h3>React Foundation и Linux Foundation</h3><p>В 2025 году React перешёл под управление <a href="https://react.dev/blog">React Foundation</a> при Linux Foundation. Это означает более открытое управление проектом и снижение зависимости от одной компании. Для разработчиков это сигнал долгосрочной стабильности.</p><h2>Vue в 2026 — что нового</h2><p>Vue тоже не стоит на месте. Хотя темп обновлений ниже, чем у React, каждый релиз Vue приносит продуманные и обратно совместимые улучшения.</p><h3>Vue 3.5 — стабильность и производительность</h3><p>Вышедший в сентябре 2024 года Vue 3.5 ("Tengen Toppa Gurren Lagann") сфокусирован на внутренних улучшениях производительности. Реактивная система была оптимизирована для более точного отслеживания зависимостей, а потребление памяти снижено на 56% по данным бенчмарков команды Vue.</p><p>Ключевые улучшения Vue 3.5:</p><ul><li><b>useTemplateRef()</b> — типобезопасные ссылки на элементы</li><li><b>Deferred Teleport</b> — телепортация контента с отложенным рендерингом</li><li><b>Lazy Hydration</b> — ленивая гидратация для SSR-приложений</li><li><b>useId()</b> — генерация стабильных уникальных ID для SSR</li><li><b>Улучшенный watch</b> — deep watch с поддержкой паузы и возобновления</li></ul><h3>Vapor Mode — будущее без виртуального DOM</h3><p><b>Vapor Mode</b> — экспериментальный режим компиляции Vue, который генерирует код без виртуального DOM. Вместо создания виртуального дерева и его сравнения (diffing) Vapor Mode компилирует шаблоны в прямые DOM-операции. Это аналог подхода <a href="https://svelte.dev/">Svelte</a>, но с сохранением API Vue.</p><p>По предварительным бенчмаркам, Vapor Mode показывает прирост производительности в 2–3 раза на операциях обновления. Проект находится в активной разработке на <a href="https://github.com/vuejs/core-vapor">GitHub</a> (2400+ звёзд), но пока не рекомендован для продакшена.</p><h3>Nuxt 4 — полная переработка</h3><p><b>Nuxt 4</b> вышел в 2025 году и уже добрался до версии 4.4. Это полная переработка мета-фреймворка для Vue с улучшенной архитектурой, нативной поддержкой серверных компонентов и обновлённым Nuxt UI v4. Для Vue-экосистемы Nuxt 4 — это то же, что Next.js для React.</p><h2>Сравнение по критериям</h2><p>Рассмотрим ключевые метрики, которые помогут сделать осознанный выбор. Все данные актуальны на март 2026 года.</p><p><b>Критерий / React / Vue</b></p><h3>Производительность</h3><p>В стандартных бенчмарках (js-framework-benchmark) React и Vue показывают сопоставимые результаты. React с Compiler v1.0 автоматически оптимизирует ре-рендеры, Vue 3.5 имеет более эффективную реактивную систему. На практике разница в производительности редко становится решающим фактором — оба фреймворка достаточно быстры для подавляющего большинства задач.</p><p>Реальная разница появляется в экстремальных сценариях: Vue Vapor Mode (когда выйдет из эксперимента) обещает преимущество за счёт отказа от виртуального DOM, а React Server Components снижают нагрузку на клиент, перенося логику на сервер.</p><h3>Порог входа</h3><p>Vue традиционно считается более дружелюбным к новичкам. Однокомпонентные файлы (SFC) с секциями &lt;template&gt;, &lt;script&gt; и &lt;style&gt; интуитивно понятны. Документация Vue — одна из лучших в индустрии.</p><p>React требует понимания JSX, хуков и однонаправленного потока данных. С приходом Server Components и Compiler порог входа вырос — нужно разбираться, какие компоненты серверные, а какие клиентские. По данным State of JS 2024, React назвали "избыточно сложным" чаще других фреймворков.</p><h3>Экосистема</h3><p>React обладает самой большой экосистемой в мире фронтенда. <b>Next.js</b>, <b>Remix</b>, <b>React Native</b>, тысячи UI-библиотек (Material UI, Ant Design, Chakra UI, shadcn/ui) — для любой задачи найдётся готовое решение. Обратная сторона — проблема выбора: для одной задачи существует десяток конкурирующих библиотек.</p><p>Vue предлагает более целостный подход. Официальные решения покрывают большинство потребностей: <b>Vue Router</b>, <b>Pinia</b> (стейт-менеджмент), <b>Nuxt</b> (SSR/SSG), <b>Vuetify</b> и <b>PrimeVue</b> (UI). Меньше выбора, но меньше и головной боли.</p><h3>Рынок вакансий</h3><p>По данным npm, React скачивают <b>429 млн раз в месяц</b> против <b>47 млн у Vue</b> — разрыв примерно в 9 раз. На GitHub суммарно у React <b>244 000</b> звёзд, у Vue — <b>263 000</b> (с учётом Vue 2 и Vue 3 репозиториев). Однако звёзды на GitHub не отражают реальное использование в продакшене.</p><p>На рынке труда React доминирует. По данным <a href="https://survey.stackoverflow.co/2024">Stack Overflow Developer Survey 2024</a>, React используют на работе значительно чаще, чем Vue. На hh.ru и LinkedIn вакансий с React в 3–4 раза больше, чем с Vue. Это важно для тех, кто строит карьеру.</p><h3>Размер бандла</h3><p>Минифицированный и сжатый (gzip) размер:</p><ul><li><b>React</b> (react + react-dom): ~44 КБ</li><li><b>Vue 3</b>: ~33 КБ</li></ul><p>Vue компактнее на ~25%. С React Server Components часть кода не попадает в клиентский бандл вовсе, что может нивелировать эту разницу. Vue Vapor Mode в будущем обещает ещё меньший размер за счёт tree-shaking рантайма виртуального DOM.</p><h3>Поддержка TypeScript</h3><p>Оба фреймворка отлично работают с TypeScript, но подходы различаются.</p><p>Vue 3 написан на TypeScript и предоставляет первоклассную типизацию «из коробки». &lt;script setup lang="ts"&gt; в SFC — лаконичный и типобезопасный способ писать компоненты. IDE-поддержка через Volar (теперь часть Vue Language Tools) значительно улучшилась.</p><p>React исторически использует .tsx файлы и имеет зрелую систему типов через @types/react. Типизация хуков и контекста может быть многословной, но хорошо документирована. React Compiler v1.0 полностью поддерживает TypeScript.</p><h2>Когда выбрать React</h2><p>React — оптимальный выбор в следующих ситуациях:</p><ul><li><b>Крупный корпоративный проект</b> — максимальная экосистема, проще найти разработчиков</li><li><b>Нужен React Native</b> — единая кодовая база для веб и мобильных приложений</li><li><b>Server-side rendering</b> — Next.js с React Server Components даёт лучший в классе SSR</li><li><b>Большая команда</b> — огромное сообщество, много документации и готовых решений</li><li><b>Карьерные перспективы</b> — React-вакансий на рынке в 3–4 раза больше</li><li><b>Сложные интерактивные интерфейсы</b> — дашборды, real-time приложения, графические редакторы</li></ul><p>React подходит тем, кто готов инвестировать время в изучение экосистемы и не боится "усталости от выбора" (framework fatigue). Если команда уже знает React — смена на Vue ради смены не имеет смысла.</p><h2>Когда выбрать Vue</h2><p>Vue — лучший выбор, когда:</p><ul><li><b>Быстрый старт проекта</b> — от идеи до прототипа за минимальное время</li><li><b>Небольшая команда</b> — целостная экосистема снижает время на принятие решений</li><li><b>Постепенная миграция</b> — Vue можно внедрять по частям в существующий проект</li><li><b>Обучение фронтенду</b> — низкий порог входа, отличная документация</li><li><b>Проекты на Laravel/Django/Rails</b> — Vue традиционно хорошо интегрируется с серверными фреймворками</li><li><b>Китайский рынок</b> — Vue крайне популярен в Китае (Alibaba, Baidu, Xiaomi используют его)</li></ul><p>Vue идеально подходит для команд, которые ценят прагматичность и хотят сфокусироваться на продукте, а не на выборе инструментов. Если проект не требует React Native или React-специфичных библиотек — Vue даст результат быстрее.</p><h2>Выводы</h2><p>В 2026 году и React, и Vue — зрелые, стабильные инструменты с активным развитием. Спор «что лучше» не имеет универсального ответа — выбор зависит от контекста проекта, команды и задач.</p><blockquote>React и Vue решают одну задачу разными способами. Важен не фреймворк, а то, как вы его используете. Выбирайте инструмент под задачу, а не задачу под инструмент.</blockquote><p><b>Выбирайте React</b>, если вам нужна максимальная экосистема, React Native, Server Components или вы ориентируетесь на рынок труда. <b>Выбирайте Vue</b>, если цените скорость разработки, целостный developer experience и низкий порог входа.</p><p>Оба фреймворка продолжают развиваться: React движется в сторону серверного рендеринга и компиляции, Vue — в сторону максимальной производительности через Vapor Mode. Следите за обновлениями обоих проектов и выбирайте то, что делает вашу команду продуктивнее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Курсы Vue.js: обучение фреймворку Vue.js</title>
      <link>https://tproger.ru/articles/kursy-vue-js--obuchenie-frejmvorku-vue-js-258494</link>
      <comments>https://tproger.ru/articles/kursy-vue-js--obuchenie-frejmvorku-vue-js-258494?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-vue-js--obuchenie-frejmvorku-vue-js-258494</guid>
      <description><![CDATA[<p>Лучшие курсы по фреймворку Vue.js. Рейтинг вариантов онлайн-обучения бесплатно и платно, обзор обучающей программы и стоимости курсов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-vue-js--obuchenie-frejmvorku-vue-js-258494">Курсы Vue.js: обучение фреймворку Vue.js</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 10 Oct 2025 10:27:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выбирая курсы Vue.js, вы делаете осознанный шаг в сторону роста как фронтенд-разработчика. Vue.js занимает особое место среди современных фреймворков: сочетает производительность, сравнимую с React, что позволяет быстро создавать сложные SPA. Прогрессивная архитектура легко внедряется в проекты любого масштаба — от небольших виджетов до enterprise-систем. Начните учиться уже сейчас и применяйте навыки в реальных задачах — как в стартапах, так и в корпоративной разработке.</p><p>Я провела анализ около 70 учебных программ от онлайн-школ. В результате я отобрала 34 наиболее эффективных курса, разбила их на три блока: мой личный топ-10, ещё 16 курсов для углубления в специализацию и 8 бесплатных стартовых уроков для начала обучения.</p><p><b>Чтобы помочь сэкономить на старте, я добавила в описания уникальные промокоды — активируйте их при оплате и получите скидку на обучение.</b></p><h2>ТОП-10 лучших курсов Vue.js в 2026 году</h2><ol><li><a href="https://experts2.ru/vajVEe?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=1">Vue.js</a> от Skillbox — TypeScript и Vue.js через создание трех сложных проектов: каталога фильмов, аудиоплеера и блога с пожизненным доступом к материалам.</li><li><a href="https://experts2.ru/nSDtkb?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=2">Vue.js разработчик</a> от OTUS — профессиональное освоение Vue.js с персональным проектом на выбор: панель управления рассылками или модернизация CRM-системы.</li><li><a href="https://experts2.ru/vgeSGd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=3">Фронтенд-разработчик</a> от Skillbox — 17 реальных проектов в портфолио, включая задания от Газпромбанк.Тех с гарантией трудоустройства или возвратом средств.</li><li><a href="https://experts2.ru/UczKkf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=4">Frontend-разработчик с нуля до Middle</a> от GeekBrains — полный стек технологий от HTML до Vue.js с развитием soft skills и стажировкой у партнеров.</li><li><a href="https://experts2.ru/IQcbrf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=5">Интенсив по программированию</a> от SkillFactory — освоение JavaScript и Vue.js с возможностью очного обучения в Москве и налоговым вычетом.</li><li><a href="https://experts2.ru/ofXFur?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=6">Vue.js</a> от html.academy — интенсивная практика с реальными задачами от IT-компаний и персональной карьерной консультацией.</li><li><a href="https://experts2.ru/RpPkvd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=7">Vue.js</a> от Loftschool — два готовых проекта в портфолио: таск-менеджер и виртуальная пиццерия с поддержкой учебного центра.</li><li><a href="https://experts2.ru/svrLeW?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=8">Vue.js</a> от Level Up — интенсив с созданием SPA-приложения и персональными воркшопами от преподавателя.</li><li><a href="https://experts2.ru/rcXuYq?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=9">Vue.js</a> от Learn.Javascript — комбинированное изучение Vue.js и Nuxt.js с проектом приложения доставки еды и онлайн-трансляциями.</li><li><a href="https://experts2.ru/EbnZpv?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=10">JavaScript</a> от Специалиста — сертификат на двух языках с еженедельными вебинарами.</li></ol><p>Программы подойдут фронтенд-разработчикам, которые хотят освоить современный стек технологий для создания интерфейсов. Также курсы будут ценны для fullstack-специалистов, стремящихся углубить знания клиентской части приложений. Начинающим айтишникам Vue.js предлагает мягкий вход в профессию благодаря продуманной архитектуре и понятной документации.</p><h2>Онлайн-курсы Vue.js</h2><p><b>1. <a href="https://experts2.ru/vajVEe?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=1">Vue.js</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 50%</i></p><p><a href="https://experts2.ru/vajVEe?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=1">Получить скидку &gt;&gt;&gt;</a></p><p>Курс последовательно познакомит вас с TypeScript, а затем с Vue.js. Вы приобретете навыки создания сложных интерактивных веб-приложений и систем, свободных от багов и программных ошибок. В программе — разработка проектов различной сложности: каталоги фильмов, стриминговые сервисы и блог-платформы. Вы освоите написание понятного структурированного кода, что сократит время разработки и тестирования приложений. Полученные знания дополнят вашу базу в верстке и JavaScript, позволив создавать сложные веб-приложения профессионального уровня.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/f34c7e17-cb5f-431c-b27b-71fd120603c5.jpg" alt="" /></figure><ul><li>Стоимость: 99 672 рубля</li><li>Длительность: 2 месяца</li><li>Формат обучения: видеолекции, практика, тренажеры</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>фронтендерам.</li></ul><p><b>Преимущества:</b></p><ul><li>портфолио с тремя крупными проектами: каталог фильмов, аудиоплеер и блог;</li><li>решение реальных задач от партнеров курса во время практики;</li><li>пожизненный доступ ко всем материалам и будущим обновлениям;</li><li>персональная обратная связь по всем работам;</li><li>мобильная версия платформы с синхронизацией прогресса;</li><li>беспроцентная рассрочка на оплату;</li><li>налоговый вычет до 13% от стоимости обучения.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченное количество мест на курс.</li></ul><p><b>Программа обучения:</b></p><ul><li>Работа с TypeScript и современными инструментами разработки</li><li>Фундаментальные принципы Vue на практических примерах</li><li>Организация взаимодействия между компонентами</li><li>Управление состоянием страниц и приложений</li><li>Настройка хранилища Pinia для данных</li><li>Методы тестирования Vue-компонентов</li><li>Построение архитектуры и структуры проекта</li><li>Освоение Nuxt и серверного рендеринга</li><li>Анализ различий между Vue 2 и Vue 3</li><li>Дополнительные практические занятия и кейсы</li></ul><p><a href="https://experts2.ru/vajVEe?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2. <a href="https://experts2.ru/nSDtkb?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=2">Vue.js разработчик</a> | OTUS</b></p><p>Курс позволяет освоить Vue.js на профессиональном уровне, уделяя внимание архитектуре компонентов, синтаксису фреймворка и принципам реактивности. По завершении обучения вы сможете самостоятельно разрабатывать масштабируемые веб-приложения с нуля. В рамках программы предусмотрена работа над персональным проектом по выбору: создание панели управления для email-рассылок, модернизация CRM-системы или другие практические задачи. Готовый проект пополнит ваше портфолио и станет весомым аргументом при трудоустройстве в IT-сфере.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/143107c9-7d57-446c-a89c-70911cf3d922.jpg" alt="" /></figure><ul><li>Стоимость: 71 000 рублей</li><li>Длительность: 3 месяца</li><li>Формат обучения: онлайн-трансляции, домашние задания, проектная работа, общение с экспертами на вебинарах</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам в Vue-разработке;</li><li>JavaScript-разработчикам с навыками CSS и HTML;</li><li>backend-разработчикам, которые хотят освоить fullstack.</li></ul><p><b>Преимущества:</b></p><ul><li>две онлайн-трансляции в неделю для прямого общения с преподавателями;</li><li>множество заданий и масштабный проект для портфолио;</li><li>детальный анализ кода от профессиональных разработчиков;</li><li>возможность начать карьеру у партнеров площадки еще во время обучения;</li><li>возврат средств при несоответствии содержания курса ожиданиям;</li><li>выбор наиболее интересной темы для проектной работы.</li></ul><p><b>Недостатки:</b></p><ul><li>необходимо ждать начало обучения;</li><li>чтобы поступить на курс, необходимо пройти обязательное тестирование.</li></ul><p><b>Программа обучения:</b></p><ul><li>Работа Vue с GraphQL</li><li>Подключение WebSockets во Vue-приложениях</li><li>Освоение TypeScript</li><li>Создание десктопных приложений на Electron</li><li>Серверный рендеринг с помощью Nuxt</li><li>Работа с библиотеками в экосистеме Nuxt</li><li>Выбор темы и организация проектной работы</li><li>Реализация интерактивных интерфейсов и Web Components</li><li>Организация кода и паттерны проектирования во Vue</li></ul><p><a href="https://experts2.ru/nSDtkb?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. <a href="https://experts2.ru/vgeSGd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=3">Фронтенд-разработчик</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 60%</i></p><p><a href="https://experts2.ru/vgeSGd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=3">Получить скидку &gt;&gt;&gt;</a></p><p>Курс построен на практическом подходе, максимально приближенном к реальной работе. Обучение включает изучение теоретических основ с интерактивными материалами и выполнение 17 проектов для портфолио. Вы освоите полный стек технологий для создания сайтов любой сложности: HTML, CSS, Vue.js, TypeScript, JavaScript. Параллельно с техническими навыками развиваются soft skills: работа в команде, планирование задач, решение нестандартных проблем. После завершения программы карьерные консультанты помогут сформировать портфолио и подготовиться к собеседованиям в компаниях-партнерах.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/e955c991-d26d-435a-b482-75e233cdc626.jpg" alt="" /></figure><ul><li>Стоимость: 152 150 рублей</li><li>Длительность: 7 месяцев</li><li>Формат обучения: видеоуроки, текстовые материалы, тесты, интерактивные тренажеры, проекты</li><li>Сертификат: удостоверение о повышении квалификации</li></ul><p><b>Кому подойдет: </b></p><ul><li>тем, кто хочет построить карьеру в IT;</li><li>тем, кто хочет зарабатывать на фрилансе.</li></ul><p><b>Преимущества:</b></p><ul><li>интеграция ИИ-инструментов в рабочие процессы разработчика;</li><li>реалистичные проектные задания от компаний «Газпромбанк.Тех», WhiteMark и платформы «Маруся»;</li><li>до 17 завершенных проектов с реальными кейсами партнеров;</li><li>гарантированная помощь в поиске работы или возврат оплаты;</li><li>проверка домашних заданий в течение суток;</li><li>годовое обучение английскому для веб-разработчиков.</li></ul><p><b>Недостатки:</b></p><ul><li>не выявлено.</li></ul><p><b>Программа обучения:</b></p><ul><li>Подготовка материалов к публикации</li><li>Верстка интерактивных элементов</li><li>Создание адаптивных стилей</li><li>Верстка адаптивных блоков интерфейса</li><li>Разработка динамических интерфейсных решений</li><li>Подготовка верстки к запуску в продакшен</li><li>Углубленная работа с объектной моделью документа</li><li>Обработка и валидация пользовательского ввода</li></ul><p><a href="https://experts2.ru/vgeSGd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. <a href="https://experts2.ru/UczKkf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=4">Frontend-разработчик с нуля до Middle</a> | GeekBrains</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 7%</i></p><p><a href="https://experts2.ru/UczKkf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=4">Получить скидку &gt;&gt;&gt;</a></p><p>Каждое занятие включает практические задания по ключевым направлениям веб-разработки. Через несколько месяцев обучения вы освоите адаптивную верстку на HTML и CSS, создание интерактивных элементов на JavaScript, проектирование макетов в Figma и работу с фреймворком Vue.js. Курс дополнен реальными задачами от компаний-партнеров — вы сможете выбрать подходящие проекты и расширить портфолио новыми работами.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/293170bd-c6e2-4734-bbd3-4cd44b9389aa.jpg" alt="" /></figure><ul><li>Стоимость: 142 128 рублей</li><li>Длительность: от 6 месяцев</li><li>Формат обучения: видеоуроки, онлайн-занятия по расписанию, тренажеры, мини-кейсы, персональная обратная связь</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>людям, которые хотят освоить веб-программирование с нуля;</li><li>IT-специалистам из смежных сфер.</li></ul><p><b>Преимущества:</b></p><ul><li>персональная консультация менеджера с дополнительной скидкой;</li><li>помощь в поиске работы и стажировки у компаний-партнеров;</li><li>решение реальных задач от «Газпромбанк.Тех»;</li><li>15+ завершенных проектов с кейсами известных компаний;</li><li>индивидуальные комментарии наставников по домашним заданиям;</li><li>доступ к эксклюзивной базе предложений работы.</li></ul><p><b>Недостатки:</b></p><ul><li>в базовом тарифе нет помощи наставника и содействия в трудоустройстве.</li></ul><p><b>Программа обучения:</b></p><ul><li>Принципы работы компьютера и интернета</li><li>Освоение профессионального окружения разработчика</li><li>Эффективное взаимодействие в команде</li><li>Подготовка материалов к публикации</li><li>Создание контентных блоков и гибких компонентов</li><li>Верстка частей страницы и форм ввода</li><li>Разработка responsive-разделов и анимаций</li><li>Подготовка верстки к промышленной эксплуатации</li><li>Основы верстки в React-окружении</li><li>Реализация бизнес-логики в React-компонентах</li><li>Управление состоянием и информацией в приложении</li></ul><p><a href="https://experts2.ru/UczKkf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5. <a href="https://experts2.ru/IQcbrf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=5">Интенсив по программированию</a> | SkillFactory</b></p><p>Курс предоставляет комплексное освоение инструментов фронтенд-разработки с четким разграничением функционала фронтенда и бэкенда. Вы приобретете навыки верстки веб-сайтов и email-рассылок, работы с системой контроля версий и алгоритмами баз данных. А практическое взаимодействие с действующими специалистами отрасли создаст основу для профессионального старта в программировании.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/b9a7cf82-f60d-4ca6-a077-dd3c25abc2a0.jpg" alt="" /></figure><ul><li>Стоимость: от 104 940 рублей</li><li>Длительность: от 4 месяцев</li><li>Формат обучения: видеоуроки, вебинары, тренажеры</li><li>Сертификат: сертификат и диплом</li></ul><p><b>Кому подойдет: </b></p><ul><li>новичкам без опыта в IT.</li></ul><p><b>Преимущества:</b></p><ul><li>курсы по нейросетям и английскому языку в качестве подарка;</li><li>решение реальных задач от компаний-партнеров;</li><li>от пяти завершенных проектов для вашей коллекции работ;</li><li>возврат средств при отсутствии предложений работы;</li><li>общий чат для общения с другими участниками курса;</li><li>мероприятия и стажировки у партнеров для демонстрации навыков работодателям.</li></ul><p><b>Недостатки:</b></p><ul><li>в базовом тарифе нет курса английского для IT.</li></ul><p><b>Программа обучения:</b></p><ul><li>Создание веб-страниц</li><li>Изучение JavaScript</li><li>Освоение TypeScript и вспомогательных средств разработки</li><li>Разработка приложений на React.js</li><li>Проектирование приложений и основы бэкенда</li><li>Профессиональное ориентирование и подготовка к трудоустройству</li></ul><p><a href="https://experts2.ru/IQcbrf?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. <a href="https://experts2.ru/ofXFur?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=6">Vue.js</a> | html.academy</b></p><p>Программа для опытных разработчиков, ориентированная на быстрое повышение квалификации. В сжатые сроки вы изучите основные возможности Vue.js и их практическое применение в разработке сайтов, онлайн-магазинов и веб-приложений. Под руководством преподавателей вы выполните два проекта — учебный таск-менеджер и авторскую виртуальную пиццерию. Готовые работы составят основу вашего портфолио для демонстрации потенциальным работодателям.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/c3e7e237-a710-4c90-8185-868c422520fe.jpg" alt="" /></figure><ul><li>Стоимость: от 53 760 рублей</li><li>Длительность: от 3 месяцев</li><li>Формат обучения: теоретические материалы, практические задания, проектные работы</li><li>Сертификат: нет</li></ul><p><b>Кому подойдет: </b></p><ul><li>IT-специалистам с навыками программирования на JavaScript;</li><li>людям, которые хотят погрузиться в веб-разработку с нуля.</li></ul><p><b>Преимущества:</b></p><ul><li>готовые примеры решения типовых задач;</li><li>два полноценных приложения для портфолио — таск-менеджер и виртуальная пиццерия;</li><li>бесплатная помощь в подборе курса и ответы на вопросы об обучении;</li><li>освоение технологий, востребованных у работодателей;</li><li>оперативные и подробные ответы от учебной службы.</li></ul><p><b>Недостатки:</b></p><ul><li>отсутствие документа об окончании курса;</li><li>нет возможностей для онлайн-взаимодействия с преподавателем.</li></ul><p><b>Программа обучения:</b></p><ul><li>Ключевые особенности фреймворка Vue.js</li><li>Начало работы с Vue.js</li><li>Отображение компонентов в интерфейсе</li><li>Создание компонента счетчика</li><li>Реализация функций компонентов</li><li>Конструкции: условная отрисовка и работа со списками</li><li>Типы и обработка взаимодействий</li><li>Способы связи между компонентами</li><li>Использование слотов и динамического контента</li><li>Организация двустороннего обмена данными</li><li>Обзор Vue Test Utils и Vitest</li><li>Разработка через тестирование</li></ul><p><a href="https://experts2.ru/ofXFur?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7. <a href="https://experts2.ru/RpPkvd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=7">Vue.js</a> | Loftschool</b></p><p>Шестинедельная программа развивает компетенции веб-программирования и дополняет портфолио авторским SPA-проектом. В рамках курса изучается Vue.js для одностраничных приложений, продвинутый JavaScript, методики End-to-End и Unit-тестирования, технологии внедрения анимации. Еженедельный план содержит групповые сессии по развитию профессиональных и личностных навыков, цикл персональных воркшопов под руководством преподавателя, активную фазу реализации собственного приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/6afa171a-bc19-4e03-8366-940a2d5f62a3.jpg" alt="" /></figure><ul><li>Стоимость: по запросу</li><li>Длительность: 6 недель</li><li>Формат обучения: теоретические материалы, практические задания, проект, групповая работа с наставниками</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>опытным IT-специалистам.</li></ul><p><b>Преимущества:</b></p><ul><li>насыщенный учебный план с упором на практические задания;</li><li>сопровождение наставника от начала обучения до выпуска;</li><li>готовое SPA-приложение с админ-панелью для портфолио;</li><li>безлимитное использование учебных материалов;</li><li>совместная работа с группой над развитием гибких навыков;</li><li>активность в Telegram-чате с преподавателем и студентами;</li><li>помощь в старте профессионального пути в веб-разработке.</li></ul><p><b>Недостатки:</b></p><ul><li>не указана стоимость.</li></ul><p><b>Программа обучения:</b></p><ul><li>Представление наставника и участников группы</li><li>Создание макета дипломного проекта с использованием webpack</li><li>Размещение работы на GitHub для проверки наставником</li><li>Доработка верстки для разных устройств</li><li>Подключение данных из админ-панели к лендингу</li><li>Проверка компонентов приложения</li><li>Групповая разработка под руководством наставника</li><li>Финальная корректировка проекта</li><li>Сдача работы на итоговую проверку</li><li>Внесение результатов в дипломные документы</li></ul><p><a href="https://experts2.ru/RpPkvd?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8. <a href="https://experts2.ru/svrLeW?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=8">Vue.js</a> | Level Up</b></p><p>Комбинированный курс по Vue.js и Nuxt.js демонстрирует возможности фреймворков для разработки интерфейсов и веб-решений. Вы выполните практикумы, включая проект приложения доставки еды. Доступны онлайн-обучение на платформе или занятия в петербургском образовательном центре. Программа создана специально для начинающих frontend-разработчиков, которые хотят углубить знания в веб-программировании и повысить свою квалификацию.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/25e70162-4d98-443c-b94d-99e431004ec7.jpg" alt="" /></figure><ul><li>Стоимость: 38 990 рублей</li><li>Длительность: 1,5 месяца</li><li>Формат обучения: очные занятия с преподавателем в Санкт-Петербург или онлайн, практические задания</li><li>Сертификат: нет</li></ul><p><b>Кому подойдет:</b></p><ul><li>новичкам с базовыми знаниями JavaScript;</li><li>IT-разработчикам с опытом.</li></ul><p><b>Преимущества:</b></p><ul><li>интенсивные занятия под руководством преподавателя;</li><li>глубокое освоение расширенного стека современных инструментов;</li><li>три приложения на Vue.js и одно на Next.js;</li><li>несколько дополнительных мини-приложений для пополнения кейсов;</li><li>ведение курса опытным веб-программистом с многолетней практикой;</li><li>детальный разбор всех практических заданий.</li></ul><p><b>Недостатки:</b></p><ul><li>нет сертификата;</li><li>фиксированное расписание.</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с возможностями Vue.js</li><li>Переход к полноценной работе с Vue-cli</li><li>Изучение продвинутых концепций Vue</li><li>Применение роутинга и менеджеров состояний</li><li>Работа с Vuex и Pinia</li><li>Освоение Nuxt.js для production-проектов</li></ul><p><a href="https://experts2.ru/svrLeW?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9. <a href="https://experts2.ru/rcXuYq?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=9">Vue.js</a> | Learn.Javascript</b></p><p>Курс посвящен веб-разработке на Vue 3. Вы изучите функционал фреймворка, освоите различные подходы к решению профессиональных задач и реализуете проект. В работе будут применяться как готовые UI-компоненты с изменяемой конфигурацией, так и созданные самостоятельно. Помимо Vue 3, программа включает JavaScript и TypeScript. Консультации по практическим заданиям проходят на еженедельных вебинарах.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/bd9a724a-7f1c-4a9a-b25a-269996d62d56.jpg" alt="" /></figure><ul><li>Стоимость: 24 700 рублей</li><li>Длительность: 2 месяца</li><li>Формат обучения: онлайн-занятия, домашние задания, проектные работы</li><li>Сертификат: сертификат на двух языках</li></ul><p><b>Кому подойдет: </b></p><ul><li>IT-разработчикам со знанием основ программирования на JavaScript, CSS и HTML.</li></ul><p><b>Преимущества:</b></p><ul><li>курсовая и итоговая работы для пополнения портфолио;</li><li>документ об окончании на русском и английском языках;</li><li>регулярные онлайн-встречи с преподавателями два раза в неделю;</li><li>обширная база вводных уроков для начинающих;</li><li>групповой чат с возможностью задавать вопросы эксперту;</li><li>рецензирование домашних заданий с обратной связью;</li><li>возврат оплаты при несоответствии курса ожиданиям.</li></ul><p><b>Недостатки:</b></p><ul><li>редкий набор групп на обучение;</li><li>онлайн-трансляции проводятся в фиксированное время.</li></ul><p><b>Программа обучения:</b></p><ul><li>Изучение Vue и создание компонентов</li><li>Современные подходы к веб-программированию</li><li>Знакомство с Composables, библиотеками VueUse и Pinia</li><li>Продвинутые техники разработки на Vue</li><li>Принципы реактивного программирования и рендеринга</li><li>Практическое использование inject и provide</li><li>Применение Vue Test Utils и Vitest для тестирования приложений</li></ul><p><a href="https://experts2.ru/rcXuYq?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10. <a href="https://experts2.ru/EbnZpv?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=10">JavaScript</a> | Специалист</b></p><p>Программа повышает уровень владения JavaScript для разработки реактивных веб-форм, включая применение Vue.js. После обучения вы сможете управлять состоянием приложения, создавать сложные формы, проектировать UI-компоненты и строить сайты на Vue.js. Доступны форматы онлайн-обучения на платформе или очного посещения московского образовательного центра.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-10/2d8bb429-f1d9-4f27-a37c-b58dd40371fc.jpg" alt="" /></figure><ul><li>Стоимость: 31 990 рублей</li><li>Длительность: 36 ак.часов</li><li>Формат обучения: очно и онлайн, практика</li><li>Сертификат: сертификат установленного образца</li></ul><p><b>Кому подойдет: </b></p><ul><li>IT-специалистам, обладающим навыками веб-разработки на JavaScript;</li><li>веб-дизайнерам;</li><li>менеджерам frontend-проектов.</li></ul><p><b>Преимущества:</b></p><ul><li>несколько форматов обучения – очно, онлайн или по индивидуальному плану;</li><li>12 академических часов бесплатно для занятий в компьютерных классах образовательного центра;</li><li>дополнительная скидка до 30% при изучении курса в рамках дипломных программ;</li><li>возможность бесплатных занятий в компьютерном классе образовательного центра;</li><li>частый набор групп на очное и онлайн-обучение.</li></ul><p><b>Недостатки:</b></p><ul><li>небольшое количество практических заданий.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы программирования на Vue.js: компоненты, шаблоны, свойства</li><li>Продвинутая работа с компонентами</li><li>Создание анимаций и переходов</li><li>Разработка веб-сайтов и работа с реактивностью</li></ul><p><a href="https://experts2.ru/EbnZpv?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 16 дополнительных курсов Vue.js</h2><p>Погрузиться в мир современной фронтенд-разработки можно с разных сторон. Обучение Vue.js открывает перед разработчиками множество путей для профессионального роста. В подборке собраны программы, которые помогут освоить фреймворк через практику и живые примеры. Каждый найдет подходящий формат — от коротких интенсивов до фундаментальных курсов.</p><ul><li><a href="https://experts2.ru/mhcCbS?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue JS</a> от itProger. Оформив подписку на сайте, вы получите полный доступ к курсу по Vue JS, где научитесь создавать компоненты и собирать из них современные веб-сайты. К каждому заданию школа подготовила подробную методичку решения, готовый проект-пример и ответы для самопроверки — это поможет осваивать материал в комфортном темпе и сразу видеть, как должен выглядеть итоговый результат.</li><li><a href="https://experts2.ru/ekgBzN?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Игра на Vue.js</a> от Stepik. На курсе вы создадите полноценную игру на Vue.js — от проектирования интерфейса до программирования игровой логики на JavaScript, а затем опубликуете готовое приложение в каталоге ВКонтакте; в процессе работы вы разработаете интерактивное приложение, сгенерируете идею через чат-бот и выполните самостоятельный проект для своего портфолио.</li><li><a href="https://experts2.ru/jQuJqz?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Фреймворк Vue.JS</a> от Frontendblock. Если ваша цель — за 4 недели разобраться во всех возможностях и опциях третьей версии Vue.js, этот экспресс-курс для вас. Все уроки записаны заранее и построены по принципу «теория + практика». Ваши работы будут проверяться, а кураторы предоставят обратную связь. В процессе вы сделаете два проекта разной сложности, и они автоматически пополнят ваше портфолио. Есть три формата участия: можно учиться самостоятельно, с поддержкой куратора или выбрать полностью индивидуальный план.</li><li><a href="https://experts2.ru/ElfbQn?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue.js 3, Vue Router и Pinia</a> от Stepik. В этом курсе вам предстоит освоить Vue, Vue Router и Pinia на практике, создавая два полноценных приложения. Вы разработаете сервис для отображения прогноза погоды и SaaS-платформу для хранения веб-закладок. Курс идеально подойдет тем, кто уже уверенно чувствует себя в основах HTML, CSS и JavaScript и готов погрузиться в изучение одного из самых востребованных фронтенд-фреймворков — Vue.js.</li><li><a href="https://experts2.ru/CtxhTz?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Frontend разработчик на HTML, CSS и JavaScript</a> от Stepik. Вы изучите HTML, CSS, JavaScript, Figma, Photoshop, VS Code, Emmet, BEM, Bootstrap, Vue, Git, GitHub, Gulp. Также на курсе вам расскажут, как составить портфолио, резюме и взять первый заказ на фрилансе.</li><li><a href="https://experts2.ru/LxgqCl?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Курс Vue.js</a> от CyberBionic Systematics. Начните свой путь во Vue.js с уверенностью! Этот курс создан для новичков, которые хотят освоить востребованный фреймворк для быстрой и качественной разработки. Вы научитесь работать с формами, компонентами, динамическими данными и анимациями. А после успешного завершения курса получите именной сертификат — ваше первое официальное подтверждение новых навыков.</li><li><a href="https://experts2.ru/BcmUqy?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Frontend Junior (JavaScript + HTML/CSS + Vue.js)</a> от Stepik. На курсе вы освоите веб-разработку с полного нуля: вы не только изучите основы HTML и CSS, но и глубоко познакомитесь с JavaScript, научитесь работать с популярным фреймворком Vue.js и сможете писать чистый, структурированный код, который ценят в профессиональной среде.</li><li><a href="https://experts2.ru/jCOdly?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue JS и Vuex - пишем реальный проект с нуля</a> от Udemy. Очень практический курс, который учит веб-разработке на Vue JS и Vuex через создание настоящего проекта. Вы пройдете весь путь — от пустой папки до полностью рабочего приложения. Поймете, как правильно структурировать программу, создавать компоненты и модули, которые легко масштабировать, и дробить код на небольшие, удобные части. В каждом уроке есть доступ к готовому исходному коду, так что вы всегда сможете свериться и найти свои ошибки.</li><li><a href="https://experts2.ru/GNnhec?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue.js 2.5 Создаем сайт на Vue.JS с Firebase, Vuex и Router</a> от Udemy. Это практическое руководство по созданию сайта с использованием мощной связки технологий: Vue.js, Vuex и Router. Вы научитесь делать динамические и многофункциональные веб-приложения, прокачаете свои навыки в структурировании кода, работе с большими массивами данных и проектировании интерфейсов разной степени сложности. Материал курса разделен на тематические блоки, и каждый включает в себя практическую часть.</li><li><a href="https://experts2.ru/eDqdjY?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Игра на Vue.js</a> от Udemy. Интересный видеокурс по основам Vue.js, где вы будете создавать настоящую игру. Обучение разделено на две большие части. Первая посвящена интерфейсу: вы с нуля, используя HTML и CSS, сверстаете визуальную часть игры. Во второй части вы займетесь фреймворком Vue.js: напишете структурированный код, добавите алгоритмы и свяжете их с игровой механикой. В финале преподаватель посоветует, куда двигаться дальше и в каком направлении развиваться в IT.</li><li><a href="https://experts2.ru/dSyqXg?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue.js 2 с нуля до про</a> от Tocode. Этот курс поэтапно проведет вас по всем ключевым концепциям и возможностям фреймворка. Он предназначен для подготовки сильных разработчиков и содержит множество практических заданий разного уровня с комментариями и советами от экспертов. В итоге вы получите актуальные знания и навыки для создания динамичных и масштабируемых проектов.</li><li><a href="https://experts2.ru/eVJvmq?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">JavaScript. Программирование от основ до веб-приложений(+Vue.js)</a> от Stepik. На курсе вы освоите JavaScript через решение практических задач, с которыми сталкиваются разработчики в реальной работе. Вам предстоит создать собственное веб-приложение с интерактивными интерфейсами, работой с API и хранением данных, а также познакомиться с React и GitHub. В завершение вы изучите современные фреймворки, включая Vue.js, что позволит вам уверенно работать с самыми востребованными технологиями в веб-разработке.</li><li><a href="https://experts2.ru/jzfoIB?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue Level 2</a> от Дмитрия Лаврик. Здесь вас ждет полное погружение в разработку одностраничных приложений. Вы не просто изучите теорию, а на практике разберетесь с реальными challenges — от построения архитектуры до обработки серверных ошибок и настройки прав доступа. После каждого занятия — домашняя работа с персональной проверкой автора курса. Всегда можно задать вопрос лично Дмитрию во время живых занятий или в закрытом комьюнити, где собираются такие же увлеченные разработчики.</li><li><a href="https://experts2.ru/PqgfLo?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue.js - Разработка клиентских приложений</a> от Учебного центра «Шифт». Если вы уже работаете с веб-разработкой, но хотите вывести свои навыки на новый уровень, этот курс станет вашим надежным проводником в мир Vue.js. Вы глубоко поймете философию фреймворка и научитесь применять его для создания сложных интерфейсов — от концепции до реализации. Здесь дают именно те знания, которые сразу можно перенести в рабочие проекты.</li><li><a href="https://experts2.ru/VileDq?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Фронтенд - разработчик на Vue.js</a> от Специалист.ru. Это ваш шанс не просто изучить технологии, а полноценно освоить профессию. Начнете с верстки, постепенно перейдете к JavaScript и Git, а затем глубоко погрузитесь во Vue.js. В финале — два ценных документа: государственный диплом о повышении квалификации и международный сертификат. Идеальный вариант для тех, кто хочет не просто научиться программировать, но и получить официальное подтверждение своих знаний.</li><li><a href="https://experts2.ru/wYpyhM?sub1=tproger-kf&amp;sub2=kursy-vue-js&amp;sub4=netop">Vue.js</a> от Ильи Кантора. На основе проекта вы освоите возможности Vue, различные подходы к решению практических задач и ключевые библиотеки экосистемы. В процессе работы вы разработаете компактную библиотеку переиспользуемых UI-компонентов. Параллельно с изучением Vue будут рассмотрены смежные темы фронтенд-разработки: создание одностраничных приложений, работа с инструментами сборки, освоение Vite, основы тестирования и другие важные аспекты современной веб-разработки.</li></ul><h2>Бесплатные курсы Vue.js</h2><p>Начать знакомство с фреймворком можно без финансовых вложений. Хорошие курсы по Vue.js бесплатно познакомят с основами и помогут оценить перспективы дальнейшего углубленного изучения. Такие программы идеально подходят для знакомства с технологией и понимания ее возможностей. Практические задания и понятные объяснения сделают старт в разработке комфортным и интересным.</p><ol><li><a href="https://www.youtube.com/playlist?list=PLNkWIWHIRwMH7ahn9uvvc5PG3o1tLscgB">Vue.js</a> — webDev. Вы рассмотрите работу с JavaScript фреймворком Vue JS актуальной второй версии, а также изучите все необходимые темы и понятия, которые нужны, чтобы начать разрабатывать на Vue.</li><li><a href="https://www.youtube.com/playlist?list=PLuY6eeDuleIPrHjeWPtEw6KWni2W35-XO">Уроки по Vue.js</a> — ITDoctor. Курс состоит из двух глав, в которых вы научитесь работать с различными директивами на Vue.js, создавать циклы, методы и вычисляемые свойства. Плейлист подойдет для веб-разработчиков, которые уже имеют опыт в работе с языками HTML, CSS, JS и желательно понимающих, как работать с гитом.</li><li><a href="https://www.youtube.com/playlist?list=PLvTBThJr861yMBhpKafII3HZLAYujuNWw">Бесплатный курс по Vue.js</a> — JavaScript.Ninja. Курс по Vue.js от сообщества @vuejs_club, с помощью которого вы узнаете о компонентах, двустороннем связывании и еще о многих темах. Для наглядности автор рассматривает примеры разработки веб-приложений на демонстрации экрана. Дополнительно в содержании курса представлено несколько практикумов для самостоятельной работы.</li><li><a href="https://www.youtube.com/playlist?list=PL0lO_mIqDDFVVNsIt02JBIdBkjNVHIoum">Уроки Vue.js для начинающих</a> — Гоша Дударь. В этом видеокурсе вы изучите основные моменты, которые позволят создавать приложения и сайты на Vue.js. Спикер расскажет, как создавать базовые сайты и веб-приложения с нуля.</li><li><a href="https://www.youtube.com/playlist?list=PL-wEcSTifrSn5cae0gFQ7Gy7v3t6c7hLF">Постигаем Vue js: урок 0 - установка и основные понятия</a> — JAVA И SКРИПТЫ. Подборка обучающих видео, направленная на обучение разработчиков, которые имеют опыт программирования на JavaScript. Автор подробно рассмотрит темы по отрисовке графических объектов, подбора стилистики для проекта, работе с реактивностью, пользовательскими событиями и так далее.</li><li><a href="https://www.youtube.com/watch?v=XzLuMtDelGk">Vue 3 фундаментальный курс от А до Я</a> — Ulbi TV. В этом ролике вы разберете основные концепции Vue 3 и пройдетесь по нему от А до Я. Разработаете приложение с основными кейсами, которые встречаются везде: CRUD, сортировка, поиск, пагинация, динамическая пагинация. Также вы сделаете mixins, directives, изучим vuex и composition api.</li><li><a href="https://www.youtube.com/playlist?list=PLOjCcvKYFQgKqNqDBw8G2kLxFbrWYBqJ1">Vue 3</a> — AVIS TV. Теоретический курс, автор которого рассказывает о ключевых особенностях фреймворка Vue.js и его применении в среде веб-разработке. Вы узнаете, как установить программное обеспечение на компьютер и использовать его для создания проектов разной сложности.</li><li><a href="https://www.youtube.com/watch?v=U_-Ht_v-oAs">Vue 3 для начинающих / Разработка интернет-магазина Vue Sneakers</a> — Archakov Blog. Курс по Vue 3 для начинающих, в котором вы будете разрабатывать полноценный проект Vue Sneakers, а хранить данные будете на бесплатном сервисе Mokky.</li></ol><h2>Что такое Vue.js и каковы его ключевые преимущества перед другими фреймворками</h2><p>Vue.js — это как умный помощник для создания веб-интерфейсов. Представьте, что нужно сделать страницу динамической: добавить всплывающие окна, сортировку таблиц или обновляемые формы. Vue делает это постепенно — можно начать с малого, добавив пару-тройку строк кода в проект, а потом развивать до полноценного сложного приложения.</p><h2>Понятный без долгого изучения</h2><p>Фреймворки напоминают сборку мебели по запутанной инструкции — приходится постоянно сверяться со справочником. Vue же работает интуитивно: свяжите поле ввода и данные одной строкой v-model, организуйте цикл элементов через v-for, настройте реакцию на события через v-on. Код читается как обычное предложение — это ценится в командах, где важно быстро понимать друг друга.</p><h2>Не требует революционных изменений</h2><p>Если уже есть рабочий проект на чистом JavaScript или jQuery, Vue не заставит все переписывать. Можно внедрять его точечно — например, сделать интерактивным только фильтр товаров в каталоге или форму обратной связи. Это спасает, когда нужно модернизировать интерфейс без остановки основного функционала.</p><h2>Сам заботится о скорости</h2><p>Vue умно управляет обновлениями интерфейса. Когда данные меняются, он не перерисовывает всю страницу, а находит те элементы, которые нуждаются в обновлении. Как умный редактор, который вносит точечные правки в текст вместо полной перепечатки. Вы сосредотачиваетесь на логике, а фреймворк оптимизирует отображение.</p><h2>Единая экосистема</h2><p>Для типовых задач уже есть проверенные решения: Vue Router для навигации, Pinia для управления состоянием, Nuxt.js для сложных приложений. Они созданы одной командой, поэтому стыкуются друг с другом. Например, Nuxt.js из коробки решает проблемы с SEO — генерирует страницы так, что их сразу видят поисковики.</p><h2>Сообщество, которое помогает</h2><p>Документация Vue написана не для роботов, а для людей — с примерами и типичными сценариями из практики. Если возникают вопросы, в чатах и на форумах всегда найдется разработчик, который сталкивался с похожей задачей. Это ощущение поддержки важно, когда работаешь над сложным проектом.</p><h2>В чем разница между Vue 2 и Vue 3</h2><h2>Архитектура и реактивность</h2><p>Изменение скрыто «под капотом». Vue 2 использовал систему реактивности на основе Object.defineProperty. Это означало, что фреймворк мог автоматически отслеживать изменения только в тех свойствах, которые были в объекте с самого начала. Vue 3 перешел на современный стандарт JavaScript — Proxy. Теперь Vue отслеживает изменения, включая добавление или удаление свойств объекта и даже работу с массивами, без костылей. Для вас, как для разработчика, это означает предсказуемость и меньше скрытых ошибок.</p><h2>Composition API — новый способ организации кода</h2><p>Vue 2 предлагал только один способ структурировать логику компонента — Options API. Вся логика должна была быть разложена по «полочкам»: data, methods, computed и так далее. Это было просто для понимания новичкам, но в больших компонентах логика, относящаяся к одной задаче, оказывалась разбросана по разным разделам. Vue 3 представил Composition API — более гибкий подход, где вы группируете код по его функциональному назначению, а не по типу. Это похоже на написание обычных JavaScript-функций. Такой код легче организовать, переиспользовать и тестировать, особенно в сложных компонентах.</p><h2>Производительность и размер</h2><p>Vue 3 был переписан с прицелом на производительность. В результате базовая библиотека стала на 40% легче. Это ускоряет первоначальную загрузку приложения. Кроме того, механизм рендеринга был серьезно оптимизирован: Vue 3 научился умнее определять, какие части дерева компонентов нужно обновлять при изменении. Это приводит к меньшему количеству ненужных перерисовок и плавной работе интерфейса, особенно в приложениях с большим количеством динамических элементов.</p><h2>Лучшая поддержка TypeScript</h2><p>Если Vue 2 с TypeScript работал, но иногда вызывал головную боль из-за сложной типизации, то Vue 3 был изначально написан на TypeScript. Это означает, что поддержка типов стала первоклассной. Теперь ваша среда разработки (IDE) будет гораздо лучше понимать, что происходит в коде, предлагая умные подсказки и сразу находя многие ошибки. Это огромный плюс для поддержки и масштабирования больших проектов.</p><h2>Фрагменты и телепортация</h2><p>В Vue 2 каждый компонент должен был иметь один корневой элемент. Это часто приводило к появлению лишних div-оберток в разметке. Vue 3 позволяет компонентам возвращать несколько корневых элементов — так называемые Фрагменты (Fragments). Это делает DOM-дерево чище. Также появилась директива &lt;Teleport&gt;, которая позволяет «вырвать» кусок кода из одного места в компоненте и отрендерить его в другом месте DOM, что невероятно удобно для модальных окон, уведомлений и тултипов.</p><p>Важно понимать, что Vue 3 — это не разрыв с прошлым. Options API никуда не делся и по-прежнему поддерживается. Вы можете использовать старый добрый подход для компонентов и подключать Composition API там, где это нужно. Vue 3 предлагает больше возможностей, улучшенную производительность и современную основу для разработки, сохраняя при этом главную философию — постепенное внедрение и удобство для разработчика.</p><p>Выбирать курсы Vue.js нужно на четком понимании карьерных целей и текущего уровня подготовки. Начинающим разработчикам стоит обратить внимание на программы с проработкой основ JavaScript, тогда как опытным специалистам будут полезны узкоспециализированные уроки по продвинутым аспектам Vue.js. Внимание уделите наличию практических заданий и качеству обратной связи — эти факторы часто становятся решающими в освоении материала.</p><p><i>Приглашаем поделиться опытом в комментариях: какой из рассмотренных курсов показался сбалансированным? Возможно, вы уже обучались по одной из программ и добавите отзыв? Ваше мнение поможет другим читателям сделать выбор.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>10 VSCode расширений, которые реально повышают продуктивность</title>
      <link>https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost</link>
      <comments>https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost</guid>
      <description><![CDATA[<p>Топ-10 расширений VSCode для повышения продуктивности: форматирование, тестирование API, управление проектами и многое другое. Ускорьте свою разработку с лучшими инструментами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost">10 VSCode расширений, которые реально повышают продуктивность</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[BASIC]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 23 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Visual Studio Code — мощный редактор, который становится ещё лучше с правильными расширениями. В этой подборке мы собрали 10 инструментов, реально ускоряющих разработку: они избавляют от рутины и помогают сосредоточиться на главном — качественном коде.</p><h2>1. TabNine</h2><p>Если вам важна скорость — <a href="https://www.tabnine.com/">TabNine</a> стоит попробовать хотя бы ради этого. Расширение —  лёгкий AI-ассистент, который работает как умный автодополнитель кода, непохожий на аналоги вроде Codeium или Copilot.</p><p>TabNine обучен на миллионах строк открытого кода и умеет предсказывать, что вы напишете дальше, с учётом контекста проекта и языка. Отлично справляется с рутинными вещами: автозавершает функции, переменные, конструкции — всё быстро и чаще всего в тему.</p><p><b>Кому подойдёт</b>: тем, кто хочет ускорить набор кода, но не готов передавать весь проект в облако или открывать чат с Copilot. Поддерживает офлайн-режим и локальное обучение модели.</p><p>Плюсы:</p><ul><li>Работает из коробки, не требует тонкой настройки;</li><li>Есть локальная версия — удобно для закрытых проектов;</li><li>Поддерживает большинство языков и фреймворков.</li></ul><p><b>Чем полезен:</b> экономит время на повседневной разработке — особенно когда вы не хотите отвлекаться на документацию или поиск нужной переменной в другом файле.</p><h2>2. GitLens</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a> встраивает историю изменений прямо в VSCode — и делает это максимально удобно. Показывает, кто и когда изменил строку, коммит-месседж, хэш, ветку и другие детали. Можно не уходить в консоль или отдельный Git-клиент для поиска информации.</p><p>Особенно полезен, когда работаете с чужим кодом или хотите быстро вспомнить, зачем вы сами что-то написали месяц назад.</p><p><b>Кому подойдёт</b>: тем, кто работает в команде, часто читает историю изменений или ревьюит чужие коммиты. Также пригодится в проектах с долгой историей или нестабильным кодом.</p><p>Плюсы:</p><ul><li>Информация о коммитах отображается прямо в редакторе под строкой;</li><li>Есть таймлайн изменений файла;</li><li>Удобный diff по коммитам, авторам, веткам и даже фрагментам кода.</li></ul><p><b>Чем полезен:</b> помогает быстрее разбираться в чужом коде, искать причины бага или откатывать ошибки. Особенно ценится за то, что делает Git прозрачным и доступным прямо в процессе разработки.</p><h2>3. Error Lens</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens">Error Lens</a> выводит диагностику ошибок и предупреждений прямо в строке кода. Это расширение превращает сообщения линтеров и компиляторов в наглядные подсказки, позволяя сразу видеть, что пошло не так.</p><p>Можно настроить отображение: выделять ошибки цветом, добавлять иконки или даже показывать краткие подсказки с предложениями по исправлению. Поддерживает большинство языков и линтеров, включая ESLint, TypeScript и других.</p><p><b>Кому подойдёт:</b> разработчикам, которые хотят моментально видеть ошибки в коде, и тем, кто ценит визуальную чистоту и скорость отладки.</p><p>Плюсы:</p><ul><li>Ошибки и предупреждения отображаются прямо в редакторе, рядом со строкой кода;</li><li>Гибкая настройка стилей и уровня детализации сообщений;</li><li>Ускоряет процесс отладки, особенно при работе с большими файлами.</li></ul><p><b>Чем полезен:</b> минимизирует время на поиск и анализ ошибок, позволяя сразу фокусироваться на их исправлении. Это особенно ценно, когда вы пишете код в реальном времени или работаете с новыми библиотеками, где легко допустить мелкие недочёты.</p><h2>4. Path Intellisense</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense">Path Intellisense</a> — одно из тех расширений, которое просто работает и экономит кучу времени. Оно автоматически подсказывает пути к файлам, папкам и модулям в вашем проекте, как только вы начинаете их набирать. Поддерживает абсолютные и относительные пути, учитывает структуру проекта и форматирует предложения так, как это принято в выбранном языке.</p><p>Работает особенно хорошо в проектах с вложенной структурой, когда нужно быстро сослаться на компоненты, конфиги или ассеты.</p><p><b>Кому подойдёт</b>: всем, кто устал вручную прописывать длинные relative-пути или путаться в структуре проекта. Особенно выручает на фронтенде, где модулей десятки и легко ошибиться в названии.</p><p>Плюсы:</p><ul><li>Подсказки появляются автоматически при наборе пути;</li><li>Поддерживает большинство языков и фреймворков;</li><li>Учитывает jsconfig.json и tsconfig.json при работе с alias-ами.</li></ul><p><b>Чем полезен</b>: снижает количество опечаток и неверных импортов, ускоряет переход между файлами и помогает писать код чуть быстрее.</p><h2>5. TODO Highlight</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">TODO Highlight</a> подсвечивает комментарии с задачами (например, TODO, FIXME, NOTE) прямо в коде, делая их заметными и удобными для отслеживания. Расширение помогает не терять важные заметки, которые вы оставляете в коде, и быстро находить места, требующие доработки.</p><p>Можно настроить ключевые слова, цвета подсветки и даже добавить свои собственные метки. Работает с любыми языками программирования и интегрируется с панелью задач VSCode для удобного обзора всех TODO в проекте.</p><p><b>Кому подойдёт</b>: разработчикам, которые оставляют заметки в коде, и командам, которым нужно быстро находить задачи или недочёты в проекте.</p><p>Плюсы:</p><ul><li>Яркая подсветка TODO-комментариев прямо в редакторе;</li><li>Гибкая настройка ключевых слов и стилей;</li><li>Интеграция с панелью задач для быстрого обзора.</li></ul><p><b>Чем полезен</b>: экономит время на поиск и управление задачами в коде, помогая не упустить важные доработки или напоминания. Особенно удобно в больших проектах, где комментарии могут затеряться среди строк.</p><h2>6. Prettier – Code formatter</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">Prettier</a> — расширение, которое автоматически приводит ваш код к единому стилю, избавляет от ручной правки отступов, кавычек и переносов. Оно поддерживает множество языков (JavaScript, TypeScript, CSS, HTML и другие) и интегрируется с линтерами, чтобы ваш код был не только красивым, но и консистентным.</p><p>Можно настроить правила форматирования под ваш проект или использовать готовые пресеты. Prettier форматирует код при сохранении файла или по команде, а также работает с выделенными фрагментами.</p><p><b>Кому подойдёт</b>: разработчикам, которые хотят экономить время на форматировании, и командам, стремящимся к единообразию кода.</p><p>Плюсы:</p><ul><li>Автоматическое форматирование при сохранении или по хоткеям;</li><li>Поддержка множества языков и кастомных настроек;</li><li>Интеграция с ESLint и другими инструментами для проверки кода.</li></ul><p><b>Чем полезен:</b> убирает рутину ручного форматирования, снижает количество ошибок в стиле кода и помогает сосредоточиться на логике, а не на внешнем виде. Идеально, чтобы ускорить работу и поддерживать чистоту в больших проектах.</p><h2>7. Live Server</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">Live Server </a>запускает локальный сервер прямо из VSCode, позволяя просматривать изменения в HTML, CSS и JavaScript в браузере в реальном времени. После сохранения файла страница автоматически обновляется, что исключает необходимость ручного перезапуска или обновления браузера.</p><p>Поддерживает кастомные порты, HTTPS, и работает с любыми фронтенд-проектами, от простых HTML-страниц до сложных приложений на React или Vue. Можно настроить, чтобы сервер открывался автоматически при запуске проекта.</p><p><b>Кому подойдёт</b>: фронтенд-разработчикам, которые работают над веб-интерфейсами и хотят мгновенно видеть результат изменений без лишних действий.</p><p>Плюсы:</p><ul><li>Автоматическое обновление страницы при изменении кода;</li><li>Простая настройка и поддержка HTTPS для безопасного тестирования;</li><li>Лёгкий запуск сервера прямо из редактора.</li></ul><p><b>Чем полезен</b>: ускоряет цикл разработки и тестирования веб-приложений, избавляет от ручного обновления страниц. Это особенно экономит время при частых правках в стилях или скриптах, так как можно сразу видеть результат в браузере.</p><h2>8. Project Manager</h2><p>Если работаете над несколькими проектами одновременно — это расширение сэкономит вам часы. <a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager">Project Manager</a> позволяет создавать список избранных проектов и открывать их в один клик, без ручного поиска папок и недавних вкладок.</p><p>Можно задать свои алиасы, группировать по папкам, запускать с хоткеев — особенно удобно, если у вас десятки репозиториев на локалке или вы фрилансите на несколько команд.</p><p><b>Кому подойдёт</b>: разработчикам, которые ведут сразу несколько проектов, часто переключаются между ними и устали искать нужный путь через File &gt; Open Folder.</p><p>Плюсы:</p><ul><li>Быстрое переключение между проектами через интерфейс или хоткеи;</li><li>Поддержка избранного и тэгов;</li><li>Можно автоматически подтягивать все папки из заданной директории.</li></ul><p><b>Чем полезен:</b> избавляет от рутинных действий при переходе между проектами — особенно когда важно не терять фокус и не сбиваться с рабочего темпа.</p><h2>9. Code Spell Checker</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker </a>выявляет орфографические ошибки в комментариях, строках и именах переменных прямо в редакторе VSCode. Расширение подчёркивает опечатки волнистой линией и предлагает варианты исправления через Ctrl+. или Cmd+., что позволяет быстро исправить ошибки.</p><p>Поддерживает множество ЯП и словари для разных языков (английский, русский, немецкий — с дополнительными расширениями). Можно добавлять свои слова в пользовательский словарь или игнорировать определённые термины, чтобы адаптировать проверку под проект. Работает с camelCase и snake_case, не помечая их как ошибки.</p><p><b>Кому подойдёт</b>: разработчикам, которые пишут много комментариев или документации в коде, и тем, кто хочет избежать опечаток в строках, API или логах, чтобы повысить читаемость.</p><p>Плюсы:</p><ul><li>Мгновенное обнаружение ошибок с подсказками для исправления;</li><li>Гибкая настройка словарей и игнорируемых слов;</li><li>Поддержка технических терминов и различных стилей написания кода.</li></ul><p><b>Чем полезен:</b> экономит время на поиск и исправление опечаток, особенно в документации или пользовательских сообщениях, которые могут повлиять на восприятие проекта.</p><h2>10. REST Client</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client">REST Client </a>позволяет отправлять HTTP-запросы и просматривать ответы непосредственно в VSCode. Достаточно создать файл с расширением .http или .rest, написать запрос в простом текстовом формате, и вы увидите кнопку Send Request для моментального выполнения.</p><p>Поддерживает все типы запросов (GET, POST, PUT, DELETE и другие), авторизацию (Basic, OAuth, JWT), переменные окружения и даже генерацию кода на разных языках. Запросы можно сохранять в репозиторий, что удобно для командной работы. Расширение также позволяет использовать динамические переменные по типу {{$timestamp}} или {{$guid}}, всё для гибкой настройки запросов.</p><p><b>Кому подойдёт</b>: тем, кто работает с REST API и хочет тестировать эндпоинты прямо в VSCode, сохранять запросы в проекте и почти не переключаться между инструментами.</p><p>Плюсы:</p><ul><li>Простая отправка запросов через .http или .rest файлы с кнопкой Send Request;</li><li>Поддержка переменных окружения и авторизации для сложных API;</li><li>Возможность сохранять запросы в репозитории для совместной работы.</li></ul><p><b>Чем полезен:</b> ускоряет тестирование API, устраняет необходимость в сторонних приложениях. Запросы хранятся рядом с кодом, что упрощает документирование и повторное использование, особенно в проектах, где API-вызовы нужно часто проверять или делиться ими с командой.</p><p><i>А какими расширениями пользуетесь вы? Пишите в комментариях!</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Будущее фронтенда: куда движется React, Vue и Angular</title>
      <link>https://tproger.ru/articles/budushhee-frontenda--kuda-dvizhetsya-react--vue-i-angular</link>
      <comments>https://tproger.ru/articles/budushhee-frontenda--kuda-dvizhetsya-react--vue-i-angular?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/budushhee-frontenda--kuda-dvizhetsya-react--vue-i-angular</guid>
      <description><![CDATA[<p>Как изменились React, Vue и Angular за последние 5-10 лет? Эксперты ответили, что будет с фронтенд-разработкой в 2026 году и стоит ли переходить на фреймворки без VDOM и гидратации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/budushhee-frontenda--kuda-dvizhetsya-react--vue-i-angular">Будущее фронтенда: куда движется React, Vue и Angular</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Паттерны проектирования]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>За последние пять лет IT-сфера изменилась так сильно, что джун из 2020 года сегодня бы не прошёл собеседование на ту же позицию.</p><p>Если вы фронтенд-разработчик или только планируете им стать, эта публикация поможет вам сориентироваться в текущей ситуации:</p><ul><li>Узнаете, какие крупные изменения произошли в React, Vue и Angular за последние 5-10 лет.</li><li>Поймёте, стоит ли учить новые фреймворки без виртуального DOM или лучше углубиться в проверенные решения.</li><li>Разберётесь, почему компании продолжают требовать знание React, хотя Solid.js работает быстрее.</li></ul><p>Тимлид и разработчики рассказали, как они видят будущее профессии. Объяснили, почему джуну недостаточно знать только JS, какие навыки помогут вам зарабатывать больше и оставаться востребованным специалистом.</p><p>ℹ️ <i>После прочтения вы сможете принять взвешенное решение: продолжать углубляться в текущий стек, осваивать новые инструменты или развивать смежные навыки.</i></p><h2>Как изменились React, Vue и Angular за последние 5-10 лет?</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-18/f488b013-32ed-47d0-ada9-3a1c3a84b59f.jpg" alt="" /></figure><h3>React</h3><p>До 2019 года разработчики писали объёмные классы с методами жизненного цикла. Они управляли состоянием через setState и передавали данные через пропсы. Потом появились <b>хуки </b>— с тех пор логику помещают в функции, состоянием управляют через useState и useReducer, побочные эффекты контролируют через useEffect.</p><p>Серверные компоненты решили проблему первой загрузки. Тяжёлые части приложения обрабатывает сервер и отправляет клиенту уже готовыми. Конкурентный режим разбивает отрисовку на части и расставляет приоритеты для обновлений — интерфейс не виснет, когда нагрузка возрастает.</p><h3>Vue</h3><p>Composition API сделал организацию кода более гибкой. Логику теперь группируют по функциональности, а не по типам опций. Ещё реактивность переписали с нуля на прокси-объектах, что ускорило отслеживание изменений.</p><p>Компилятор научился оптимизировать шаблоны на этапе сборки. Телепорты решили проблему с модальными окнами и всплывающими подсказками — компоненты отрисовываются в нужном месте DOM-дерева независимо от родителя.</p><p><a href="https://tproger.ru/articles/v-kakuyu-storonu-razvivaetsya-vue-i-est-li-emu-sovremennye-alternativy">В какую сторону развивается Vue и есть ли ему современные альтернативы</a></p><h3>Angular</h3><p>Каждый компонент сам определяет свои зависимости, поэтому пропала необходимость в модулях. <b>Сигналы</b> заменили зонную детекцию изменений. Теперь Angular точно знает, какие части интерфейса нужно обновлять.</p><p>Строгая типизация и декораторы сделали код более предсказуемым. Встроенные инструменты покрывают все потребности крупных проектов: формы с валидацией, маршрутизация с ленивой загрузкой, HTTP-клиент с перехватчиками.</p><p>Фреймворки уходят от сложных решений к более простым. Тренд последних лет — делать приложения быстрее для пользователей и удобнее для разработчиков.</p><p>Пока большая троица занималась «работой над ошибками», появился запрос на <a href="https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya">что-то</a> более лёгкое и быстрое.</p><h2>Фронтенд-фреймворки кажутся избыточными — возвращаемся к ванильному JS?</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-18/1af1ebd0-69e3-4f07-8d6d-053e8c3e70bb.jpg" alt="" /></figure><blockquote>Тот, кто попробовал фреймворки, никогда не вернется к чистому ванильному JS 🙂 Меняются и развиваются сами фреймворки, но тренда на отказ от них точно нет.</blockquote><p>Несмотря на тенденцию упрощения, разработчики сходятся во мнении, что полного отказа от фреймворков не произойдёт.</p><blockquote>В моде решения на основе концепции «исчезающих фреймворков», которые на выходе выдают почти чистый императивный JS-код. Дело в том, что это общий тренд в IT, где вся сложность и расчёты уходят в инфраструктуру, собирая минимальный бандл, где нет ничего лишнего для клиентов.</blockquote><p>Фреймворки — это ещё и способ стандартизации разработки в командах.</p><blockquote>Фреймворки никогда не будут избыточными. Один из первых вопросов на собеседовании —  инструмент, с которым ты умеешь работать. Больший пласт знаний сегодня — это фреймворк. Остальное, чаще всего, бизнес-логика того или иного проекта.</blockquote><p>Из-за критики традиционных фреймворков появился новый класс решений. Больше всего ругают VDOM и гидратацию, хотя они считались неотъемлемой частью современных SPA.</p><h2>Стоит ли переходить на фреймворки без VDOM и гидратации?</h2><p>Solid.js и Svelte уже несколько лет развивают концепцию тонкой реактивности. В 2021 году появился Qwik, который вообще отказался от гидратации.</p><blockquote>SolidJS хорош для аналогов десктопных приложений в браузере — Figma, Miro. Здесь приложение загружается один раз, а потом работает долго и должно быть максимально отзывчивым. Qwik отлично подойдёт, если вы создаёте сайт, куда пользователь приходит за контентом, и важно показать ему этот контент мгновенно.</blockquote><p>При этом массового перехода на новые фреймворки пока не происходит. Компании продолжают искать React и Vue разработчиков — проекты на Solid.js и Qwik остаются экспериментальными.</p><blockquote>Сами по себе фреймворки мало значат для коммерческой разработки без сторонних библиотек вокруг них. Вот когда критическая масса разработчиков популярных библиотек мигрирует на Qwik, а вместе с ними и сообщество, что-то сдвигается.</blockquote><p>Проблема новых фреймворков — это отсутствие экосистемы. React и Vue окружены тысячами готовых библиотек для любых задач. На Solid.js и Qwik большинство решений придётся писать самостоятельно.</p><blockquote>Без поддержки сообщества пользователей ни один инструмент не сможет стать массовым. Даже если работаешь в заказной разработке и есть возможность расширить кругозор команды, сомнительно брать на тест инструмент, под который придётся писать до 30% базового функционала.</blockquote><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-18/74e9b111-b93b-4fdf-a8b5-9db67bf7e95e.jpg" alt="" /></figure><p>Команды, которые захотят перейти на новые фреймворки, столкнутся с дополнительными сложностями. Разработчикам придётся учить новые концепции и подходы, а компаниям — тратить время и деньги на переобучение.</p><blockquote>У новых фреймворков высокий порог входа: вас ждёт переобучение команды и сложности ручной оптимизации.</blockquote><p>Технологии развиваются циклично. То, что сейчас кажется инновацией, переосмысливает старые подходы.</p><blockquote>Во времена DDR/DDR2 было сложно выполнять клиентский рендеринг, а вот серверам ресурсов хватало. Разработчики как могли воплощали подход, который сейчас называется SSR, и возвращали на клиент готовую разметку для компонентов. И никакого тебе VDOM.</blockquote><p>Пока новые фреймворки остаются нишевыми инструментами. React, Vue, Angular продолжат доминировать в коммерческой разработке за счёт экосистемы и сообщества.</p><h2>Как изменится роль фронтенд-разработчика в 2026 году?</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-18/6027e94f-65a4-4ab2-9364-6f5e322267f1.jpg" alt="" /></figure><p>В 2020 году джуниор находил работу, если знал HTML, CSS и основы JS. Сегодня работодатели требуют от новичков React или Vue, TypeScript, системы сборки — и это не конец списка. Ещё и вакансий на всех начинающих не хватает, компании сразу ищут мидлов.</p><p>Инструменты с искусственным интеллектом — Copilot, ChatGPT, Cursor — ускоряют работу. Они же повышают планку: если джун с помощью ИИ работает как мидл, то мидл должен демонстрировать более глубокие знания. Работодатели стали больше ценить тех, кто понимает принципы работы кода, а не просто копирует готовые решения.</p><blockquote>Зная JavaScript и любой инструмент даже не из большой тройки, с использованием AI можно быстро погрузиться в другой нужный инструмент.</blockquote><p>Чёткой границы между фронтендом и бэкендом больше нет. От фронтенд-разработчика ждут, что тот разбирается в серверной части, умеет настраивать процессы непрерывной интеграции и доставки, работает с базами данных.</p><h2>Какие навыки развивать разработчику, чтобы оставаться востребованным?</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-18/d62a3715-b713-4af3-8658-3ff4a6df7d85.jpg" alt="" /></figure><p>Технические навыки — это основа. Когда понимаете алгоритмы и структуры данных, вы пишете быстрый код. Когда знаете паттерны проектирования, ваши приложения легко поддерживать.</p><p><b>Учитесь быстро разбираться в новых инструментах вместо того, чтобы зацикливаться на одном фреймворке</b>.</p><blockquote>По мне так лучше быть фреймворк-агностиком, нежели фанатом одного, которого легко чем-то обидеть.</blockquote><p>Архитектурное мышление отличает <b>«</b>сильного<b>»</b> разработчика:</p><ul><li>Как организовать код, чтобы его легко поддерживать?</li><li>Как спроектировать API, чтобы оно не ломалось при изменениях?</li><li>Как построить систему, которая выдержит рост нагрузки?</li></ul><p>Те, кто решают эти вопросы, получают офферы с космическими зарплатами.</p><p><b>Софт-скиллы</b> тоже влияют на карьерный рост:</p><ul><li>Объясните техническую проблему менеджеру простыми словами.</li><li>Проводите код-ревью так, чтобы не обидеть коллегу, но улучшить код.</li><li>Оценивайте сроки и управляйте ожиданиями.</li><li>Аргументируйте выбор технологии.</li></ul><p>Когда вы понимаете бизнес, вы становитесь партнёром. Почему мы делаем эту фичу? Как она повлияет на метрики? Какие есть альтернативы? Разработчик, который мыслит категориями бизнеса, становится незаменимым.</p><p>Рынок вынуждает постоянно учиться, потому что индустрия меняется каждый год. Кто застревает в зоне комфорта — отстаёт.</p><p><i>Как ChatGPT повлиял на ценность вашего труда? Успеваете подстраиваться под требования рынка, параллельно работать и пробовать новые технологии? Делитесь в комментариях.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Оффер во фронтенде в 2025 году: как получить и не облажаться</title>
      <link>https://tproger.ru/articles/offer-vo-frontende-v-2025-godu--kak-poluchit-i-ne-oblazhatsya</link>
      <comments>https://tproger.ru/articles/offer-vo-frontende-v-2025-godu--kak-poluchit-i-ne-oblazhatsya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/offer-vo-frontende-v-2025-godu--kak-poluchit-i-ne-oblazhatsya</guid>
      <description><![CDATA[<p>Как получить оффер во фронтенде в 2025: разбор кейса с ментором Дмитрием Борцовым. Советы по резюме, переговорам и навыкам, которые помогли кандидату выйти на зарплату в 380К. Анализ рынка и типичных ошибок.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/offer-vo-frontende-v-2025-godu--kak-poluchit-i-ne-oblazhatsya">Оффер во фронтенде в 2025 году: как получить и не облажаться</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Тимлид]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 18 Sep 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рынок фронтенда в 2025 всё ещё платит <a href="https://thecode.media/">хорошо</a>, но платит выборочно. Те, кто умеет строить интерфейсы с мыслью об архитектуре, производительности и продукте, получают предложения, которые заметно выше среднего. На примере <a href="https://t.me/soft_skillz">нашего шоу </a>«Код найма» и кейса ментора Дмитрия Борцова совместно с менти Ярославом Грачёвым покажем, как корректная упаковка, таргетинг и умелая переговорная стратегия превращают «сложный» поиск в оффер на 380к.</p><p>Дмитрий Борцов — руководитель разработки клиентских интерфейсов в PREMIER.ONE. В его подчинении более 60 инженеров, распределённых между вебом, Android, iOS и SmartTV. В индустрии он уже 15 лет: прошёл путь от фриланса и собственной студии до руководства крупными командами. Такой опыт, как он сам говорит, позволяет видеть рынок «с двух сторон» — понимать, что нужно бизнесу и какие компетенции позволяют разработчику стоить дороже. Сегодня Дмитрий совмещает управленческую роль с менторством: вместе с техлидом PREMIER.ONE Андреем Автушенко он развивает платформу <a href="https://frontend-alliance.ru/?utm_source=tproger&amp;utm_medium=post&amp;utm_campaign=kodnaimafinal&amp;utm_content=tproger">Frontend Alliance</a>, где в формате парного наставничества помогает фронтендерам — от джунов до тимлидов — прокачивать хард и софт скиллы, готовиться к собеседованиям и строить карьеру с опорой на реальную практику.</p><h2>Фронтенд под давлением: рынок стал жёстче, но не умер</h2><p>Сегодня фронтенд-разработчикам всё чаще приходится отвечать на вопрос: «А рынок-то живой или всё?» Картинка действительно изменилась. Ещё несколько лет назад компании практиковали агрессивный найм: быстро расширяли команды, нанимали десятки разработчиков сразу, а через полгода без сожалений сокращали половину штата. Это было дорого, но при низкой ключевой ставке позволительно: деньги горели, но продукт успевал расти.</p><p>Теперь правила другие. Ключевая ставка выросла, бюджеты сократились, и каждая новая должность в команде проходит через многослойный фильтр. Набрать людей «про запас» уже нельзя, поэтому требования к кандидатам стали заметно выше.</p><p>Тем не менее, говорить о «смерти» фронтенда было бы <b>ошибкой</b>. Спрос не исчез, он просто сузился до тех, кто способен приносить реальную ценность. И здесь проявляется давний раскол: 95% специалистов ограничиваются задачами уровня интерфейсной косметики, а оставшиеся 5% умеют проектировать системы, предлагать архитектурные решения и смотреть шире макета. Именно за этих людей компании будут бороться при любых условиях.</p><p>Интересно, что попасть в эти «пять процентов» можно и на старте. Даже среди джунов встречаются разработчики, которые выделяются скоростью обучения, широтой мышления и готовностью брать на себя ответственность. Для них рынок остаётся открытым, тогда как «среднячки» рискуют застрять в бесконечных собеседованиях.</p><h2>Что должен уметь фронтендер в 2025 году и как попасть в «5% из 95»</h2><p>Уровень middle и senior во фронтенде больше не определяется знанием пары фреймворков. Базовый «джентльменский набор» очевиден: HTML, CSS, JavaScript и хотя бы один современный фреймворк — React, Vue, Angular или Svelte. Сегодня к нему де-факто добавился TypeScript: без него в резюме вы рискуете выглядеть устаревшими, даже если на проекте TS практически не используется. Работодатели хотят видеть уверенную работу с ним, потому что это напрямую ассоциируется со стабильностью и предсказуемостью кода.</p><p>Дальше идут надстройки, которые начинают выделять кандидата. Это метафреймворки вроде Next.js или альтернативы с упором на SSR и SSG, понимание разных паттернов рендера и умение применять их под конкретный продукт. Сюда же — юнит-тесты. Никто не будет устраивать экзамен на знание Jest, но сам факт владения тестированием сразу повышает ценность инженера.</p><p>Самый заметный маркер — архитектурные практики. Фронтендер, который мыслит архитектурно, понимает FSD, может объяснить, зачем нужны микрофронты (и когда они не нужны), сразу выделяется на фоне тех, кто «просто собирает фичи». Настроить приложение так, чтобы через два года его не пришлось переписывать, — это компетенция, которая превращает разработчика в дорогого специалиста.</p><p>При этом стек сам по себе не делает из мидла сеньора. Настоящее отличие — в мышлении. Сеньор умеет общаться с соседними командами, отстаивать нужные изменения в API или инфраструктуре, учитывать долгосрочные риски продукта. Это опыт, который не заменят ни курсы, ни туториалы. И именно он отличает того, кто «пишет код», от того, кто создаёт систему.</p><h2>Найм и подготовка кандидата: где спотыкаются фронтендеры</h2><p>Первое, что бросается в глаза при просмотре резюме фронтендеров, — это ошибки самопрезентации. Человек может написать «переписал приложение на новый фреймворк» и не уточнить, что это сократило время загрузки на 30% или сняло половину багов в проде. Для HR выглядит как рядовая строчка, хотя на деле это серьёзное достижение. Добавим сюда непонимание того, как работает HeadHunter: большинство кандидатов просто игнорируют логику поиска и фильтров, и их резюме тонет в выдаче. В итоге, 85% проблем — это не недостаток скиллов, а то, как они упакованы.</p><p>Работа ментора начинается именно с этого: помочь собрать рабочее резюме и научить играть по правилам площадок. Но это лишь малая часть. Основная работа — скорректировать харды и софты, довести знания до актуального уровня, натренировать коммуникацию. Ведь первое собеседование с HR часто решает, <b>попадёте ли вы вообще на технический этап</b>. Поэтому вместе с резюме разбирается поведение: как отвечать рекрутеру, какие вопросы задавать, как «продавить» интерес к себе.</p><p>Типичный план менторской работы занимает от двух до шести недель у специалистов с опытом — если задача ограничивается «освежить знания и подтянуть резюме». Для выпускников массовых онлайн-курсов это уже четыре месяца и больше: приходится достраивать базу, убирать пробелы, переучивать. У новичков срок может растянуться до полугода и дальше, и тут всё зависит от предрасположенности к стеку и дисциплины.</p><p>Отдельный вызов — мотивация. Когда человек месяцами безуспешно ищет работу, у него закономерно опускаются руки. Но ментор — не коуч по вере в себя. Его задача — показать ошибки, дать направление, поддержать обратной связью. А вот сама мотивация должна рождаться внутри. Часто оказывается, что проблема банальна: кандидаты игнорируют рекомендации. Например, используют автокликеры, которые рассылают сотни откликов без сопроводительных писем. Конверсия такого «спама» очевидна: <b>нулевая</b>. Настоящая работа требует внимания к деталям, дисциплины и готовности честно исправлять свои ошибки.</p><h2>Кейс «Кода найма»: как Ярослав Грачёв выбил оффер в 380К</h2><p>Когда к Дмитрию обратился Ярослав, сразу стало ясно: этот кандидат будет работать до конца. Мотивация была жёсткой — беременная жена, переезд в Москву, ипотека. На первом звонке ментор проверил главное: что Ярослав не «красит кнопки», а действительно решает задачи. Этого хватило, чтобы выстроить доверие и составить план.</p><p>Первое, что пришлось менять, — резюме. Вместо сухого «работал три года» появилось описание проектов и секция «Обо мне». Ярослав даже перефотографировался, чтобы профиль выглядел живым. Параллельно он учился работать с алгоритмами HeadHunter и GPT: HH поднимал резюме в выдаче, а бот имитировал собеседования. Через две недели у кандидата уже был первый оффер.</p><p>Ситуация была интересной: предложение на 300 тысяч выглядело заманчиво, но ментор настоял не торопиться. Аргументы были простыми: поток откликов и приглашений уже пошёл, значит, офферы будут и дальше. Они вместе придумали безопасную отговорку для HR и договорились ждать неделю. Ставка сыграла — скоро пришёл новый оффер на 360 тысяч.</p><p>И тут началась работа с переговорами. Дмитрий считал, что Ярослав стоит дороже, и предложил сыграть на личных обстоятельствах: «Переезд, ипотека, второй ребёнок — дайте больше». Обычно такой прямолинейный запрос не работает, но в этот раз HR пошёл навстречу и поднял ставку ещё на 20 тысяч. Сработало сочетание доверительной коммуникации и того, что за спиной у кандидата был запасной оффер.</p><p>По словам Дмитрия, ориентироваться стоит не только на цифру. Сигналы того, что можно просить больше, — это стабильный поток интервью и высокая конверсия в техсобесы. Если три технички в неделю превращаются в офферы, значит, цена кандидата — вопрос времени и настойчивости.</p><p>А дальше начинается игра на рынке: один оффер на 250 можно держать как «аварийный», второй на 300 использовать для торга, третий — поднять до 350. Главное — не зажиматься на звонках с HR: «их мотивация — провести тебя дальше, деньги они получают за закрытых кандидатов», — напоминает Дмитрий. Поэтому правило простое: дружелюбие, открытость и готовность разговаривать.</p><p>Итог кейса Ярослава показал, как за 14 дней можно пройти путь от шаблонного резюме до оффера выше ожиданий. Но за этим стояла системная работа: переписанное CV, домашка с тренировками, переговорные сценарии и дисциплина кандидата.</p><h2>Советы начинающим фронтендерам</h2><p>Дмитрий выделяет несколько аспектов, которым стоит уделять внимание в вопросе оффера мечты:</p><h3>Не рассчитывайте только на ментора</h3><p>Ментор может сильно ускорить путь: кто-то готовит к собесам, кто-то учит реально работать. Но это не панацея. Без самостоятельного копания в YouTube, статьях и пет-проектах вы просто застрянете. При этом нужно быть готовым к тому, что половина выученного окажется невостребованной, а рынок попросит ещё десяток дополнительных технологий.</p><h3>Начинайте с основы, а не с фреймворка</h3><p>Ключевой навык фронтендера — JavaScript. «Все есть JavaScript», — как сказал Илья Климов. React, Vue, Angular, Svelte — это лишь надстройки. Если понимаете сам язык и то, как он работает под капотом, вы сможете писать на чем угодно, хоть в фронте, хоть на Node.js в бэке.</p><h3>Не ведитесь на быстрые рецепты успеха</h3><p>Онлайн-школы и ютуберы любят обещать: «выучишь React — и всё в шоколаде». Но без знания JS никакой React не спасёт. На собеседованиях почти всегда спрашивают именно JavaScript, а не то, как вы намагичили интерфейс на очередном фреймворке.</p><h3>Думайте о том, зачем работает код</h3><p>Фронтендер, который просто копирует чужие решения, быстро упирается в потолок. Важно не только знать синтаксис, но и понимать, зачем язык ведёт себя именно так. Это отличает разработчика, который просто «собирает интерфейсы», от того, кто способен решать реальные задачи.</p><p>История Дмитрия Борцова и Ярослава Грачёва — это иллюстрация того, что даже в перегретом и избирательном рынке фронтенда можно найти своё место. Ключ к успеху — не только в технической базе, но и в умении правильно упаковать опыт, показать насмотренность и держать фокус на том, что важно работодателю. Для джунов это часто означает вложиться в JavaScript, а не в очередной модный фреймворк. Для мидлов и выше — развивать софты и стратегически подходить к собеседованиям. А для всех уровней — не замыкаться в одиночном обучении, а искать наставников и сообщество, которые помогают расти быстрее.</p><p>Фронтенд в 2025-м всё ещё щедр, но не прощает случайности. И чем раньше разработчик перестанет полагаться на удачу и начнёт работать над собой системно, тем выше шансы получить оффер, который изменит карьеру.</p>]]></content:encoded>
    </item>
    <item>
      <title>SolidJS и Qwik: фронтенд нового поколения</title>
      <link>https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya</link>
      <comments>https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya</guid>
      <description><![CDATA[<p>Обзор SolidJS и Qwik — плюсы и минусы фреймворков. Сравнение SolidJS и Qwik, практические рекомендации по переходу и тенденция отказа от React/Vue.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya">SolidJS и Qwik: фронтенд нового поколения</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 03 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Помните, когда впервые попробовали React/Vue после JS и jQuery?</b> Тот момент, когда всё встало на свои места, и вы поняли — вот оно, будущее фронтенда. В 2025 году разработчики <a href="https://www.reddit.com/r/solidjs/comments/1m4hlzj/im_really_impressed_with_solid/">испытывают</a> похожие чувства с SolidJS и Qwik.</p><h2>Последний рубеж React и Vue</h2><p><b>Согласны, что VDOM превратился в бюрократическую прослойку?</b> Изменили состояние в одном месте — получите полный пересчёт дерева компонентов. Фреймворки заставляют загружать всё сразу, тащат багаж служебного кода. И пока этот код не загрузится, пользователь смотрит на белый экран.</p><p>SSR <a href="https://tproger.ru/translations/rendering-on-the-web">ускоряет</a> загрузку страницы: сервер рендерит HTML, пользователь видит контент и пытается с ним взаимодействовать. Но пока JavaScript не загрузится, ничего не заработает.</p><p>Потом JS наконец подгружается и начинает гидратацию. По сути, он заново создаёт в памяти то же дерево компонентов, которое сервер уже отрендерил в HTML. Выполняется двойная работа. Кстати, в это время пользователь тыкает неработающие кнопки — дотерпит ли он до полной загрузки?</p><p>Системные проблемы не исправить очередным хуком или новой версией фреймворка, поэтому появление SolidJS и Qwik — было вопросом времени.</p><blockquote>Поиск новых решений — здоровый признак развития фронтенда. В конце концов, и Vue был создан потому, что Эвану Ю не хватало облегченной альтернативы AngularJS. Большая тройка фреймворков решает огромный спектр задач, имеет колоссальную поддержку сообщества, но их нельзя назвать идеальным инструментом на все случаи жизни.</blockquote><h2>Обзор SolidJS</h2><p>SolidJS во многом похож на React. Самое интересное — его подход к обновлению интерфейса:</p><ul><li><b>Отсутствие виртуального DOM</b> — Solid напрямую обновляет только те DOM-узлы, которые действительно изменились.</li><li><b>Компоненты как функции инициализации</b> — каждый компонент вызывается только один раз для настройки реактивности.</li><li><b>Сигналы вместо хуков</b> — состояние управляется через createSignal(), который возвращает геттер/сеттер пару.</li></ul><p>Например, когда срабатывает счётчик, Solid не перерисовывает весь компонент. Он точечно обновляет только текст внутри &lt;p&gt;, где используется count():</p><h3>Преимущества SolidJS</h3><p>👍 <b>Производительность и размер бандла</b></p><p>Благодаря отсутствию виртуального DOM и мелкозернистым обновлениям, приложения <a href="https://www.reddit.com/r/reactjs/comments/tsx8hw/solidjs_devex_compared_to_react/?tl=ru">работают</a> быстрее аналогов на React.</p><p>👍 <b>Простота освоения</b></p><p>Синтаксис SolidJS похож на React. Функциональные компоненты, JSX, концепции вроде Suspense и Error Boundaries — всё это есть в Solid. Изучение основ <a href="https://www.reddit.com/r/solidjs/comments/1len1pf/comment/myi8qci/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">займёт</a> 1-2 дня, если есть опыт с MobX/effector/RxJS.</p><p>👍 <b>Стабильность</b></p><p>Фреймворк находится на стабильной версии 1.x. Это означает отсутствие кардинальных изменений API, в отличие, например, от ситуации со Svelte, где сосуществуют версии 4 и 5 с разными подходами.</p><p>👍 <b>Совместимость с React</b></p><p>SolidJS совместим с экосистемой React. Можно переиспользовать дизайн-системы и компоненты в legacy-приложениях.</p><p>👍 <b>Удобное управление состоянием</b></p><p>Функционал сигналов и сторов покрывают 90% потребностей в управлении состоянием без необходимости подключать внешние библиотеки.</p><h3>Минусы SolidJS</h3><p>👎 <b>Ограниченная экосистема</b></p><p>Выбор готовых компонентов и библиотек значительно меньше, чем у React. Команды тратят больше времени на создание компонентов с нуля: тяжко при работе с таблицами, гридами, формами, валидацией.</p><p>👎 <b>Кривая обучения</b></p><p>Несмотря на знакомый синтаксис, модель реактивности SolidJS отличается от React. Разработчики должны усвоить следующие принципы:</p><ul><li>Избегать условных конструкций непосредственно в компонентах.</li><li>Не деструктурировать пропсы и сторы, чтобы сохранить реактивность.</li><li>Не использовать асинхронный код внутри createEffect.</li></ul><p>👎 <b>Проблемы с инструментарием</b></p><p>Возникают сложности с настройкой компилятора в нестандартных окружениях — монорепозиториях, при запуске тестов или интеграции с другими инструментами. DevTools не дотягивает до аналога у React.</p><p>👎 <b>SolidStart всё ещё развивается</b></p><p>SSR-решение SolidStart пока не достигло зрелости Next.js или Nuxt. Разработчики <a href="https://www.reddit.com/r/solidjs/comments/1len1pf/comment/myml5tt/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">сообщают</a> о проблемах с гидратацией и других сложностях при работе с серверным рендерингом.</p><h2>Обзор Qwik</h2><p>Qwik — это проект Мишко Хевери (создателя Angular). Идея фреймворка заключается в возможности возобновить работу приложения на клиенте без повторного выполнения кода, который уже был выполнен на сервере.</p><p>В Qwik радикально решили проблему гидратации — полностью отказались от неё. Время до интерактивности (TTI) падает в разы. Пользователь может кликать на кнопки сразу после загрузки HTML, без ожидания разогрева всего приложения.</p><p>Qwik автоматически разбивает код на мелкие чанки и загружает их только при необходимости. Символ $ в коде указывает на границы ленивой загрузки.</p><h3>Плюсы Qwik</h3><p>👍 <b>Мгновенная загрузка</b></p><p>Практически нулевой JavaScript при первоначальной загрузке, следовательно отличные показатели Core Web Vitals.</p><p>👍 <b>Автоматическая оптимизация</b></p><p>Оптимизация на уровне компилятора, умная предзагрузка критических ресурсов. Не нужно думать о разделении кода — Qwik делает это автоматически.</p><p>👍 <b>Знакомый синтаксис</b></p><p>👍 <b>Спасибо за SEO</b></p><p>Быстрая загрузка улучшает ранжирование за счёт полноценного SSR из коробки.</p><h3>Минусы Qwik</h3><p>👎 <b>Молодая экосистема</b></p><p>Ограниченное количество библиотек, мало готовых решений и компонентов. Небольшое сообщество разработчиков (если сравнивать с React/Vue).</p><p>👎 <b>Кривая обучения</b></p><p>Придётся изучать новые концепции. Из-за ленивой загрузки усложняется отладка.</p><blockquote>Qwik — это радикально новая ментальная модель. У фреймворка высокий порог входа: вас ждёт переобучение команды и сложности ручной оптимизации. Чтобы Qwik работал идеально, разработчик должен вручную указывать, что можно лениво загружать, а что нет.</blockquote><p>👎 <b>Сложность интеграции</b></p><p>Трудно интегрировать существующие React/Vue компоненты и ограниченная поддержка сторонних библиотек. Скорее всего, придётся с нуля переписывать код существующего проекта.</p><h2>Экосистема и готовность к продакшену</h2><p>Если сравнивать с React, то экосистема — самое слабое место обоих фреймворков.</p><p>SolidJS имеет SolidStart — метафреймворк с роутингом, SSR и серверными функциями. <a href="https://docs.solidjs.com/quick-start">Документация</a> качественная, сообщество активное. Большинство React-библиотек можно адаптировать без особых проблем, для популярных UI-китов есть готовые порты.</p><p>Qwik развивается в связке с <a href="https://qwik.dev/docs/qwikcity/">Qwik City</a>, который покрывает типовые задачи веб-разработки. <a href="https://www.builder.io/m/qwik">Builder.io</a> активно инвестирует в экосистему, регулярно выходят обновления и новые интеграции.</p><p>Риски есть, но они управляемые. Меньший размер сообщества означает меньше готовых решений и ответов на Stack Overflow. Если не боитесь изучать новое, то выигрыш в производительности перевесит неудобства.</p><h2>Сравнение SolidJS и Qwik</h2><p>SolidJS повышает производительность обновлений. Если данные меняются часто и непредсказуемо — графики, мониторинги, редакторы — Solid даст максимальную отзывчивость.</p><p>Qwik повышает производительность загрузки. Если бизнес зависит от первого впечатления, Qwik обеспечит мгновенный старт.</p><p><b>Медиа</b>, <b>блоги</b> с жёсткими требованиями к TTFB/TTI/INP будут лучше работать на Qwik. Пользователи смогут читать и скроллить без задержки. Интерактив добавляется дозированно — это лучшая стартовая стоимость.</p><p><b>E-commerce</b>, <b>каталоги </b>с SEO и карточками рекомендуется разрабатывать на Qwik. Особенно если на главной тяжёлые модули, а клиенты приходят с поисковиков. Вы выигрываете у конкурентов буквально на первом взаимодействии.</p><p><b>Сложный SPA</b> или <b>дашборд </b>с живыми виджетами и апдейтами будет лучше работать на SolidJS. Точечная реактивность упростит жизнь и снизит цену апдейтов. Solid сияет в проектах, где происходят сотни мелких изменений в секунду.</p><blockquote>Solid хорош для аналогов десктопных приложений в браузере — Figma, Miro. Здесь приложение загружается один раз, а потом работает долго и должно быть максимально отзывчивым. Также Solid будет хорош там, где важна плавность анимаций.</blockquote><p><b>Лэндинги</b>, <b>мобильные приложения</b>, <b>визитки</b> — здесь Solid даст сверхбыструю реактивность и облегчит сборку.</p><p>Оба фреймворка умеют SSR/SSG и стриминг. Solid снижает стоимость обновлений, Qwik — стоимость старта. Для LCP/TTI/INP в контентных сценариях выигрывает Qwik. Для интенсивных интерактивных сценариев Solid удерживает FPS и снижает CPU.</p><p>Оба дружат с серверными платформами. SolidStart имеет адаптеры для Vercel/Netlify, Qwik City — тоже.</p><blockquote>Выбирайте Solid.js, если вы создаете сервис, куда пользователь заходит надолго, и ему важна отзывчивость после загрузки. Выбирайте Qwik, если вы создаете сайт, куда пользователь приходит за контентом, и важно показать ему этот контент мгновенно.</blockquote><p>Немного выводов:</p><ul><li>Solidjs быстрее Qwik при рендеринге. Qwik быстрее Solidjs при загрузке страниц.</li><li>У Solidjs документация лучше, чем у Qwik.</li><li>С нуля код на Qwik писать проще и быстрее, чем на SolidJS.</li><li>Typescript в SolidJS может быть головной болью, в Qwik об этом можно не беспокоиться.</li></ul><h2>Практические рекомендации по переходу на SolidJS и Qwik</h2><ol><li><b>Начните с аудита текущих проблем</b>. Посмотрите метрики сайта: сколько времени занимает гидратация? Тормозят ли обновления интерфейса? Где именно проблема — на старте или в процессе работы?</li><li><b>Выберите изолированную часть проекта</b>. Возьмите один виджет, одну страницу, один компонент и реализуйте его на новом фреймворке. Измерьте разницу в производительности и удобстве разработки.</li><li><b>Если проблема в медленной загрузке</b> — попробуйте Qwik. Соберите прототип лендинга или каталога, включите SSG с resumability и протестируйте на медленном соединении.</li><li><b>Если проблема в тормозах интерфейса</b> — попробуйте Solid. Перепишите самый страдальный компонент с частыми обновлениями, уберите мемоизации и посмотрите на результат.</li></ol><p>Оба фреймворка собираются через Vite, имеют TypeScript из коробки и хорошую интеграцию с популярными инструментами. Стоимость эксперимента низкая, а потенциальная выгода высокая.</p><h2>Тенденция отказа от React/Vue</h2><blockquote>Компании и разработчики не столько отказываются от популярных решений, сколько перестают использовать их для всех задач подряд. Раньше выбора практически не было, и эти фреймворки были молотком, для которого любая задача — гвоздь.</blockquote><p><i>А вы что думаете? Готовы попробовать модные фреймворки SolidJS и Qwik в следующем проекте?</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как нейросети меняют систему рекомендаций</title>
      <link>https://tproger.ru/articles/kak-nejroseti-menyayut-sistemu-rekomendacij</link>
      <comments>https://tproger.ru/articles/kak-nejroseti-menyayut-sistemu-rekomendacij?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-nejroseti-menyayut-sistemu-rekomendacij</guid>
      <description><![CDATA[<p>Нейросети кардинально меняют рекомендательные системы — теперь они анализируют не отдельные действия, а целостный портрет человека. Разбираем революцию персонализации с экспертом AI VK.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-nejroseti-menyayut-sistemu-rekomendacij">Как нейросети меняют систему рекомендаций</a>»</p>]]></description>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[TikTok]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Смартфоны]]></category>
      <category><![CDATA[Рекомендательные системы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 14 Aug 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рекомендательные системы в цифровых платформах долгое время развивались обособленно, решая узкие задачи без общего представления о пользователе. Одна модель анализировала контент, другая — поведение, третья — занималась ранжированием. Такой подход не позволял системе до конца понять, что именно интересно человеку. Сегодня всё меняется: нейросети объединяют эти элементы в единую архитектуру, формируя целостную модель интересов. Вместе с руководителем рекомендаций в AI VK Андреем Зимовновым разбираемся, как новые подходы вытесняют старые и делают рекомендации по-настоящему персонализированными.</p><h2>Почему старые модели больше не работают</h2><p>Долгие годы рекомендательные системы состояли из десятков моделей, которые решали свои узкие задачи. На финальном этапе часто использовался градиентный бустинг — метод, при котором несколько слабых моделей, например, поведенческая (лайки и просмотры) и контентная (теги и описания), объединяются в одну, более точную и устойчивую. Такой подход плохо понимал контекст и динамику интересов пользователя. Например, если человек внезапно переключался с футбольных обзоров на кулинарные видео, система не могла быстро подстроиться. Сегодня это решается переходом к нейросетевым архитектурам, которые видят картину целиком.</p><h2>Как данные превращаются в рекомендации</h2><p>Современные системы кодируют и контент, и действия пользователей в эмбеддинги — векторы чисел, отражающие интересы и характеристики.</p><ul><li>Пользовательские эмбеддинги строятся по лайкам, просмотрам, времени активности, подпискам.</li><li>Контент кодируется по заголовкам, описаниям, тегам, обложкам, звуку и даже тону комментариев.</li></ul><p><b>Главная задача эмбеддингов — отобрать подходящий контент из миллионов вариантов.</b></p><ol><li>Всё начинается с отбора кандидатов. При помощи поиска ближайших соседей ANN (approximate nearest neighbor search), реализованного через FAISS или аналоги, за миллисекунды находятся тысячи кандидатов, которые хотя бы примерно соответствуют интересам пользователя.</li><li>После этого идёт этап предранжирования. Из тысячи кандидатов нужно выбрать пару сотен наиболее перспективных. Здесь уже работают алгоритмы градиентного бустинга, например, CatBoost или другие, выбор зависит от инфраструктуры. Они учитывают дополнительные признаки: насколько свежа публикация, насколько популярен автор, как часто пользователь взаимодействовал с похожим контентом.</li><li>Затем наступает финальное ранжирование. Применяются глубокие нейросети, включая  нейросетевые версии коллаборативной фильтрации, которые учитывают интересы похожих пользователей. Они прогнозируют, что пользователь будет делать дальше: досмотрит ли видео, поставит ли лайк или репостнёт. Здесь каждому кандидату уделяется особое внимание, ведь нужно выдать самые релевантные.</li></ol><p>Всё это работает на единой DataPlatform, которая собирает сигналы от пользователей и обучает модели. В VK для этого есть единая Discovery-платформа, которая собирает клики, лайки, поисковые запросы и обновляет эмбеддинги.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-13/b8cb46e1-666e-48a6-9f8a-49f0c9760b85.jpg" alt="" /></figure><h2>Нейросетевой зоопарк: что стоит под капотом</h2><p>В финальном ранжировании работает целая экосистема нейросетей. Это и многослойные перцептроны (MLP), и более сложные — сверточные (CNN), рекуррентные (RNN) и трансформеры.</p><h3>1. Трансформеры и большие языковые модели (LLM)</h3><p>Трансформеры — это тип нейросети, который умеет обрабатывать данные как последовательности. Возьмём предложение из трёх слов: «я ем Кафку». Трансформер не просто распознаёт значения отдельных слов — «я», «ем», «Кафку» — но и улавливает общий смысл фразы.</p><p>С помощью механизма self-attention он находит связи между элементами и понимает контекст. Это позволяет строить контекстные эмбеддинги — векторные представления, которые учитывают не только содержание, но и значение слов в конкретной ситуации. Так модель понимает, что в фразе «я ем Кафку» речь идёт о еде, а не о литературе.</p><p>В рекомендациях трансформеры анализируют действия пользователя как последовательность. Например, модель SASRec (Self-Attentive Sequential Recommendation), которая используется в VK, предсказывает, что может заинтересовать человека дальше, и уже даёт прирост точности на 2,5–3%.</p><p>Сильная сторона трансформеров — в умении распознавать связи между действиями пользователя, а не просто фиксировать каждое событие. Если человек будет стабильно взаимодействовать с определённым контентом, модель «поймёт», что это не случайность, и придаст этому интересу больший вес. При этом случайные действия, вроде одного нерелевантного клика, не исказят общую картину — механизм self-attention помогает отличать устойчивые паттерны от шумовых всплесков.</p><p>Трансформеры активно применяются в ранжировании, но изначально разрабатывались как универсальные архитектуры для работы с последовательностями.  А вот LLM, например, T5 или GPT, обучены на текстах. Они более гибкие: их можно настраивать также через текст и встраивать в диалог. Но они пока медленнее, требуют больше ресурсов и уступают в производительности на больших потоках.</p><h3>2. Мультимодальные модели</h3><p>Прорывной подход в рекомендательных системах. Они обрабатывают сразу несколько форматов: текст, изображения, звук. Всё это кодируется в векторы и сводится в общее пространство — часто тоже с помощью трансформеров. Так система понимает не только ключевые слова, но и смысл контента в разных форматах. По такому принципу работает Zelda — семейство моделей и фреймворк, лежащий в основе рекомендаций VK.</p><p>Раньше всё сводилось к матрице «пользователь × объект», где система пыталась предсказать оценки. Это работало, пока человек смотрел однотипный контент. Если пользователь смотрит обзоры гаджетов, то старая модель начинает искать похожие видео — с теми же тегами. Но если видео не помечено как «техника», система может его пропустить. Когда интересы меняются, алгоритм не понимает, почему пользователь внезапно увлёкся музыкой или историей.</p><p>Мультимодальные модели считывают сам контент: текст, видео, изображение — и ищут то, что объединяет их по смыслу. Это позволяет точнее угадывать неожиданные интересы, подстраиваться под смену вкусов и работать с новым, нестандартным контентом, который раньше выпадал из поля зрения.</p><h3>3. Диффузионные модели</h3><p>Диффузионные модели восстанавливают «чистые» предпочтения пользователя, убирая шум вроде случайных кликов и скипов. Например, вы смотрите обзоры смартфонов и случайно кликаете на видео про косметику с маркетплейса. Вы быстро переключили обратно на видео про смартфоны, и нейросеть понимает, что произошло, и не рекомендует видео про косметику.</p><p>Диффузионные модели особенно полезны при работе с разреженными и шумными данными — например, для новых пользователей. Такие модели, как DiffRec, показывают до 10% прироста точности на сложных датасетах и постепенно начинают конкурировать с трансформерами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-13/e8814674-8971-4448-abae-af159dd57e78.jpg" alt="" /></figure><h2>Система рекомендаций продолжит меняться</h2><p>Следующим этапом в развитии нейросетевых методов может стать переход к сквозным (end-to-end) архитектурам, когда одна большая нейросеть берёт на себя все функции сразу. Некоторые платформы, например, TikTok и YouTube, уже частично внедряют end-to-end пайплайны. Это снижает ошибки на промежуточных этапах и учитывает цели платформы — вовлечение и удержание.</p>]]></content:encoded>
    </item>
    <item>
      <title>Карьера через пет-проект: как выбрать идею и довести до результата</title>
      <link>https://tproger.ru/articles/karera-cherez-pet-proekt--kak-vybrat-ideyu-i-dovesti-do-rezultata</link>
      <comments>https://tproger.ru/articles/karera-cherez-pet-proekt--kak-vybrat-ideyu-i-dovesti-do-rezultata?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Владислав Устинов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/karera-cherez-pet-proekt--kak-vybrat-ideyu-i-dovesti-do-rezultata</guid>
      <description><![CDATA[<p>Разбираемся, как создать пет-проект и не выгореть: идея, MVP, обратная связь и упаковка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/karera-cherez-pet-proekt--kak-vybrat-ideyu-i-dovesti-do-rezultata">Карьера через пет-проект: как выбрать идею и довести до результата</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Notion]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 29 Jul 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Как найти идею для пет-проекта</h2><p>Новички, когда сталкиваются с пет-проектами, бросаются в две крайности. Создают очередной To-Do list, который ничем не выделяется, либо пытаются сделать что-то слишком сложное, например, убийцу Notion, и забрасывают работу на полпути. Так как же выбрать идею, которую получится довести до конца?</p><h3>Ключевые нюансы при выборе идеи пет-проекта</h3><p>Сначала надо подумать, какая у вас или вашего окружения есть проблема, которую вы могли бы решить своим проектом? Учите английский и любите сериалы? Так почему бы не сделать телеграм-бота, который будет присылать отрывки с определённой лексикой? Считаете своё резюме и портфолио слишком скучными? Можно оформить их в виде современного лендинга, правда придётся прикрутить интересные фичи, иначе это не пет-проект. Например, если вы фронтенд-разработчик, то можно сделать необычную анимацию, добавить несколько цветовых тем, демонстрацию проектов прямо на странице, интерактивную карту навыков и опыта.</p><p>Ваш «питомец» должен решать какую-то проблему и выделяться фишкой, иначе он никого не впечатлит.</p><blockquote>Впечатляют проекты, которые выглядят как реальные продукты. Например, когда кандидат делает пет-проект под конкретную потребность: финтех-дашборд, Telegram-бот или полноценное веб-приложение, которым уже пользуются или которое может быть полезно.</blockquote><blockquote>Как-то я пришёл на хакатон — занимался рекомендательными системами. Тогда был пик популярности Word2Vec — это модель, которая переводит слова в векторы и позволяет находить между ними смысловую близость. Я посмотрел на статистику и увидел: на одном из сайтов 25% запросов не давали результатов. Тут возникла идея, как это улучшить.<br /><br />Решил собрать демку и сделал прототип: например, на запрос «кресло из крокодиловой кожи» модель показывала зелёные кожаные кресла. Не крокодиловые, но всё равно релевантные запросу.<br /><br />За неделю допилил прототип до презентабельного состояния, показал коллегам и руководителю. Они дали «зелёный свет», через 2 месяца была первая MVP, которую уже начали продавать существующим клиентам. Ещё через месяц — первый клиент, интеграция, запуск.<br /><br />Спустя ~5 лет количество клиентов уже измерялось сотнями :)</blockquote><p><b>Подумайте, какие навыки хотите показать</b></p><p>Если делаете проект для портфолио, то можно выбрать несколько вакансий, на которые вы претендуете. Какие там требования к стеку, какие нужны навыки?</p><p>Например, если хотите работать фронтенд-разработчиком в онлайн-школе, то почему бы не сделать простое образовательное приложение на React и заточить его под себя? Смотрите, кого ищет рынок, и подстраивайтесь под его запросы.</p><p><b>Не затягивайте со сроками</b></p><p>Если рекрутер увидит, что вы полгода делали дизайн кнопки для сайта, то, скорее всего, подумает, что не умеете планировать работу и доводить проекты до конца.</p><p>Выбирайте несложный и интересный проект, который вы не затяните и который будет вам по силам.</p><blockquote>Основная ошибка — это незаконченные, «сырые» решения. HR смотрят на проекты, в том числе, как на способность завершать начатое. Если в портфолио много таких работ, это наводит на мысли, что разработчик быстро теряет интерес, плохо планирует время или бросает задачи при первых трудностях.</blockquote><p><b>Не используйте учебные работы, либо используйте их правильно</b></p><p>Многие онлайн-школы обещают готовое портфолио по окончании обучения, но оно обычно состоит из учебных проектов. В целом, это неплохо, но есть пара нюансов:</p><ol><li>У вас и ваших одногруппников эти работы одинаковые. Представьте лицо HR, когда он увидит несколько похожих проектов в разных резюме.</li><li>Учебные проекты не совсем ваши, ведь вы повторяли код и основные конструкции за преподавателями. Работодателю важно, как вы пишете сами, а не копируете.</li></ol><p>Следует разделять учебные проекты и пет-проекты. В первом случае вы осваиваете новые навыки и технологии, во втором стараетесь их показать. Выбрасывать работы с учёбы тоже не нужно, просто надо подумать, как их можно улучшить, какую фишку добавить, как переработать, чтобы отличиться от десятка таких же работ. Как пример, можно изменить фронтенд, добавить новую логику в бэкенд, разработать уникальную фичу.</p><h2>Всё равно не могу ничего придумать, что делать?</h2><p>Если самостоятельно не получается что-то придумать, то можно спросить у ИИ.</p><p>ChatGPT и другие языковые модели отлично умеют генерировать идеи на заданную тему. Часто в ответах появляются нестандартные, свежие задачи, которые вам бы и не пришли в голову. Даже если сгенерированные проекты кажутся банальными — всегда можно докрутить, добавить свою логику или фишку. Но используйте ИИ как вдохновителя, не просите его написать код проекта за вас — это будет заметно и станет не преимуществом, а «красным флагом».</p><p>Пример промпта для идеи пет-проекта:</p><p><b>Возьмите задачу с фриланса</b></p><p>Зайдите на любую фриланс-биржу и полистайте разделы с небольшими заказами. Часто там попадаются простые, но жизненные — например, сделать мини-сервис для бронирования столиков или инструмент для учёта личных трат. Никто не обязывает брать заказ — достаточно посмотреть, что нужно заказчикам, и сделать что-то подобное для портфолио.</p><p><b>Спросите друзей или аудиторию в соцсетях</b></p><p>Иногда самая классная идея приходит от окружения. Просто расскажите друзьям, что хотите сделать проект, и спросите, с какими неудобствами в жизни, работе или учёбе они сталкиваются. Кто-то устал вручную напоминать детям делать домашку — тут можно создать бота. Кто-то жалуется на путаницу в личных финансах — почему бы не собрать на эту тему простое приложение? Иногда полезные задачи всплывают и в тематических чатах или сообществах.</p><blockquote>У меня был разработчик, уставший от хаоса в списках фильмов, которые он хочет посмотреть. Сделал пет-проект — личный медиапланировщик с нейтральным UI. Проект не стал стартапом, но в портфолио смотрелся отлично. Если сложно — можно взять существующую идею и улучшить. Например, сделать привычный To do-лист с уклоном в UX, нейросети или интеграции. Главное — показать свою силу, а не сделать ещё один клон.</blockquote><h2>Как довести пет-проект до конца и не забросить его</h2><p>Вы выбрали идею для проекта, прикинули стек, сроки, пошли писать код и… забросили. Часто бывает, что вначале полны энтузиазма, а под конец либо ничего не получается, либо появляются мысли, что проект — пустая трата времени. Чтобы такого не было, лучше соблюдать следующие правила:</p><p><b>Чтобы сделать пет-проект, не делайте его.</b> По крайней мере, сразу. Мотивация — вещь непредсказуемая: сегодня идея кажется классной, а завтра — сущей ерундой. Не спешите сразу бросаться на проект, лучше дайте идее «настояться» неделю или две. Если прошло прилично времени, а руки всё ещё чешутся, то это хороший знак — за проект можно браться.</p><p><b>Определите для себя MVP</b> — минимальный рабочий продукт, который точно сможете довести до релиза. Всё, что не критично для запуска, сразу откладывайте, иначе перфекционизм и погоня за новыми фичами утащат вас на дно.</p><p>Например, если вы хотите сделать кроссплатформенный видеоплеер для изучения языков, то можно откинуть идею со встроенным ИИ, голосовым ассистентом и автоматической генерацией субтитров. Конечно, это всё здорово, но затягивает процесс. Простого перевода субтитров и автоматического создания карточек на первом этапе будет уже достаточно.</p><p><b>Разбейте проект на задачи и подзадачи.</b> Например, дизайн плеера, его вкладок, основная логика, подключение API, отладка.</p><p>Не забывайте отмечать выполненные задачи, когда мотивация вас покинет, у вас перед глазами будет уже какой-то прогресс, из-за которого жалко бросать работу на полпути.</p><p><b>Определитесь со сроками.</b> Пусть они будут примерными — главное, чтобы был ориентир. Например, дать себе месяц на MVP, неделю на запуск базовой версии, пару дней на исправление багов. Без сроков любая задача может растянуться, а когда есть конечная точка, появляется стимул не бросать начатое.</p><blockquote>Один из основных критериев — полезность продукта. Нет смысла изобретать велосипед. То, что вы создаёте, должно быть либо лучшего того, что уже есть, либо вообще уникальным. И тут не важно, в какой сфере вы решите это всё произвести, главное, чтобы было чёткое понимание, зачем это делается и какой будет итог. Проще говоря, без плана не нужно начинать, иначе велик риск всё забросить. Большая часть тех, кто начал и не закончил, как раз не прорабатывали свои идеи.</blockquote><p><b>Используйте знакомый стек.</b> Если этот проект нужен для портфолио, то лучше выбрать стек, в котором вы уже уверенно работаете. Иначе утонете в новом, не доведёте до конца, либо получите в итоге что-то непрезентабельное.</p><p>Конечно, это правило не абсолютное, использовать новые для вас технологии можно, просто это надо делать дозировано.</p><p>Если очень грубо, то ориентир выглядит так: 80% кода — это знакомый нам стек, 20% — место для экспериментов и обучения. Такой подход позволяет прокачать новые навыки и довести проект до финала без выгорания.</p><p><b>Занимайтесь регулярно по чуть-чуть.</b> Берегите себя, отдыхайте, не надо сидеть по 5 часов в день над проектом, если за него не платят. Вначале можно выезжать на мотивации, но со временем это приведёт к выгоранию.</p><p>Лучше постараться выработать привычку и заниматься петом, например, каждый день по 30 минут. Не можете соблюдать эту привычку по каким-то причинам? Не проблема, вместо 30 минут найдите 5. Да, за это время вы ничего не успеете, но сохраните «регулярность» —  на следующий день будет проще.</p><p><b>Делитесь результатами.</b> Не держите всё в столе, делитесь ходом работы и результатом. Покажите ваш MVP друзьям, обсудите его на форуме, заведите репозиторий на GitHub. Без обратной связи можно легко что-то упустить.</p><p>Аналогично с трудностями. Если сталкиваетесь с багами или просто чего-то не понимаете, то спрашивайте. В том же телеграм есть тематические чаты по пет-проектам, где можно запросить обратную связь.</p><p>А вот ещё несколько советов от Анастасии Егоровой — фронтенд-разработчика, автора  программы курса SkillBox по Vue 3 и ведущей ютуб-канала <a href="https://www.youtube.com/@CosyFrontendNastia">CosyFrontend</a>.</p><blockquote>Проблема пет-проектов в том, что их редко доводят до конца. Нет дедлайнов, нет ответственности перед руководством и коллегами, нет мотивации в виде будущей оплаты. Особенно сложно становится, когда пет-проект тянется уже не первую неделю, а первоначальная архитектура оказывается совсем неподходящей для дальнейшей разработки, что нередко бывает, когда мы пробуем новые технологии.<br /><br />У некоторых разработчиков количество таких заброшенных и недоделанных проектов — десятки штук. Что можно придумать для того, чтобы большинство ваших домашних проектов доводились бы до конца?<br /><br />1. Фиксировать прогресс, например, на доске Trello, чтобы самому видеть продвижение по проекту. Не забывать коммитить в гит. Некоторым разработчикам помогает отписываться о состоянии проекта в личный блог.<br /><br />2. Избегать перфекционизма — сначала сделать рабочую версию, а потом постепенно ее улучшать.<br /><br />3. Возвращаться без чувства вины — забросить проект может любой разработчик, у каждого из нас бывают авралы на работе, активности в жизни, выгорания, моменты прокрастинации.<br /><br />P.S. Когда мы обсуждали тему пет-проектов и их забрасывания в одном из айтишных чатов, один из разработчиков отметил: «А никак не нужно доводить их до конца — пет-проекты для того и существуют, чтобы попробовать на них новую идею и забросить». Так что такое мнение тоже есть, но справедливо ли оно для вас — решайте сами 😀</blockquote><h2>Как оформить пет-проект</h2><p>Для работодателя важен не столько масштаб проекта, сколько подход к работе, качество кода и умение доводить дело до конца, поэтому проект должен выглядеть презентабельно.</p><p><b>Поработайте над UI/UX.</b> Приятный и удобный интерфейс — ваш первый плюс в глазах работодателя. Потратьте время на то, чтобы кнопки, цвета и структура приложения были понятны с первого взгляда.</p><p>Чтобы убедиться, что пользователям удобно использовать сервис — запросите обратную связь у знакомых, коллег и родственников. Учтите их замечания.</p><p><b>Упакуйте проект в GitHub.</b> Если у вас пустой репозиторий, который называется my project, то проект никто не оценит. У HR большой поток откликов, иногда они принимают решение за пару секунд, поэтому очень важно, чтобы по вашему репозиторию как можно быстрее можно было понять, что вы сделали, как это работает и какие технологии вы использовали.</p><p>Сделайте подробное описание readme —  в паре абзацев расскажите, что это за проект, для кого, какие проблемы решает. Добавьте описание стека архитектуры. Чем подробнее, тем лучше.</p><p>Добавьте скриншоты, гифки, видео работы сервиса. А ещё лучше его демоверсию.</p><p>Постарайтесь проработать структуру проекта, чтобы она была логичной. В нём не должно быть дублей и мусора. Если кто-то впервые откроет ваш репозиторий, ему должно быть понятно, что это за проект.</p><p>То же самое с историей коммитов. Сделайте её читаемой с внятными комментариями, чтобы рекрутер видел не только ваш проект, но и процесс создания.</p><p>Опишите результаты  по конкретным метрикам, если, конечно, это возможно. Опубликовали приложение в Google play и получили хорошее удержание пользователей? Расскажите об этом. Вашу фичу оценили в социальных сетях? Поделитесь приятным фидбеком. Метрик нет, делали проект только под себя? Расскажите, как он помог вам решить проблему.</p><blockquote>Лучше всего оформить проект на GitHub с описанием задач, технологий и особенностей реализации. Выделяются разработчики, которые показывают, что не просто пишут код, но и обосновывают решение и объясняют, как всё устроено.<br /><br />Желательно, чтобы код был чистым, с продуманной архитектурой и, по возможности, прошёл ревью опытных коллег. Будет плюсом, если в проекте видно, что разработчик следит за качеством: пишет документацию и покрывает код тестами.</blockquote><p><b>Распишите проект как кейс.</b> Подготовьте шпаргалку. Это мини-история, где вы рассказываете о проекте. Какая проблема побудила вас его сделать, какие возникли трудности на этапе разработки, как их решали, какой получили результат. У вас получится подробное описание пути разработки от идеи до финала.</p><p>Это можно расписать в виде заметки, сделать пост в социальных сетях, опубликовать статью. Вы получите подробную шпаргалку, которую можно использовать для презентации проекта в портфолио или на собеседованиях.</p><p>Главное, не делайте проект ради проекта, старайтесь принести какую-то пользу и здраво оценивайте свои возможности.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я ушёл от REST и начал жить проще с Inertia.js</title>
      <link>https://tproger.ru/articles/kak-ya-uwyol-ot-rest-i-nachal-zhit-proshhe-s-inertia-js</link>
      <comments>https://tproger.ru/articles/kak-ya-uwyol-ot-rest-i-nachal-zhit-proshhe-s-inertia-js?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Чивирда]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-uwyol-ot-rest-i-nachal-zhit-proshhe-s-inertia-js</guid>
      <description><![CDATA[<p>Как упростить процесс создания веб-приложений, отказавшись от REST в пользу Inertia.js. В статье объясняется, как Inertia позволяет соединить Laravel и Vue без API, убрать дублирование кода, ускорить разработку и сохранить все плюсы SPA без лишней сложности. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-uwyol-ot-rest-i-nachal-zhit-proshhe-s-inertia-js">Как я ушёл от REST и начал жить проще с Inertia.js</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Веб-дизайн]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 26 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Меня зовут Сергей Чивирда, я PHP-разработчик в digital-агентстве <a href="https://www.ibrush.ru/">IBRUSH</a>. Мы в основном занимаемся дизайном и веб-разработкой. И сегодня я расскажу, как упростил себе жизнь, отказавшись от REST.</p><h2>Как всё устроено обычно и что в этом не так</h2><p>Если вы хоть раз писали современное веб-приложение, то наверняка шли по классической схеме: фронт на Vue или React, бэк на Laravel, Express или чем-то подобном. Между ними REST API. Иногда вместо REST используют GraphQL. Вроде всё по канону, но на практике возникает куча лишних проблем.</p><p>Первое, что раздражает — дублирование логики. Маршруты, валидация, обработка ошибок — всё приходится делать и на фронте, и на бэке. Получаются два мира, два набора кода, две точки отказа.</p><p>Плюс техническая возня. CORS, токены, CSRF-защита — всё это надо настраивать, поддерживать и отлаживать. А ещё ведь хочется, чтобы проект нормально индексировался поисковиками. Тогда подключаются Nuxt, Next, пререндеринг, мета-теги и куча других инструментов.</p><h2>Inertia.js — простое решение, которое сработало</h2><p>В какой-то момент я наткнулся на Inertia.js, и это был очень приятный сюрприз. Inertia — это не библиотека или фреймворк в привычном смысле. Это клей, который соединяет Laravel и Vue (или React), позволяя строить полноценные интерфейсы без отдельного API.</p><p>Фронтенд работает как обычное SPA, а бэк продолжает жить как Laravel-приложение: маршруты, контроллеры, middleware — всё привычно. Вместо return view() используем Inertia::render(), передаём данные, и они попадают напрямую во Vue-компонент как props.</p><p>То есть вы работаете в едином стеке. Валидация, авторизация и маршрутизация на сервере, без дублирования. Нет проксей, CORS и прочих сложностей. Просто Laravel отдаёт Vue-компоненты, и всё это отлично работает вместе. Интерфейс ведёт себя как SPA, но архитектура проще.</p><p>Если сравнивать с Livewire, то подход другой. В Livewire основной акцент на рендеринг HTML на сервере и обмен данными через AJAX. В случае с Inertia весь интерфейс строится на Vue или React, но без отдельной REST-инфраструктуры.</p><h2>Пример на практике</h2><p>Вот как это выглядит в реальном коде.</p><p>В контроллере Laravel просто пишем:</p><p>На фронте есть компонент Users/Index.vue, который принимает данные как props. Это всё. Не нужно писать отдельный API, сериализовывать данные, обрабатывать запросы вручную. Просто работаем с контроллером и компонентом.</p><p>Адреса страниц остаются стандартными, как в Laravel. Например, по маршруту /users Laravel отдаёт страницу, где Vue-компонент рендерит список пользователей. Переходы происходят быстро и без перезагрузки, как в SPA.</p><h2>Что я получил в реальной работе</h2><p>Когда я впервые использовал Inertia в боевом проекте, первым делом заметил, насколько сократилось количество кода. Не нужно писать отдельные контроллеры и для фронта, и для бэка, соединять их, думать о форматах данных и обрабатывать ошибки с двух сторон.</p><p>API как таковой просто исчез. А вместе с ним исчезли и проблемы с CORS, CSRF, токенами и заголовками. Всё работает как в монолите. Если возникает ошибка, ты сразу видишь, где именно она произошла. Не нужно прыгать между фронтом и бэком, выискивая источник бага.</p><p>Разработка стала быстрее. Когда фронт и бэк находятся в одном проекте, они не конфликтуют. Не нужно ждать, пока кто-то сделает API. Просто открываешь редактор и сразу реализуешь всю страницу целиком. Это особенно удобно, если ты один или в небольшой команде.</p><p>С SEO и SSR тоже стало проще. Поскольку рендер идёт на сервере, контент виден поисковикам, а настройка метатегов и пререндеринг выполняются привычными средствами Laravel.</p><p>И, пожалуй, главный плюс — всё работает единообразно. Авторизация, сессии, валидация, ошибки — всё в одной системе, без дублирования. Это упрощает отладку и снижает количество багов.</p><h2>Когда Inertia может не подойти</h2><p>Как и любой инструмент, Inertia не универсален. Он отлично показывает себя, когда фронт и бэк разрабатываются вместе, в рамках одного репозитория и одной команды. В таком случае он просто идеален.</p><p>Но если у вас фронтенд и бэкенд разделены по командам и живут в разных проектах — лучше выбрать REST или GraphQL. Inertia для такой архитектуры не подходит.</p><p>Также он не заменяет полноценный API. Если вам нужен мобильный клиент или вы планируете отдавать данные сторонним приложениям — API придётся реализовать отдельно.</p><p>И ещё один момент. Если вы собираетесь использовать Nuxt или Next.js для SSR — Inertia здесь не поможет. У него свой подход, который не интегрируется с этими фреймворками.</p><p>Так что всё зависит от задач.</p><h2>Итог</h2><p>Если вы фуллстек-разработчик и работаете в Laravel, очень советую попробовать Inertia. Он позволяет писать фронт и бэк в одном стеке, без лишней головной боли. Вы продолжаете использовать привычные инструменты Laravel — контроллеры, middleware, сессии, валидацию — но при этом создаёте интерфейс с Vue или React. Компоненты, реактивность, быстрые переходы — всё это на месте.</p><p>И главное — не нужно прыгать между двумя мирами. Порог входа очень низкий. Начать можно хоть с одной страницы.</p><p>Мой совет: попробуйте Inertia на небольшом проекте. Например, сделайте личный кабинет, блог или список задач. Скорее всего, вам понравится. Мне — точно зашло.</p>]]></content:encoded>
    </item>
    <item>
      <title>Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</title>
      <link>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</link>
      <comments>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</guid>
      <description><![CDATA[<p>Эпохи развития программирования в России и в мире. Какие стадии прошли разработчики и к чему пришли в настоящий момент. Прогнозы на будущее. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov">Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Stack Overflow]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Mozilla]]></category>
      <category><![CDATA[WebAssembly]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Soft Skills]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Fullstack]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Jun 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>За последние 20 лет программирование изменилось до неузнаваемости. Если в 2005 году разработчики писали код на PHP 4.0 под мерцание CRT-экранов, то в 2025-м нейросети помогают им генерировать целые модули, а квантовые компьютеры становятся частью исследовательских проектов.</p><p>Эта статья — подробная хроника эволюции программистов: какие языки и технологии они осваивали, как менялись их рабочие места, методы обучения и даже само восприятие профессии. Мы разберем ключевые этапы, от первых веб-гигантов до эпохи совместного программирования с ИИ, и попробуем представить, что ждет нас дальше.</p><h2>2005-2009: Эпоха авторских решений и первых веб-фреймворков</h2><p>В середине 2000-х типичный рабочий инструмент программиста — это громоздкий системный блок с процессором Intel Pentium 4 или новеньким Core 2 Duo. Мониторы с ЭЛТ-трубкой постепенно уступали место LCD-экранам с разрешением 1024×768 — именно на таких дисплеях создавались первые версии Wikipedia и набирающих популярность соцсетей. Оперативная память в 1-2 ГБ считалась нормой, а жесткие диски на 80-160 ГБ часто заполнялись до отказа — проекты редко весили меньше нескольких гигабайт.</p><p>Серьезная разработка велась преимущественно на стационарных компьютерах. Ноутбуки только начинали входить в обиход — их брали в офис, но для реальной работы предпочитали мощные десктопы. Операционная система Windows XP доминировала на рабочих станциях, в то время как серверы чаще всего крутили на Linux — Red Hat Enterprise или Debian.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/d5fca723-5450-4b72-8e8d-4cd57627fb99.jpg" alt="" /></figure><p>Среды разработки того времени сегодня кажутся архаичными. Eclipse и NetBeans потребляли гигабайты памяти, Visual Studio 2005 требовала серьезных ресурсов. Многие разработчики предпочитали простые текстовые редакторы вроде Notepad++, а для отладки использовали примитивные методы вроде вывода значений переменных через print. Контроль версий только начинал входить в практику — Git появился в 2005 году, но большинство команд продолжали использовать SVN или вообще заливали файлы по FTP напрямую на продакшен.</p><p>Языковая экосистема этого периода вращалась вокруг трех основных технологий. PHP версий 4 и 4.3 доминировал в веб-разработке — на нем работало около 80% всех сайтов в интернете. Однако его объектно-ориентированные возможности были крайне ограничены до выхода PHP 5 в 2004 году.</p><p>Java в лице J2EE оставалась стандартом для корпоративных решений — банковских систем, крупных порталов и ERP-комплексов. Spring Framework только начинал набирать популярность, а Hibernate упрощал работу с реляционными базами данных. C++ сохранял свои позиции в разработке игр (особенно с использованием Unreal Engine), драйверов и высоконагруженных сервисов.</p><p>Фронтенд-разработка в те годы была невероятно простой по современным меркам. Верстали преимущественно таблицами, а всю динамику реализовывали через jQuery, который появился в 2006 году и быстро вытеснил нативный JavaScript из повседневной практики. AJAX-запросы казались революционной технологией, позволяющей обновлять части страницы без ее полной перезагрузки.</p><p>Обучение программированию в этот период кардинально отличалось от современных подходов. Онлайн-курсы практически отсутствовали. Основными источниками знаний служили бумажные книги:</p><ul><li>«Философия Java» Брюса Эккеля;</li><li>«Совершенный код» Стива Макконнелла;</li><li>«PHP и MySQL. Разработка веб-приложений» Люка Веллинга.</li></ul><p>Русскоязычное сообщество активно обсуждало вопросы разработки на форумах RSDN.ru и CyberForum.ru. В 2008 году появился Stack Overflow, который постепенно стал главной площадкой для профессиональных обсуждений.</p><p>Университетское образование давало хорошую теоретическую базу — алгоритмы, структуры данных, принципы ООП. Однако практическим навыкам приходилось учиться самостоятельно, методом проб и ошибок. Документацию часто скачивали в формате CHM-файлов или читали непосредственно на сайтах вроде php.net и MSDN.</p><p>Типичный стек начинающего разработчика в 2009 году:</p><ul><li>HTML/CSS с jQuery для фронтенда;</li><li>PHP или Ruby on Rails для бэкенда;</li><li>MySQL в качестве базы данных.</li></ul><p>ORM-технологии еще не получили широкого распространения, поэтому SQL-запросы писали вручную. Многие проекты представляли собой монолитные приложения, где весь код хранился в единой кодовой базе без четкого разделения на модули.</p><p><b>Показательный кейс</b>:</p><p>В 2007 году разработчик PHP-приложений из МЭСИ (Москва) столкнулся с типичной для того времени проблемой — SQL-инъекциями. Вместо стандартных решений он создал DLAC (Data Logic Access Component) — обертку для работы с базой данных, которая автоматически экранировала параметры запросов. Это выглядело революционно на фоне типичного кода того периода, где строки запросов часто собирали через конкатенацию с пользовательским вводом.</p><p>Компонент использовал новую для 2005 года технологию Generics в C#. Он генерировал параметризованные запросы, что резко снижало риски взлома.</p><p><i>Разработчики в университетской среде тогда редко задумывались о безопасности — многие проекты содержали уязвимости вроде  </i>SELECT * FROM users WHERE name = ‘.$_POST[‘name’]<i>. </i></p><p><i>DLAC стал локальным спасением для внутренних систем МЭСИ, пока в 2009 году не появился NHibernate — порт популярного Java-фреймворка Hibernate.</i></p><p>Этот кейс хорошо иллюстрирует дух эпохи: отсутствие готовых безопасных решений заставляло программистов изобретать велосипеды. Многие подобные наработки позже легли в основу ORM-библиотек, но тогда они рождались в муках — через пробелы в безопасности и километры самописного кода.</p><h2>2010-2014: Мобильная революция и рассвет JavaScript</h2><p>Начало нового десятилетия ознаменовалось стремительным ростом мобильных технологий. Выход iPhone 4 в 2010 году и Android 2.3 Gingerbread задал новые стандарты мобильной разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/7b640694-b2cd-4f03-a68f-51ed138557b2.jpg" alt="" /></figure><p>Программисты массово переходили на MacBook Pro — не столько из-за преимуществ macOS, сколько благодаря появлению Retina-дисплеев в 2012 году, которые кардинально улучшили качество отображения кода.</p><p>Железо продолжало стремительно эволюционировать. Твердотельные накопители (SSD) начали вытеснять традиционные жесткие диски в рабочих станциях. Облачные платформы вроде AWS и Heroku стали реальной альтернативой локальным серверам, которые раньше часто стояли прямо под рабочими столами в офисах. Оперативная память в 8 ГБ стала стандартом для комфортной разработки, а четырехъядерные процессоры ускорили сборку крупных проектов.</p><p>Языковая палитра этого периода значительно расширилась. Objective-C стал основным языком для iOS-разработки и оставался таковым до появления Swift в 2014 году. Python 3 начал набирать популярность благодаря веб-фреймворку Django и научным библиотекам NumPy и Pandas, которые открыли дорогу для анализа данных в массовом сегменте.</p><p>JavaScript пережил настоящий ренессанс — после выхода AngularJS в 2010 и Node.js в 2009 году он перестал быть просто «языком для анимаций на сайте», превратившись в полноценную платформу для fullstack-разработки.</p><p><b>Важный факт</b>. В 2011 году разработчик из Сан-Франциско Райан Даль представил Node.js — среду выполнения JavaScript на стороне сервера. За первые 24 часа после релиза проект собрал 10 000 звезд на GitHub, что для того времени стало рекордом. Многие скептически относились к идее использовать JavaScript вне браузера, но уже через год такие компании как LinkedIn и Walmart перевели части своего бэкенда на Node.js, получив прирост производительности в 2-3 раза по сравнению с традиционными решениями на Java и Ruby.</p><p>Образовательная сфера претерпела значительные изменения. В 2011 году запустилась Coursera с первым массовым курсом по программированию — Machine Learning от Эндрю Ына. В 2012 году в Кремниевой долине открылся Hack Reactor, ставший прототипом современных coding bootcamps (интенсивов по программированию). Эти форматы предложили альтернативу традиционному университетскому образованию, сделав акцент на практических навыках.</p><p>Параллельно в России:</p><ul><li>В 2012 году появился Hexlet — одна из первых русскоязычных платформ с практико-ориентированными курсами по программированию. Особенность: выполнение заданий в реальной среде разработки через браузер. Платформа до сих пор работает: на текущий момент 80% выпускников трудоустраиваются в IT, <a href="https://ru.hexlet.io/blog/posts/hse-research">согласно исследованию ВШЭ</a>. В 2012 этот показатель был еще выше.</li><li>«Нетология» (основана в 2011) к 2013 году запустила курсы по веб-разработке с акцентом на JavaScript и Python, сотрудничая с российскими tech-компаниями. Их модель включала менторство и проектные работы.</li><li>В 2013 году стартовал Stepik — платформа с открытыми курсами от ведущих вузов (ИТМО, МФТИ). Особенность: интерактивные задачи с автоматической проверкой кода, что было прорывом для местного рынка.</li></ul><p>Курс «Введение в Linux» от Stepik (2014) за полгода собрал 50 тыс. студентов — рекорд для Рунета. Задания включали настройку виртуальных серверов, что сразу применялось в работе.</p><p>Эти проекты заложили основу для бума EdTech в России после 2015 года, доказав, что онлайн-формат может давать актуальные навыки быстрее вузов.</p><p>Типичный разработчик среднего уровня в 2014 году:</p><ul><li>понимал принципы REST API;</li><li>начинал осваивать основы DevOps с появлением Docker в 2013;</li><li>экспериментировал с микроконтроллерами вроде Arduino или Raspberry Pi, создавая собственные IoT-устройства.</li></ul><p>В профессиональной среде начал формироваться консенсус о том, что PHP устаревает для сложных коммерческих проектов.</p><h2>2015-2019: Эра больших данных и облачных технологий</h2><p>Аппаратные возможности сделали очередной рывок вперед. Многоядерные процессоры Intel i7 и AMD Ryzen стали стандартом для рабочих станций. 16 ГБ оперативной памяти перестали быть роскошью, а мониторы с разрешением 4К стали доступны широкому кругу разработчиков. В 2015 году появился Visual Studio Code, который быстро обогнал по популярности Sublime Text и Atom благодаря удачному сочетанию функциональности и производительности.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/c92b70be-b3eb-4924-a40a-587ed3d43592.png" alt="" /></figure><p>Языковая экосистема продолжила развитие. TypeScript, представленный в 2014 году, предложил решение проблемы масштабируемости JavaScript-кода в крупных проектах. Go от Google, созданный еще в 2009, нашел свою нишу в разработке микросервисов и инструментов оркестрации вроде Kubernetes (2015). Rust от Mozilla начал завоевывать доверие системных программистов благодаря уникальной системе владения памятью.</p><p>JavaScript-сообщество столкнулось с первыми серьезными проблемами. В 2016 году инцидент с пакетом left-pad показал уязвимость экосистемы npm — удаление одного небольшого модуля привело к сбоям в работе тысяч проектов по всему миру. Это заставило разработчиков задуматься о зависимости от сторонних библиотек.</p><p>Типичный senior-разработчик в 2019:</p><ul><li>разбирался в микросервисной архитектуре и понимал, как избежать vendor lock-in (привязки к поставщику) при работе с облачными провайдерами;</li><li>имел опыт работы с React или <a href="http://vue.js">Vue.js</a>;</li><li>знал, что понимание принципов работы алгоритмов становится менее важным, чем развитие soft skills для работы в команде.</li></ul><p>Ключевые технологии этого периода включали Kubernetes, который стал стандартом де-факто для оркестрации контейнеров, а также TensorFlow (2015) и PyTorch (2016), открывшие эру машинного обучения для широкого круга разработчиков. Появились первые серьезные инструменты для работы с большими данными — Apache Spark, Hadoop.</p><p><i>Ключевой момент. В 2016 году Netflix раскрыл детали своего перехода на облачную инфраструктуру AWS. Компания полностью перенесла все сервисы — от рекомендательной системы до биллинга — в облако за семь лет. Главным триггером стала катастрофа 2008 года, когда три дня простоя дата-центра оставили 8,4 млн подписчиков без доступа к сервису. Миграция потребовала перепроектирования архитектуры: инженеры разбили монолит на 500 микросервисов и внедрили Chaos Monkey — инструмент для тестирования отказоустойчивости, который случайно отключал серверы в продакшене.</i></p><p>Этот кейс стал хрестоматийным примером cloud-native подхода. Облачные технологии стали активно использоваться в разработке, а обращение с ними — обязательным навыком для прогеров.</p><h2>2020-2024: AI-assisted разработка и новые парадигмы</h2><p>Пандемия COVID-19 ускорила переход на удаленную работу. Программисты по достоинству оценили макбуки на чипах M1 (2020) за их энергоэффективность и производительность. Домашние офисы оснащались 32-дюймовыми 4К-мониторами и механическими клавиатурами, ставшими своеобразным профессиональным стандартом.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/65ba41e0-844c-419f-8656-e78905e93540.jpg" alt="" /></figure><p>Языковая палитра продолжала обогащаться. Rust официально вошел в ядро Linux в 2022 году, подтвердив свой статус системного языка нового поколения. Zig появился как современная альтернатива «C» с акцентом на безопасность. WebAssembly (Wasm) позволил запускать ресурсоемкие приложения прямо в браузере, открыв новые возможности для веб-разработки.</p><p>Искусственный интеллект начал проникать в повседневную работу программистов. GitHub Copilot на базе GPT-3, представленный в 2021, изменил сам процесс написания кода, предлагая контекстные подсказки. Low-code платформы вроде Retool упростили создание внутренних инструментов для бизнеса.</p><p>Типичный lead-разработчик в 2024 году:</p><ul><li>умел эффективно работать в гибридных командах (офис + удаленка);</li><li>автоматизировал рутинные задачи через ChatGPT API;</li><li>следил за развитием квантовых вычислений, хотя практическое применение пока оставалось ограниченным.</li></ul><p><i>Ключевой момент. В 2023 году GitHub Copilot, разработанный совместно с OpenAI, стал катализатором перемен в индустрии. За первый год после релиза инструмент использовали более 1,3 млн разработчиков — каждый десятый подписчик GitHub. Система анализировала контекст кода и предлагала целые функции: например, при написании SQL-запроса она автоматически генерировала соответствующую модель данных на Python. Amazon внедрил аналогичный инструмент Amazon Q Developer для внутренних команд — по заявлению CEO Энди Джесси, это сэкономило компании 4,500 человеко-лет работы и $260 млн ежегодно.</i></p><p><i>Но были и курьезы. В 2024 году разработчик из Берлина случайно отправил в продакшен код, полностью сгенерированный Copilot. Система использовала фрагмент из GPL-лицензированной библиотеки, что нарушило политику компании по открытому ПО. Инцидент заставил пересмотреть процессы ревью: теперь 78% команд требуют ручной проверки AI-кода перед мержем (слиянием).</i></p><p><i>Параллельно выяснилось, что Copilot в 40% случаев предлагает уязвимый код при работе с СУБД — это привело к взлому API стартапа через SQL-инъекцию. Такие кейсы показали, что ИИ пока не заменяет программистов, а требует от них новых навыков — критического анализа машинных предложений и понимания юридических аспектов кода.</i></p><h2>2025: Современное состояние профессии</h2><p>Современные рабочие станции программистов оснащены ноутбуками с процессорами Apple M4 (3 нм) или Windows-машинами на Snapdragon X Elite. Мониторы с разрешением 8К используются для разработки AR-приложений, а OLED-экраны с HDR стали стандартом для работы с графикой. Появляются первые экспериментальные IDE с нейроинтерфейсами, способные предсказывать код на основе анализа мозговой активности.</p><p>Среди языков программирования выделяется Mojo (2023) — «Python для GPU», набирающий популярность в сфере машинного обучения. Carbon как потенциальный наследник C++ пока остается в тени Rust. Квантовые языки вроде Q# и Cirq интересуют в основном энтузиастов и исследователей.</p><p>Профессия претерпела значительные изменения. ИИ стал не конкурентом, а помощником — по некоторым оценкам, около 60% рутинного кода в 2025 году (тесты, документация) генерируется автоматически. Знание английского языка стало важнее знания сложных алгоритмов — без него невозможно эффективно работать с современными AI-инструментами. Понятие «fullstack-разработчик» трансформировалось — теперь оно подразумевает владение фронтендом, одним бэкенд-языком и основами машинного обучения.</p><p>За два десятилетия программисты прошли путь от одиночек за CRT-мониторами до участников глобальных распределенных команд. Если в 2005 ключевым навыком было умение написать работающий код, то в 2025 главное — способность эффективно взаимодействовать с ИИ-ассистентами. Однако основы профессии остались неизменными — логическое мышление, способность к абстракции и желание автоматизировать рутинные задачи.</p><p>Будущее обещает новые трансформации. К 2030 году нейроинтерфейсы смогут заменить традиционные устройства ввода, а квантовые компьютеры — перевернуть основы криптографии. Но пока актуальными остаются проверенные временем принципы: изучать перспективные технологии (вроде Rust и Mojo), осваивать работу с ИИ и, конечно, совершенствовать главный навык любого программиста — умение быстро и грамотно гуглить.</p><p>Ты уже программист, если читаешь это! Больше о кодинге <a href="https://t.me/+ezugB7gnIEsxNGMy">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Защита API-ключей: как избежать утечек</title>
      <link>https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek</link>
      <comments>https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek</guid>
      <description><![CDATA[<p>Защита API-ключей. Показываем, как избежать утечек в API. Рассматриваем пошаговую инструкцию и инструменты ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zashhita-api-klyuchej--kak-izbezhat-utechek">Защита API-ключей: как избежать утечек</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 27 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>API-ключи стали цифровыми пропусками в современную веб-инфраструктуру. Они открывают доступ к данным, сервисам и функционалу, но их утечка превращает этот удобный механизм в угрозу безопасности.</p><p>Техническая уязвимость идентификаторов — не единственная проблема. Защита API-ключей требует комплексного подхода, сочетающего технические решения и организационные меры. Практика показывает, что большинство утечек происходит не из-за направленных атак, а по причине пренебрежения базовыми принципами безопасности.</p><p>Поэтому важно не просто правильно хранить ключи, но и контролировать их использование, своевременно обновлять и ограничивать область действия. Понимание этих рисков — первый шаг к созданию надежной защиты API для ваших интерфейсов и данных.</p><p>В этой статье разберем основные причины утечек, а также практические методы защиты API-ключей, которые помогут избежать распространенных ошибок и минимизировать риски.</p><h2>Основные причины утечек</h2><p>API-ключи обеспечивают доступ к критически важным системам — от платежных шлюзов до облачных хранилищ данных. Их компрометация может привести к катастрофическим последствиям — утечке конфиденциальных данных, финансовым потерям и даже к полному захвату контроля над системой.</p><p>Разберем основные причины утечек.</p><h3>Хардкодинг ключей в исходном коде</h3><p>Пожалуй, самая распространенная и опасная практика — прямое внедрение API-ключей в исходный код приложения. Разработчики часто делают это для удобства тестирования, забывая удалить секретные данные перед релизом.</p><p>Особенно критично, когда ключи остаются:</p><ul><li>в конфигурационных файлах (config.php, .env);</li><li>в закомментированных блоках кода;</li><li>в тестовых сборках, которые по ошибке попадают в продакшен;</li><li>в шаблонах и примерах кода.</li></ul><p>Яркий пример — <a href="https://xakep.ru/2023/09/07/microsoft-post-mortem/">инцидент с Microsoft в 2023</a> году, когда утечка ключа MSA (Microsoft Account) через устаревший код позволила хакерам получить доступ к почтовым ящикам правительственных организаций США, включая Министерство торговли. Как показало расследование Microsoft Security Response Center, проблема возникла из-за ключа подписи, который продолжал использоваться в legacy-системах и попал в руки злоумышленников.</p><p>Главная опасность хардкодинга в том, что даже после удаления ключа из актуальной версии кода он может сохраняться в истории версий или бинарных файлах. Современные сканеры секретов легко находят такие уязвимости, что делает подобную практику особенно рискованной.</p><h3>Случайные коммиты в публичные репозитории</h3><p>Системы контроля версий типа Git хранят полную историю изменений, что создает дополнительные риски. Даже если ключ удален из текущей версии кода, он может остаться в истории коммитов.</p><p>Типичные сценарии:</p><ul><li>временное добавление ключа для отладки с последующим «удалением»;</li><li>позднее добавление .env-файла в .gitignore;</li><li>слияние веток с чувствительными данными;</li><li>автоматические коммиты IDE и инструментов разработки.</li></ul><p>В публичные репозитории GitHub ежедневно попадают сотни активных ключей — некоторые из них даже предоставляют доступ к платежным системам и базам данных.</p><h3>Ошибки в настройке CI/CD</h3><p>Автоматизированные системы сборки и деплоя могут невольно способствовать утечкам:</p><ul><li>передача ключей через аргументы командной строки;</li><li>попадание секретов в логи сборки;</li><li>неправильная настройка переменных окружения;</li><li>хранение ключей в незащищенных артефактах;</li><li>избыточные права доступа для CI-сервисов</li></ul><p>Особенно опасны ситуации, когда CI-пайплайн настроен на публикацию артефактов сборки, включающих конфигурационные файлы с ключами.</p><h3>Логирование чувствительных данных</h3><p>Разработчики часто добавляют отладочный вывод, который затем забывают удалить:</p><ul><li>console.log (“API Key: “, secretKey);</li><li>погирование полных HTTP-запросов с заголовками авторизации;</li><li>дампы ошибок с конфиденциальными данными;</li><li>журналирование параметров запросов.</li></ul><p>Такие записи могут попасть в системные логи, инструменты мониторинга (Kibana, Grafana), браузерную консоль (для фронтенд-приложений) и облачные сервисы хранения логов.</p><p>Проблема усугубляется тем, что многие фреймворки по умолчанию включают подробное логирование, а разработчики не всегда задумываются о последствиях. В корпоративных системах это может привести к накоплению секретов в централизованных системах мониторинга, доступ к которым имеют десятки сотрудников.</p><h2>Неправильное управление доступами</h2><p>Часто проблема кроется не в технических решениях, а в процессах управления:</p><ul><li>отсутствие ротации ключей — некоторые из них используются годами;</li><li>использование одних ключей для разных сред (dev/stage/prod);</li><li>избыточные права доступа — принцип минимальных привилегий не соблюдается;</li><li>хранение ключей в общих хранилищах и чатах;</li><li>отсутствие аудита использования ключей.</li></ul><p>Часто утечки происходят из-за совокупности нескольких перечисленных факторов. Например, типичный сценарий: ключ сначала попадает в код, затем в репозиторий, обнаруживается в логах CI-системы, а потом оказывается в общем доступе из-за неправильных настроек прав.</p><p>Особую опасность представляет практика использования долгоживущих ключей с широкими правами доступа. В отличие от временных токенов, такие ключи редко проверяются и могут годами оставаться незамеченными в случае утечки. Поэтому современные подходы к безопасности рекомендуют использовать краткосрочные реквизиты для входа с минимально необходимыми правами.</p><h2>Безопасное хранение и использование API-ключей</h2><p>API-ключи — это критически важные элементы инфраструктуры, и их утечка недопустима. Чтобы минимизировать риски, важно соблюдать несколько принципов.</p><p>Переменные окружения — один из базовых, но эффективных способов изоляции ключей от кода. Хранение их прямо в скриптах или конфигурационных файлах, особенно в публичных репозиториях, — распространенная ошибка.</p><p>Сканер секретов GitHub ежедневно обнаруживает сотни случайно залитых ключей, несмотря на предупреждения. Переменные окружения позволяют отделить конфиденциальные данные от кода, но важно убедиться, что файлы .env не попадают в билды или логи.</p><p>Для более сложных сценариев стоит рассмотреть специализированные хранилища секретов, такие как HashiCorp Vault, AWS Secrets Manager или Doppler. Они не только обеспечивают безопасное хранение, но и добавляют функции ротации ключей, аудита доступа и интеграции с системами мониторинга.</p><ul><li><b>Vault</b> динамически генерирует временные ключи для отдельных сервисов, сводя к нулю риск их повторного использования. Однако такие решения требуют настройки и контроля — при некомпетентном подходе компании сталкиваются с ошибками конфигурации при внедрении.</li><li><b>AWS Secrets Manager</b> — инструмент, который позволяет централизованно хранить конфиденциальную информацию, извлекать ее, управлять доступом, ротировать и мониторить.</li><li><b>Doppler</b> — кроссплатформенное решение с удобным интерфейсом и историей изменений. Особенно популярно среди стартапов.</li></ul><p>Главное преимущество таких систем — централизованное управление. При увольнении сотрудника или компрометации ключа его можно отозвать мгновенно для всех сервисов.</p><p>Шифрование обязательно как при передаче, так и при хранении. Даже если злоумышленник получит доступ к базе данных или логам, зашифрованные ключи останутся бесполезными без расшифровки. Современные стандарты, такие как AES-256 или алгоритмы на основе PQC (постквантовой криптографии), уже встроены в большинство облачных провайдеров. Но важно не забывать про управление ключами шифрования (KMS): их утечка сведет на нет всю защиту.</p><p>Ограничение доступа — еще один уровень безопасности. Даже корректно хранимый ключ должен работать только с определенных IP-адресов, в заданные промежутки времени и для конкретных методов API. Например, ключ для чтения данных не должен разрешать запись. Cloudflare <a href="https://blog.cloudflare.com/">рекомендует</a> комбинировать геофильтрацию, ограничение частоты запросов и сигнатурный анализ запросов для блокировки аномальных действий.</p><p>Наконец, мониторинг помогает обнаружить утечку до того, как ею воспользуются. Инструменты вроде AWS GuardDuty или открытый вариант Falco отслеживают подозрительные операции: неожиданные запросы из новых регионов, аномальную частоту вызовов API или попытки доступа к заблокированным эндпоинтам.</p><p>Важно: ни один метод не дает 100% защиты API. Нужно комбинировать подходы и регулярно аудировать систему. Безопасность API-ключей — это не разовая настройка, а процесс, требующий регулярного пересмотра политики адаптации к новым угрозам.</p><h3>Лучшая практика работы с ключами</h3><p>Хранение API-ключей требует особого внимания, так как их компрометация может привести к серьезным последствиям. Около половины всех утечек ключей происходят из-за их хардкодирования в исходном коде. Это базовая ошибка, которую легко избежать, используя переменные окружения или специализированные хранилища секретов.</p><p>Вот самые эффективные практики:</p><ul><li>Первое правило — никогда не оставлять ключи в коде. Даже если репозиторий приватный, всегда существует риск случайной публикации или утечки через резервные копии. Инструменты вроде pre-commit хуков помогают предотвратить подобные инциденты, автоматически проверяя изменения перед отправкой. Например, скрипт может сканировать коммиты на наличие строк, похожих на ключи, и блокировать их сохранение.</li><li>Регулярная ротация снижает потенциальный ущерб от возможной компрометации. Ключи, которые не обновлялись годами, представляют особую опасность. Современные системы, такие как HashiCorp Vault или AWS Secrets Manager, позволяют автоматизировать этот процесс.</li><li>Принцип минимальных привилегий должен применяться ко всем ключам. Если токен нужен только для чтения данных, он не должен иметь прав на запись или удаление. Ограничение области действия каждого токена — простой, но эффективный способ снизить риски.</li><li>Мониторинг использования помогает выявлять аномалии в реальном времени. Неожиданные всплески активности, запросы из новых регионов или попытки доступа к неиспользуемым методам API — все это сигналы потенциальной компрометации. Инструменты типа AWS CloudTrail или Elastic SIEM позволяют отслеживать подобные события и оперативно реагировать на угрозы.</li><li>Обучение команды не менее важно, чем технические меры. Регулярные тренинги и чек-листы помогают поддерживать уровень осведомленности.</li></ul><p>Централизованное управление упрощает контроль за ключами. Когда все токены хранятся в одном защищенном месте, проще отслеживать их использование, вовремя обновлять и отзывать при необходимости. Это также облегчает аудит, который часто требуется для соответствия стандартам вроде PCI DSS или ГОСТ Р 56939-2024.</p><p>Процесс отзыва должен быть максимально оперативным. В случае компрометации ключа важно не только сгенерировать новый, но и убедиться, что старый уже недействителен. Некоторые сервисы, например Google Cloud, позволяют автоматически блокировать ключи при обнаружении подозрительной активности.</p><h3>Автоматическое выявление утечек</h3><p>Обнаружение утекших API-ключей должно быть неотъемлемой частью стратегии безопасности. Современные инструменты позволяют выявлять компрометацию секретов на ранних стадиях, минимизируя потенциальный ущерб.</p><p>Эффективный мониторинг начинается с проверки исходного кода. Такие инструменты, как <a href="https://www.gitguardian.com/">GitGuardian</a> и <a href="https://trufflesecurity.com/">TruffleHog</a>, сканируют git-репозитории, включая историю коммитов, на наличие случайно оставленных ключей. Они используют комбинацию шаблонов и энтропийного анализа, что помогает находить даже замаскированные секреты. Интеграция этих проверок в CI/CD-пайплайны позволяет перехватывать потенциальные утечки до их попадания в основную ветку.</p><p>Для обнаружения ключей за пределами репозиториев существуют специализированные сервисы, которые мониторят открытые площадки вроде Pastebin и технических форумов. Некоторые решения способны анализировать контекст, отличая реальные ключи от случайных последовательностей символов.</p><p>При выявлении компрометации критически важна оперативная реакция. Первый шаг — немедленный отзыв скомпрометированного ключа. Современные системы управления секретами позволяют делать это автоматически, одновременно инициируя процесс генерации замены. Задержки в этом процессе создают опасное окно уязвимости.</p><p>Проактивный мониторинг должен сопровождаться четким планом реагирования. Документированные процедуры позволяют сократить время реакции и минимизировать последствия инцидента. Важно регулярно тестировать эти процедуры на практике.</p><p>Автоматизированные системы обнаружения утечек работают наиболее эффективно в сочетании с обучением разработчиков. Технические средства бесполезны, если команда продолжает пренебрегать базовыми правилами безопасности. Регулярные тренировки помогают поддерживать высокий уровень готовности к реальным угрозам.</p><p>Важно понимать, что автоматическое обнаружение — это последний рубеж защиты. Оно не заменяет, а дополняет другие меры безопасности, такие как грамотное хранение ключей и контроль доступа. Комплексный подход значительно снижает риски, связанные с компрометацией API-ключей.</p><h2>Как реализовать безопасный доступ на фронтенде</h2><p>Основная проблема фронтенд-разработки в контексте работы с API — невозможность полностью защитить клиентский код. В отличие от серверной части, JavaScript остается открытым для анализа, а сетевые запросы легко перехватываются. Однако существуют проверенные подходы, позволяющие минимизировать риски утечки ключей.</p><p>Первое и главное правило — никогда не хранить приватные ключи в клиентском коде. Даже минифицированный JavaScript легко декомпилируется, а строковые константы извлекаются за несколько минут с помощью стандартных инструментов разработчика.</p><p>Вместо этого рекомендуется использовать архитектурный паттерн Backend-for-Frontend (BFF), когда фронтенд общается с промежуточным сервером, а тот уже взаимодействует с основными API. Так ключи остаются на защищенной стороне, а клиент получает только временные токены с ограниченным сроком действия.</p><p>Для аутентификации пользователей оптимально подходит OAuth 2.0 с расширением PKCE (Proof Key for Code Exchange). Этот механизм обеспечивает безопасный обмен токенами даже в публичных клиентах. В отличие от обычного потока авторизации, PKCE добавляет дополнительный уровень защиты через одноразовые ключи верификации, что предотвращает перехват кодов злоумышленниками.</p><p>В случаях, когда фронтенду необходим доступ к публичным API без аутентификации пользователя, стоит использовать ограниченные токены. Например, для картографического сервиса можно выпускать ключи, разрешающие только чтение данных с жестким лимитом запросов. Такой подход применяют многие крупные платформы, включая Яндекс.Карты. Даже если токен будет скомпрометирован, его полезность для злоумышленников окажется минимальной.</p><p>Дополнительную безопасность обеспечивает динамическое получение ключей. В этой схеме фронтенд сначала запрашивает у сервера одноразовый код, затем использует его для подписи запроса. После проверки подписи сервер выдает временный ключ, действительный только для текущей сессии. Этот метод значительно усложняет массовый перехват и повторное использование украденных данных.</p><p>Фронтенд должен получать ровно столько данных, сколько необходимо для отображения интерфейса, а все критические операции должны выполняться на сервере. Комбинация прокси-серверов, временных токенов и строгого контроля доступа позволяет создать надежную систему защиты даже для чувствительных API.</p><p>Последний рубеж безопасности — верификация среды выполнения. Современные библиотеки анализируют параметры браузера, выявляя признаки эмуляции или автоматизации. Это позволяет блокировать запросы от ботов и скриптов, пытающихся массово собирать данные через API. Такой подход особенно важен для финансовых сервисов и платформ с ценной информацией.</p><p>Главный вывод: фронтенд действительно представляет угрозу для безопасности API-ключей, но грамотная архитектура и продуманные механизмы авторизации позволяют снизить риски до приемлемого уровня. Ключевой принцип защиты API — минимализм в правах доступа и максимальное делегирование ответственности серверной части.</p><p>Хочешь писать код, который не стыдно показывать? Всё для фронтендеров и бэкендеров в <a href="https://t.me/+c6lPaQBXLvE4YmMy">одном месте</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>JavaScript: большой гайд от Tproger</title>
      <link>https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger</link>
      <comments>https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger</guid>
      <description><![CDATA[<p>Гайд по JavaScript. Топовые и полезные статьи с теорией, инструментами и фреймворками. Практика для новичков и продвинутых программистов.  ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/javascript--bolwoj-gajd-ot-tproger">JavaScript: большой гайд от Tproger</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Регулярные выражения]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 08 May 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>JavaScript — база веб-разработки. На нем пишут интерактивные веб-интерфейсы, динамичные приложения и серверные фичи. В общем, на JS можно делать все — от простых скриптов до сложных экосистем. В этом гайде собрали статьи для новичков и не только, которые помогут прокачаться в JavaScript.</p><h2>База и теория</h2><ol><li><a href="https://tproger.ru/articles/event-loop-dlya-chajnikov--prostymi-slovami-o-slozhnom-mehanizme-brauzera">Event loop для чайников: простыми словами о сложном механизме браузера</a> — В статье разбираем, что такое Event Loop, очередь задач и стек вызовов. Простыми словами о том, как браузер выполняет JavaScript-код и обрабатывает события.</li><li><a href="https://tproger.ru/articles/chek-list-dlya-node-js-novichkov--obrabotka-owibok-254149">Чек-лист по Node.js для новичков: обработка ошибок</a> — Показываем основные подходы к обработке ошибок для Node.js. Рассматриваем пошаговую инструкцию и практические примеры.</li><li><a href="https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza">Что нужно учить JavaSript-разработчикам в 2024 году</a> — Разбираем, какие технологии и навыки нужно знать JS-разработчику, в том числе и в 2025. От фреймворков до подходов к архитектуре.</li><li><a href="https://tproger.ru/articles/deklarativnyj-javascript">Декларативные языки на примерах с JavaScript</a> — Рассказываем, что значит декларативный стиль программирования. Сравниваем с императивным на примерах JavaScript.</li><li><a href="https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo">JavaScript localStorage: Полное руководство</a> — Разбираем, как работает localStorage. Учим сохранять данные на клиенте с помощью JavaScript.</li><li><a href="https://tproger.ru/articles/ponimanie-strogogo-rezhima-javascript">Как работает режим strict в JavaScript</a> — Объясняем, что делает режим strict и почему он помогает писать более безопасный код на JavaScript.</li><li><a href="https://tproger.ru/articles/kak-besplatno-vyuchit-javascript-i-ne-idti-v-onlajn-wkoly">Как бесплатно выучить JavaScript и не идти в онлайн-школы</a> — Рассказываем, как самостоятельно освоить JavaScript. Бесплатные ресурсы, полезные советы и личный план обучения.</li><li><a href="https://tproger.ru/articles/kakie-js-biblioteki-ispolzovat-dlya-animacij-na-sajte-v-2024-godu">Какие JS-библиотеки использовать для анимаций на сайте в 2024 году</a> — Актуальные JavaScript-библиотеки для веб-анимации. Рассматриваем лучшие инструменты для красивых и быстрых интерфейсов.</li></ol><h2>Практикуемся</h2><ol><li><a href="https://tproger.ru/articles/10-realnyh-voprosov-s-sobesedovaniya-javascript-razrabotchika-s-otvetami-254156">10 реальных вопросов с собеседования JavaScript-разработчика с ответами</a> — Подборка реальных вопросов с собеседований для JavaScript-разработчиков. Даем ответы и объясняем, как правильно мыслить на интервью.</li><li><a href="https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js">Приложение прогноза погоды с использованием Vue JS</a> — Пошаговое руководство по созданию погодного приложения на Vue.js. Обучаем взаимодействию с API и построению интерфейса.</li><li><a href="https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript">Математика в программировании: реализуем уравнения на JavaScript</a> — Объясняем, как реализовать математические уравнения на JavaScript. Практика для программистов, которые не боятся формул.</li><li><a href="https://tproger.ru/articles/regulyarnye-vyrazheniya-v-javascript-eto-ne-tak-strawno-kak-vy-dumaete">Регулярные выражения в JavaScript: разбираемся в создании</a> — Учим создавать и использовать RegExp в JavaScript. Поясняем синтаксис, паттерны и типовые ошибки.</li><li><a href="https://tproger.ru/articles/reshaem-populjarnye-zadachi-s-asinhronnym-kodom-na-javascript-chast-pervaja">Решаем популярные задачи с асинхронным кодом на JavaScript: часть первая</a> — Практика асинхронного программирования на JavaScript. Решаем задачи с API, задержками и промисами.</li><li><a href="https://tproger.ru/articles/tutorial-po-javascript-async-x2f-await-izuchaem-callbacks-promises-i-async-x2f-await">Асинхронный JavaScript: изучаем Async/Await, Callbacks и Promises</a> — Учим писать асинхронный код в JavaScript: от колбэков до современного async/await. Понятно, на примерах и без лишнего.</li><li><a href="https://tproger.ru/articles/reshaem-populjarnye-zadachi-s-asinhronnym-kodom-na-javascript-chast-vtoraja">Задачи по асинхронному программированию на JS</a> — Упражнения на асинхронный JavaScript. От простых примеров до сложных сценариев.</li></ol><p>Предыдущие подборки лежат здесь: <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">мобильная разработка</a>, <a href="https://tproger.ru/articles/s----vse-samye-vazhnye-materialy-ot-tproger">С++</a>, <a href="https://tproger.ru/articles/bolwoj-gajd-po-instrumentam-dlya-razrabotchikov-ot-tproger--frejmvorki--bazy--ai-i-devops-v-odnoj-podborke">инструменты</a>.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Утилита с 30 000 звезд на GitHub: как пет-проект стал тулзой для LinkedIn и властей США</title>
      <link>https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa</link>
      <comments>https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa</guid>
      <description><![CDATA[<p>Инструмент, начатый как пет-проект в 2004 году, стал инструментом для властей США и LinkedIn: 30 000 звезд, 50 сотрудников и путь от PHP до венчурной устойчивости</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa">Утилита с 30 000 звезд на GitHub: как пет-проект стал тулзой для LinkedIn и властей США</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 May 2025 13:51:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Бен Хейнс <a href="https://medium.com/@ben_haynes/i-started-an-open-source-project-in-2004-8d38820a7ecd">начал</a> писать свой инструмент в 2004 году — задолго до GitHub, до стартапов и даже до появления у него детей.</p><p>Больше новостей — в нашем тг-канале «<a href="https://t.me/your_tech">Представляешь»</a></p><p>Он просто хотел заменить phpMyAdmin чем-то более безопасным и понятным для клиентов. Сегодня у его проекта — <a href="https://github.com/directus/directus">более 30 000 звезд</a>, клиенты из списка Fortune 500 и команда из 50 человек.</p><h2>10 лет в одиночку</h2><p>Первые 10 лет инструмент был сугубо личным. Без сообщества, без поддержки, без амбиций. Только PHP, MySQL и Бен. Когда-то он просто поставил на стол счетчик звезд с GitHub — и каждая новая звезда ощущалась как маленькая победа.</p><h2>10 000 звезд: первая волна</h2><p>Где-то в 2015 году о проекте начали говорить — в Reddit, Slack, GitHub Explore. К проекту присоединился Рейк ван Зантен, будущий со-основатель.</p><p>Вместе они вычистили кучу спагетти-кода, переписали все с PHP на Node и Backbone на Vue. Тогда же их позвали в Сан-Франциско — крупная компания хотела внедрить проект, но испугалась, что за ним стоит всего два человека без юрлица.</p><h2>20 000 звезд: время становиться бизнесом</h2><p>Хейнс закрыл имевшееся у него агентство и оформил компанию. Поднял $1 млн, собрал команду, запустил облачный сервис.</p><p>Затем, после сотни встреч с инвесторами и обвала венчурного рынка, нашел партнера, который понял ценность OSS. Удалось закрыть $8 млн — и с этого момента встал вопрос устойчивости: как зарабатывать, не предавая open-source?</p><p>Ответ — собственная лицензия с бесплатным использованием для всех, кроме корпораций. Работали даже с Брюсом Перенсом, сооснователем OSI.</p><h2>30 000 звезд: устойчивость</h2><p>Сегодня проект — это компания из 50 человек. Впервые на горизонте — прибыль. Продуктом пользуются правительственные агентства, крупнейшие компании, стартапы.</p><p>И да, недавно они тихо подняли еще $9 млн — на новый архитектурный рефакторинг.</p><p>Самое сложное, по словам Бена — сохранять баланс: открытость, прозрачность, вменяемую монетизацию и доверие сообщества.</p>]]></content:encoded>
    </item>
    <item>
      <title>AI для frontend: модели для генерации интерфейса</title>
      <link>https://tproger.ru/articles/ai-dlya-frontend--modeli-dlya-generacii-interfejsa</link>
      <comments>https://tproger.ru/articles/ai-dlya-frontend--modeli-dlya-generacii-interfejsa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ai-dlya-frontend--modeli-dlya-generacii-interfejsa</guid>
      <description><![CDATA[<p>AI для frontend. Показываем варианты использования ИИ для интерфейса. Рассматриваем преимущества и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ai-dlya-frontend--modeli-dlya-generacii-interfejsa">AI для frontend: модели для генерации интерфейса</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 29 Apr 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Скоро фронтендеры будут говорить: <i>«Сделай интерфейс как у Яндекса, но с нашим брендингом и функционалом из ТЗ»</i> — и получать готовый продукт. Возможно, уже через 11 минут — столько занимает прочтение статьи.</p><p>Если научиться работать с ИИ-моделями, даже начинающий разработчик сможет перепрыгнуть с уровня «кодер кнопок» до «архитектор интерфейсов».</p><p>AI — не замена разработчику, а новый хард-скилл. Те, кто осваивает нейросети, в 10 раз продуктивнее коллег, все еще верстающих каждый элемент вручную.</p><h2>Pixel perfect по запросу: как фронтендеры генерируют интерфейс в 2025 году</h2><p><i>*Дизайнер прислал макет в 23:45. Дедлайн — завтра в 10:00*</i></p><p>Знакомо? Раньше это означало ночь без сна. Но что делают ваши коллеги — просто скармливают макет нейронке и идут спать. Утром правят готовый код и укладываются даже в безумный дедлайн без вреда для здоровья.</p><h3>Что изменилось?</h3><p>AI-генерация интерфейсов становится рабочим инструментом. Можно конвертировать текст и даже рисунок от руки в готовый HTML/CSS/JS код. Без выравнивания пикселей и утомительной верстки однотипных элементов.</p><p>Вы вводите «<i>Создай карточку товара с изображением, названием, ценой и кнопкой “В корзину”</i>» — и получаете код компонента. То, что раньше занимало до 30 минут, теперь можно делать за секунды.</p><h2>3 причины делегировать рутинную работу на ИИ</h2><h3>AI-генерация компонентов</h3><p>Помните, как в 100-й раз писали карусель или модалку? Есть инструменты, которым достаточно описания результата — нейросеть сгенерирует компонент с нуля.</p><p><a href="https://tproger.ru/articles/gajd-po-rabote-s-github-copilot">GitHub Copilot</a>, Anthropic Claude и <a href="https://tproger.ru/flurry/86">AI-плагины для VSCode</a> превращают текстовый запрос в рабочий интерфейс. Причем не просто работающий, а соблюдающий ваши стандарты оформления кода.</p><h3>Адаптив на автопилоте</h3><p>Дебаг мобильной верстки не доставляет удовольствие?</p><p>Можно обратиться к ИИ — нейросеть генерирует базовый интерфейс и сразу продумывает адаптив (если попросить об этом). Вместо десятков медиа-запросов — функция, которая преобразует ваш многоколоночный интерфейс в мобильную версию.</p><h3>Дизайнер с «Глазом Бога»</h3><p><i>«Кажется, кнопка должна быть правее»</i> — нет, ИИ выдает конкретные рекомендации.</p><p>Например:</p><p><i>«При ширине экрана 375px карточки товаров перекрывают друг друга на 12px. Причина: отрицательный margin в классе .product-card, который не учитывает падение грида на мобильных устройствах»</i>.</p><p>ИИ анализирует верстку и сравнивает ее с лучшими практиками UI/UX. Еще нейронка «видит» проблемы, которые не заметны до первых жалоб на баг.</p><h2>Популярные модели и технологии</h2><h3>GPT, Claude и Gemini</h3><p>Нейросети последних версий при четкой постановке задачи сразу пишут хороший код. В 2025 году это относится ко всем популярным моделям.</p><p>О том, как правильно составлять запросы для ИИ, рассказывали в статье «<a href="https://tproger.ru/articles/prodvinutyj-promting-v-chatgpt--20-luchwih-zaprosov-k-nejroseti-dlya-programmista">Продвинутый промтинг в ChatGPT</a>».</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-28/a79a63d8-acf3-4d6d-9598-81f15bbd327e.png" alt="" /><figcaption>Функция Artifacts в моделях Claude отображает результат выполнения кода</figcaption></figure><p>На качество кода влияет выбор между «тяжелыми» и «легкими» версиями.</p><p>Например, GPT-4o генерирует код лучше, чем Claude 3, но обходится значительно дороже.</p><p>Релизы свежих версий ИИ сопровождаются отчетами с бенчмарками. На 100% доверять этой информации не стоит — если в тестах нейросеть показала хороший результат, не факт, что она эффективна в реальных условиях.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-28/661b0cad-ac80-43be-8031-9868647298cc.jpg" alt="" /><figcaption>В апреле 2025 года лидирует Gemini 2.5 Pro, GPT o3 и GPT-4o</figcaption></figure><p>Если нужно сравнить несколько моделей, но времени на самостоятельные тесты нет, обратите внимание на <a href="https://huggingface.co/spaces/lmarena-ai/chatbot-arena-leaderboard">Arena Leaderboard</a>. Этот рейтинг имеет хорошую репутацию в профессиональных кругах. Люди делают одинаковые запросы двум нейросетям и сравнивают ответы. Рейтинг формируется на основе оценок от реальных пользователей.</p><h3>GPT-Engineer, Smol Developer</h3><p>Если ChatGPT действует как советчик, то GPT-Engineer и Smol Developer участвуют как полноценные члены команды.</p><p><a href="https://github.com/AntonOsika/gpt-engineer">GPT-Engineer</a> трансформирует текстовое описание в готовый проект. Разработчику достаточно сформулировать задачу — AI создаст структуру проекта с файлами, настроит окружение и сгенерирует код.</p><p><a href="https://github.com/smol-ai/developer">Smol Developer</a> предлагает иной подход — персонального AI-разработчика. С аудиторией более 10,000 пользователей на GitHub, этот инструмент отличается интуитивным интерфейсом и поддержкой E2B SDK.</p><h3>No-code/Low-code платформы</h3><p><a href="https://uizard.io/">Uizard</a> превращает идею в интерактивный прототип быстрее, чем команда дизайнеров набрасывает первые эскизы. За 7 лет инструмент эволюционировал в no-code платформу для создания UI/UX без дизайнерского бэкграунда.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-28/365d5c33-b4d3-40a5-b5ac-9085cdb10132.png" alt="" /><figcaption>Пример, как Uizard по эскизу создает интерфейс страницы входа</figcaption></figure><p>Ключевые функции:</p><ul><li><b>Автодизайнер 2.0</b> — генерирует многоэкранные интерфейсы по текстовому описанию.</li><li><b>Дизайн по эскизу</b> — сфотографируйте рисунок с салфетки, и Uizard трансформирует его в редактируемый прототип.</li><li><b>Клонирование интерфейсов</b> — загрузите скриншот существующего сайта, и AI превратит его в настраиваемый макет, сохранив структуру и компоновку.</li><li><b>Экспорт в PNG, PDF</b> и генерация AI базового React-кода (требует доработки).</li></ul><p><a href="https://www.locofy.ai/">Locofy</a> пригодится на следующем шаге после создания дизайна — превращении макетов в рабочий код.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-28/89612cd0-29a4-4737-879c-225cd1f4a7b2.jpg" alt="" /></figure><p>Преимущества:</p><ul><li>Генерация кода для React, Angular, Vue.js и других фреймворков.</li><li>Распознавание кнопки, поля ввода, слайдеры для создания динамического элемента.</li><li>Платформа анализирует дизайн и автоматически добавляет медиа-запросы.</li></ul><p>Связка Uizard + Locofy формирует конвейер от идеи до кода:</p><ol><li>Создание прототипа в Uizard по текстовому описанию или наброску.</li><li>Экспорт в Figma для детальной проработки.</li><li>Преобразование в код через Locofy.</li><li>Доработка и интеграция с бэкендом.</li></ol><p><b>Бесплатные тарифы позволяют оценить возможности платформ, но для полноценного использования в работе потребуется платная подписка — от 12$ в месяц.</b></p><h3>AI-плагины в Figma</h3><p>Фигма преобразилась с появлением AI-плагинов. В <a href="https://www.figma.com/community/development">коллекции</a> десятки дополнений на базе нейросетей.</p><p><a href="https://www.figma.com/ai/">AI Design by Figma</a> — официальный ИИ-помощник для генерации интерфейсов, встроенный прямо в редактор.</p><p>Функционал:</p><ul><li>Создание элементов по текстовому описанию.</li><li>Генерация нескольких вариаций компонентов.</li><li>Трансформация простых фигур в иллюстрации.</li><li>Предложение альтернативных цветовых решений.</li></ul><p>Достаточно выбрать элемент и ввести запрос: «Создай версию этой кнопки для темного режима» — плагин мгновенно предложит новый дизайн, сохраняя пропорции и структуру.</p><p>Режим <b>AutoLayout </b>автоматизирует верстку элементов. Функция анализирует расположение объектов и предлагает наиболее логичную систему компоновки.</p><p>Еще в Фигме есть интеллектуальное определение отступов между элементами, создание адаптивных сеток на основе расположения компонентов, оптимизация приложения для различных разрешений экрана и автоматическое выравнивание элементов интерфейса.</p><h2>Путь от запроса к интерфейсу: этапы работы с AI</h2><h3>Шаг 1: Формулировка промпта</h3><p>Качество сгенерированного интерфейса зависит от точности запроса. ИИ-модели считывают структурированные инструкции лучше, чем набор общих фраз.</p><p>Вместо размытого «Сделай хедер» лучше попросить «Создай адаптивный хедер с логотипом слева, навигационным меню по центру и кнопкой авторизации справа».</p><h3>Шаг 2: Генерация кода</h3><p>ИИ превращает текст в код, анализируя миллиарды строк из репозиториев и документации. Процесс включает:</p><ul><li>Разбор запроса на технические требования.</li><li>Определение структуры компонента/интерфейса.</li><li>Генерацию HTML/JSX элементов.</li><li>Формирование стилей и интерактивных элементов.</li><li>Оптимизацию согласно паттернам.</li></ul><p>Стандартный запрос для генерации компонента пользовательского интерфейса занимает 3-15 секунд.</p><h3>Шаг 3: Визуализация и проверка</h3><p>AI-инструменты позволяют мгновенно увидеть результат без настройки окружения. Ваш запрос трансформируется в код, который тут же визуализируется.</p><p>Варианты визуализации:</p><ul><li>Встроенные рендереры в IDE (VS Code + GitHub Copilot).</li><li>AI-платформы с предпросмотром (V0, Figma Dev Mode).</li><li>Локальные песочницы (CodeSandbox, StackBlitz).</li></ul><h3>Шаг 4: Человеческая доработка — финальный штрих</h3><p>Современный AI генерирует лишь скелет приложения. Оживлять его приходится разработчику.</p><p>Типичные улучшения:</p><ul><li>Добавление проверок на доступность (ARIA-атрибуты).</li><li>Оптимизация производительности (lazy loading).</li><li>Интеграция с реальными данными и API.</li></ul><p>Стоит отметить, что ИИ успешно генерирует компоненты для React-приложения, включая:</p><ul><li>Функциональные компоненты с хуками.</li><li>Context API для хранения состояния.</li><li>Мемоизацию через useMemo/useCallback.</li></ul><p>Генерация для Vue отлично работает с Composition API. ИИ автоматически применяет ref и reactive для состояния, computed для производных значений и методы для обработчиков.</p><p>В процессе создания UI с помощью ИИ не обойтись без проверки качества полученного результата. Тестировать сгенерированное веб-приложение приходится в несколько подходов:</p><ul><li>Визуальный просмотр — проверка соответствия дизайна требованиям и ожиданиям пользователя.</li><li>Кросс-браузерная совместимость — тестирование работы интерфейса в различных браузерах и устройствах.</li><li>Проверка доступности — оценка соответствия стандартам WCAG для обеспечения доступности для всех пользователей.</li><li>Валидация HTML/CSS/JS — использование линтеров и валидаторов для проверки качества кода.</li><li>Юзабилити-тестирование (E2E) — оценка удобства использования интерфейса реальными пользователями.</li></ul><h2>Плюсы и минусы AI для генерации пользовательского интерфейса</h2><h3>Подводные камни</h3><p>— <b>Непонимание бизнес-контекста</b>. ИИ не проводит интервью с пользователями и не знает специфику бизнеса. Результат: функционально корректный интерфейс приложения, но бесполезный для конкретного случая.</p><p>— <b>Шаблонность</b>. ИИ тяготеет к стандартным решениям. Бесполезно пытать нейросеть запросами по типу «нужен уникальный и креативный дизайн». В ответ вы получите очередной шаблон.</p><p>— <b>Усредненный UX вместо продуманного</b>. ИИ ориентируется на паттерны, которыми был обучен. Результат часто напоминает интерфейс из 2021 года без учета новейших трендов в UX.</p><p>— <b>Зависимость от контекста</b>. Чем сложнее и нестандартнее требование, тем выше шанс, что ИИ не справится с задачей.</p><p>— <b>Переоптимизм</b>. Когда люди обращаются к ИИ, то ожидают идеальный результат с первой попытки. К сожалению, так не бывает.</p><p>— <b>Слабая интерактивность</b>. ИИ отлично генерирует статические интерфейсы, но с созданием динамических структур справляется на троечку.</p><h3>Преимущества AI frontend</h3><p>— <b>Быстрое прототипирование</b>. ИИ выдает рабочий код за секунды. Полноценный скелет интерфейса появляется по первому запросу: «Создай страницу профиля пользователя с аватаром, статистикой активности и настройками».</p><p>— <b>Улучшения на ходу</b>. ИИ вносит изменения мгновенно. Разработчик лишь направляет процесс.</p><p>— <b>Поддержка компонентного подхода</b>. ИИ генерирует компоненты, соответствующие архитектурным паттернам.</p><p>— <b>Дизайн-варианты с A/B-тестированием</b>. Тестирование гипотез ускоряется в несколько раз. Запрашивайте несколько вариантов UI без дополнительных затрат.</p><h2>Кейсы и примеры: что реальные разработчики говорят про ИИ</h2><p>Согласно исследованию Cloud.ru, 62% российских IT-специалистов доверяют AI как коллеге. Российские разработчики активно интегрируют ИИ в рабочие процессы — 73% используют его для работы с кодом, а 39% применяют ежедневно.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-04-28/d25fb733-5dd5-4750-ac7f-62f9ad03c05d.jpg" alt="" /><figcaption>Популярность ИИ среди айтишников в зависимости от должности и профессии. Чаще всего к нейросетям обращаются мидлы и джуны</figcaption></figure><blockquote><b>Сегодня AI-сервисы окружают нас повсюду: помогают анализировать информацию, управлять бизнесом, разрабатывать новые программные продукты и просто решать повседневные задачи.</b></blockquote><p><i>Рассмотрим три популярных сценария применения ИИ во frontend-разработке.</i></p><h3>1. Создание панели администратора за 5 минут</h3><p>AI-ассистенты значительно ускоряют разработку типовых интерфейсов. Опишите требуемые функции админ-панели (управление пользователями, статистика, редактирование контента), и нейросеть сгенерирует базовую структуру, HTML-разметку и CSS-стили.</p><h3>2. Быстрое создание дизайна лендинга по описанию продукта</h3><p>ИИ трансформирует текстовое описание продукта в макеты лендингов. Разработчику нужно лишь загрузить информацию о продукте, целевой аудитории и желаемом стиле.</p><h3>3. Адаптация UI под разные разрешения и аудитории</h3><p>Нейросеть упрощает создание адаптивных интерфейсов и персонализацию UX для различных пользовательских сегментов.</p><p>Интересно, что 46% разработчиков отдают предпочтение именно российским AI-сервисам, что говорит о росте доверия к отечественным ИИ-решениям. Еще исследование Cloud.ru выявило, что в 70% вакансий работодатели упоминают навык владения AI-инструментами.</p><h2>Будущее AI во frontend-разработке</h2><p>AI-модели научатся распознавать не только элементы интерфейса, но и закономерности пользовательского поведения. Разработчик будет задавать направление: «Переработай эту форму для увеличения конверсии», а нейросеть проанализирует существующие данные и предложит несколько вариантов решения.</p><p>Финальная стадия эволюции — создание интерфейсов без интерфейса проектирования.</p><p>Вместо визуальных редакторов появятся системы, где разработчик описывает желаемый результат абстрактно, а ИИ выбирает оптимальную реализацию на основе данных о пользователе, устройстве и контексте.</p><p><b>Вопрос не в том, заменит ли ИИ фронтендеров, а в том, заменят ли фронтендеры с ИИ тех, кто продолжает работать по старинке.</b></p><p>Кстати, забрать все самые топовые нейронки для айтишников можно в нашем большом <a href="https://tprg.ru/LN8a">гайде с 70+ ИИ-инструментами</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие есть паттерны в React и для чего они нужны: часть 1</title>
      <link>https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-1</link>
      <comments>https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-1?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Юсуп Изрипов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-1</guid>
      <description><![CDATA[<p>В этой части Юсуп Изрипов рассказывает, что такое Container &amp; Presentational Components, Higher-Order Component (HOC) и паттерн Render Props в React и что с ними делать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-1">Какие есть паттерны в React и для чего они нужны: часть 1</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Redux]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Тимлид]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 08 Apr 2025 10:30:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>В мире React термин «паттерн» означает какой-то проверенный подход к решению задачи, а не шаблон проектирования из классической книги. За годы разработки вокруг React сформировались свои распространённые паттерны — способы организовать компоненты и логику так, чтобы код получался понятным, поддерживаемым и переиспользуемым.</p><p>Меня зовут Юсуп Изрипов, я сеньор разработчик в VK. Работаю над продуктами, которыми ежедневно пользуются миллионы человек.</p><p>В этих статьях я расскажу вам о самых популярных паттернах и приведу примеры кода. Мы рассмотрим, когда каждый из них может пригодиться, а также отметим их плюсы и минусы. Поговорим о классических приёмах вроде контейнеров и HOC, эволюции к хукам, также обязательно рассмотрим новые паттерны появившиеся в последних версиях React.</p><h2>Container + Presentational Components</h2><p>На первом месте работы ещё во время разработки на Vue мы с подачи нашего тимлида решили ввести этот паттерн. Глобально у нас были так называемые «умные» и «тупые» компоненты (или как я тактично называл их на демо — визуальные). Как вы наверняка догадались, роль Container у нас исполняли «умные» компоненты, а роль Presentational — «тупые». В чём, собственно, суть этого паттерна? Слышали выражение «разделяй и властвуй»? Паттерн Container &amp; Presentational Components (контейнерные и презентационные компоненты) ровно об этом: он разделяет логику (данные и взаимодействие с ними) и отображение (UI) на разные компоненты.</p><p>Presentational Components отвечают только за то, как что-то выглядит. Они получают данные через props и отображают их, больше ничего. Это, как правило, чистые функциональные компоненты, часто без собственного состояния (ну разве что мелкий UI-стейт типа «раскрыт ли dropdown»). Им всё равно, каким образом взять список пользователей — они просто ожидают условный props.users и отображают его в соответствии с дизайном.</p><p>Container Components, напротив, знают, что показать и откуда это взять, но не занимаются тем, как это отображается. Они содержат в себе всю логику: могут загрузить данные, подписаться на store или контекст, хранить состояние, а рендерят в презентационных компоненты, передавая им готовые данные. Контейнер может вообще не иметь собственного HTML, кроме того, что приходит от дочернего презентационного компонента. Его задача — это взаимодействие с данными.</p><p>Зачем же нужен такой подход? Во-первых, лучшая разделённость ответственности (UI отдельно, данные отдельно) упрощает понимание и поддержку приложения. Во-вторых, улучшается переиспользование: один визуальный компонент вероятно использовать с разными источниками данных через разные контейнеры. Дизайнеры могут менять внешний вид компонента в одном месте, не затрагивая бизнес-логику. И тестировать тоже проще: можно отдельно протестировать логику контейнера (без верстки) и отдельно визуальный компонент (с моком данных).</p><p>В этом примере UserList не содержит никакого стейта, не подписан на store или контекст, лишь отображает список. Ему всё равно, как и где получают пользователей — просто принимает проп users и выводит его. Контейнер UserListContainer же занимается работой с данными: делает fetch, сохраняет результат в useState, и потом рендерит UserList, прокидывая в него данные. Благодаря такому делению компонент UserList легко переиспользовать — хоть для локальных данных, хоть для данных из Redux или context — достаточно написать другой контейнер.</p><p>Конечно, не всегда нужно городить пару компонентов вместо одного. Этот паттерн полезен, когда приложение растёт: вы начинаете замечать, что пропсы идут через несколько уровней просто транзитом, или один компонент слишком перегружен логикой. Тогда вы «вытаскиваете» логику в контейнер, а UI — в презентационный компонент, и код сразу становится чище. Это не обязательное правило, а приём для рефакторинга по мере необходимости.</p><p>Стоит отметить, что с появлением React-хуков граница между логикой и отображением несколько размылась. Теперь можно выносить логику в кастомные хуки и вызывать их прямо внутри компонента, вместо того чтобы создавать отдельный контейнер-класс, как это делали до 2018 года. Тем не менее, принцип «держи логику отдельно от представления» по-прежнему полезен. Даже с хуками можно структурировать код, разделяя функциональность: написать хук useUsersData() для получения пользователей и применять его в разных компонентах (вместо дублирования запроса).</p><p>Плюсы: чёткое разделение обязанностей, возможность переиспользовать и заменять части независимо (UI-компонент можно переиспользовать с разными данными), облегчение тестирования.</p><p>Минусы: появляется больше файлов/компонентов, чем могло бы быть, что может казаться избыточным для мелких случаев. Иногда чрезмерное дробление на «глупые» и «умные» компоненты лишь усложняет структуру, если паттерн применён не к месту. Как говорится, включайте голову — не каждую кнопку нужно выделять в отдельный контейнер.</p><h2>Higher-Order Component (HOC)</h2><p>Когда я впервые услышал термин HOC, он показался мне чем-то из математики. Но на практике всё горадо прозаичнее: HOC — это всего лишь функция, которая принимает React-компонент и возвращает новый компонент, оборачивая исходный дополнительной функциональностью. Проще говоря, HOC — это «обёртка». Мы помещаем один компонент внутрь другого, чтобы на выходе получить расширенную версию переданного в HOC компонента.</p><p>Зачем это может понадобиться? Представим, у нас есть несколько разных компонентов, и всем им нужно что-то общее: например, обработка ошибок или подписка на внешние данные. Можно было бы скопировать этот код в каждый из компонентов, но куда элегантнее написать HOC один раз и применить ко всем. Классический пример — Redux-функция connect: вы пишете export default connect(mapState)(MyComponent), и ваш компонент получает пропсы из глобального стейта.</p><p>connect — как раз и есть HOC, который инъектирует данные из Redux в компонент, не требуя от вас переписывать все под Redux вручную.</p><p>Создать свой HOC тоже несложно. Супер банальный пример — сделаем HOC, который добавляет компоненту стейт счётчика:</p><p>Здесь withCounter — HOC, он возвращает новый функциональный компонент WithCounter, который внутри себя использует useState и передаёт состояние и функцию увеличения внутрь WrappedComponent. В итоге EnhancedButton — это улучшенная версия ClickButton, которая умеет считать клики, даже если исходный ClickButton об этом не знал.</p><p>Плюсы: один HOC может добавить функциональность множеству компонентов сразу — не надо копировать код везде. Логику обновляется в одном месте (внутри HOC) — и все обёрнутые компоненты получают изменения. HOC можно комбинировать: например, обернуть компонент сначала в HOC, добавляющий тему оформления, потом в HOC, добавляющий логирование, и т.д. В итоге получим компонент, обладающий сразу несколькими дополнительными возможностями.</p><p>Минусы: за такую магию мы платим усложнением структуры. Когда компонентов обёрток становится много, React-дерево раздувается, и возникает эффект «матрёшки». В DevTools вы могли видеть что-то вроде: Connect(withRouter(WithTheme(MyComponent))) — разобраться, что к чему, становится сложнее. Дебаг таких цепочек — тоже удовольствие то ещё, приходится пробираться через несколько уровней абстракций. Кроме того, HOC часто прокидывают пропсы во внутренний компонент, что чревато конфликтами имён (нужно следить, чтобы, например, prop.title от HOC не перезаписал пропс title, который вы передали самому компоненту). Ещё нюанс — HOC усложняют типизацию в TypeScript (надо правильно описывать generic для пропсов), но это выходит за рамки нашей темы.</p><p>React-разработчики со временем несколько охладели к HOC. В официальной документации прямо сказано: «компоненты высшего порядка не так часто используются в современном React-коде». Отчасти их вытеснили хуки, тем не менее, HOC никуда не делись: их продолжают применять сторонние библиотеки — тот же Redux, Relay и другие. Да, и в старом проекте вы почти наверняка встретите хотя бы пару HOC. Поэтому понимать этот паттерн стоит. Просто имейте в виду современные альтернативы и используйте HOC там, где это действительно необходимо.</p><h2>Паттерн Render Props</h2><p>Следующий паттерн я бы назвал «перевёрнутый HOC». Render Props — это подход, когда компонент сам не рендерит что-то внутри себя, а принимает функцию (часто через проп render или просто используя детей как функцию) и вызывает её, чтобы получить содержимое. То есть мы передаём компоненту инструкцию, что именно отрендерить, а он сам обеспечивает, когда и с какими данными вызвать эту инструкцию.</p><p>Представьте компонент &lt;MouseTracker&gt; для отслеживания положения курсора. Классически он может хранить x, y в своём состоянии и отрисовывать, скажем, &lt;p&gt;Mouse at (x, y)&lt;/p&gt;. Но что, если мы хотим переиспользовать эту логику уже с другим UI? Паттерн Render Props предлагает сделать компонент &lt;Mouse&gt;, который не определяет жёстко JSX внутри себя, а вызывает функцию, переданную через проп (или children функцию), передавая ей координаты. Эта функция сама решит, что рисовать. Таким образом, &lt;Mouse&gt; инкапсулирует логику (слежение за мышкой), а отображение делегирует наружу.</p><p>Пример: реализуем компонент-утилиту &lt;FilteredList items={...} filter={...}&gt;, который отображает список на основе передаваемого фильтра. Вместо того чтобы жёстко прописывать разметку элемента списка, сделаем его с render проп через children:</p><p>Здесь &lt;FilteredList&gt; знает, как отфильтровать массив (items.filter(filter)), но не знает, как отрисовать каждый элемент. Вместо этого он вызывает функцию, которую мы передали в качестве дочернего элемента (children), для каждого элемента списка. Эта функция возвращает &lt;li&gt; для каждого item. В результате логика фильтрации инкапсулируется внутри FilteredList, а конкретное отображение списка задаётся извне. Мы могли бы так же использовать этот компонент для массива объектов, отрисовывая, например, товары — достаточно передать другую children-функцию.</p><p>Паттерн Render Props здорово повышает гибкость компонентов. Мы можем переиспользовать &lt;FilteredList&gt; для списков чего угодно — чисел, пользователей, товаров — просто изменяя функцию отображения. Другой пример: компонент &lt;Mouse&gt; может предоставлять координаты курсора, а внешний код решит, просто вывести текст, нарисовать по координатам картинку или вызвать какую-то совершенно другую логику — не нужно делать несколько вариаций компонента для каждого кейса.</p><p>Плюсы: Render Props позволяет компоненту-провайдеру (в примере выше FilteredList является провайдером данных) быть максимально универсальным, а конкретную разметку делегировать наружу. Многие библиотеки воспользовались этим паттерном: например, React Router (до версии 6) позволял вместо компонента страницы передать проп render в &lt;Route&gt; — функцию, которая отрисует JSX на основе параметров маршрута. Formik предлагал компонент &lt;Formik&gt; с функцией-ребёнком для рендеринга формы. Downshift (библиотека для автокомплитов) — тоже классический пример паттерна render props.</p><p>Минусы: главное неудобство — излишний шум в JSX. Код с вложенными функциями бывает тяжело читать. В нашем простом примере всё компактно, но представьте, если у вас будет несколько уровней таких компонентов: &lt;Foo&gt;{foo =&gt; ( &lt;Bar&gt;{bar =&gt; ( ... )}&lt;/Bar&gt; )}&lt;/Foo&gt; — легко получить «оберточный ад» из стрелочных функций прямо в разметке. Это значительно затруднит отладку такого кода при возникновении каких-либо проблем. К тому же, каждый раз при рендере создаётся новая функция, что может негативно сказаться на производительности, если таких компонентов много (React конечно оптимизирует функции в пропсах через механизм сравнения, но всё же). Также возникает неявная связь: внешний код должен знать, какие аргументы ожидает функция. TypeScript конечно помогает, но при чтении кода не сразу видно, что children, например, это не просто элемент, а функция.</p><p>Как и HOC, паттерн Render Props сейчас используется реже. Многие задачи, решаемые через него, теперь элегантнее с точки зрения кода решаются хуками, в официальной документации это также отмечено. Но всё же понимать его нужно, потому что легаси-код и некоторые библиотеки всё ещё работают на нём. Если видите, что компонент принимает функцию в виде пропса (чаще всего называется render или передаваётся через детей), знайте — это он, Render Props.</p><p>В следующей части расскажу про хуки и кастомные хуки, а также про Compound Components и Серверные компоненты и Suspense.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как перевести проект на Laravel: пошаговый план перехода</title>
      <link>https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda</link>
      <comments>https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda</guid>
      <description><![CDATA[<p>Как перевести проект на Laravel. Показываем основные преимущества использования Ларавел. Рассматриваем пошаговую инструкцию нюансы переноса ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda">Как перевести проект на Laravel: пошаговый план перехода</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DPI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 30 Mar 2025 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда код устаревает, его поддержка превращается в борьбу с хаосом. После пересмотра архитектуры приходит пугающее осознание: нужно переезжать на более современный стек. Однако непонятно, с чего начать.</p><p><i>В этой статье пошагово разберем перенос вашего проекта на Laravel. Вы узнаете, как мигрировать с минимальными рисками для разработки и пользователей.</i></p><h2>Шаг 1. Готовимся к миграции</h2><p>Посмотрите структуру проекта, чтобы выявить слабые места.</p><p>Архитектура далека от идеала, если проект вырос на хаотичных добавлениях новых функций.</p><p>Проанализируйте:</p><ul><li><b>Вид проекта</b>. Ваша разработка — это монолит, модульная система, API, микросервис?</li><li><b>Зависимости</b>. Определите, какие библиотеки использует проект. Совместимы ли они с Laravel?</li><li><b>Базу данных</b>. Если в БД встречаются дубли, отсутствуют ограничения, это нужно исправить заранее.</li></ul><p>В качестве теста на совместимость перепишите небольшую часть на Laravel. Возьмите один простой модуль и посмотрите, насколько это жизнеспособно.</p><h2>Стратегии перехода</h2><p>Выберем стратегию перехода:</p><ul><li>Big Bang,</li><li>Поэтапный перенос.</li></ul><p><b>Стратегия Big Bang</b> — это полная остановка текущего проекта и создание новой версии на Ларавел с нуля.</p><p>Подход идеален для устаревших и запутанных систем.</p><p>Из минусов — высокие риски. Во время разработки текущая версия может растерять пользователей. К тому же сроки реализации могут затянуться.</p><p><b>Стратегия с постепенным переходом</b> выглядит надежнее.</p><p>Система продолжает работать, а вы поэтапно меняете ее «под капотом».</p><p>Единственный нюанс — готовьтесь к сложностям поддержки, когда часть системы заработает в новой архитектуре, а часть останется в старой.</p><h4>Выбор подхода зависит от проекта</h4><p>Если систему легко поддерживать, то более безопасен постепенный переход.</p><p>Проект напоминает спагетти-код? Плохие новости — Big Bang неизбежен.</p><h2>Шаг 2. Разворачиваем новое окружение на Laravel</h2><p>Чтобы установить фреймворк, выполните команду:</p><p>Прежде чем работать с кодом, настроим окружение.</p><p>В корне проекта для этого есть файл конфигурации .env:</p><ul><li><b>APP_NAME</b>: имя приложения, чтобы оно отображалось в логах и заголовках.</li><li><b>APP_URL</b>: адрес, на котором приложение будет доступно (например, http://localhost).</li></ul><p>В будущем запланирована интеграция с существующей базой, поэтому лучше сразу настроить подключение.</p><h3>Подключение БД</h3><p>Laravel использует <b>Eloquent ORM</b> для взаимодействия с базой.</p><p>Настройка БД выполняется в том же разделе .env:</p><p>Для тестирования подключения запустите команду:</p><h2>Настройка маршрутов</h2><p>Маршруты изначально хранятся в файлах <i>routes/web.php</i> (для страниц) или <i>routes/api.php</i> (для <a href="https://tproger.ru/translations/luchshie-praktiki-razrabotki-rest-api-20-sovetov">REST API</a>).</p><p>В качестве примера добавим базовый маршрут приветствия:</p><p>Если у вас проект с десятками пользовательских маршрутов, интегрируйте их постепенно.</p><h2>Шаг 3. Переносим модели данных и бизнес-логики</h2><p>Eloquent ORM работает с классами, представляющими таблицы в базе данных.</p><p>Чтобы перенести существующую таблицу, нужно создать <b>модель</b>:</p><p>Этот класс автоматически подключается к таблице с именем products.</p><p>Когда название таблицы не соответствует модели, это можно указать явно:</p><p>Если в таблице есть нестандартные поля (например, столбцы с именами вроде created_time вместо created_at), их тоже можно легко обработать:</p><h2>Переносим схему БД</h2><p>Laravel использует механизм <b>миграций </b>для управления таблицами в базе и <b>сиды </b>для внесения данных.</p><p>Перенос структуры БД выполняется командой:</p><p>Миграция создается в папке <i>database/migrations</i>.</p><h3>Переносим данные</h3><p>Если текущая БД уже содержит данные, их можно перенести через <b>сиды</b>: файлы, которые заполняют таблицы данными.</p><p>Создаем сид:</p><p>Внутри метода run описываем данные:</p><h3>Переводим бизнес-логику в сервисы и фасады</h3><p>Старый проект состоит из функционала, размазанного по контроллерам? Улучшим структуру и сделаем код независимым. С этим помогут сервисы и фасады.</p><p><b>Сервисы </b>— это классы, которые объединяют бизнес-логику в одном месте.</p><p>Например, если проект выполняет расчеты цен и скидок, можно создать класс:</p><p>В этом классе описана бизнес-логика:</p><p>Теперь сервис можно вызывать в контроллерах и моделях.</p><p><b>Фасады </b>— это статический интерфейс к сервисам, который делает вызовы более читаемыми.</p><p>Например:</p><p>С фасадом вызов становится простым:</p><h2>Шаг 4. Перенос маршрутов и контроллеров</h2><p>Начнем с <b>маршрутов</b>. Они определяют, как пользователи будут взаимодействовать с приложением.</p><p>Если в старом проекте использовались API-запросы для работы с внешними сервисами или мобильными приложениями, перенесем их в <i>api.php</i> и добавим префикс api для маршрутов:</p><p>Теперь про <b>контроллеры</b>. Они отвечают за логику обработки запросов и взаимодействие с моделями. В Laravel контроллеры работают по правилам <b>MVC </b>(Model-View-Controller).</p><p>Пример обычного метода контроллера:</p><p>Laravel определяет маршруты групповыми методами — по префиксам, middleware или зонам авторизации.</p><p><b>Middleware </b>— это посредники, которые обрабатывают запросы до их поступления в приложение.</p><p>Навесим middleware на маршруты, требующие авторизации пользователя:</p><p><b>Политики </b>контролируют доступ к определенным ресурсам, например, правку или удаление записей.</p><p>Пример метода политики:</p><p>Политики можно подключать к маршрутам или напрямую вызывать в контроллерах.</p><h2>Шаг 5. Перенос фронтенда и представлений</h2><p>Если ваш старый проект использует обычные HTML-файлы, они легко преобразуются в Blade.</p><p><b>Blade </b>— это встроенный механизм шаблонов. С его помощью создают пользовательские интерфейсы.</p><p>Например, перенесем главную страницу сайта:</p><p>Blade-версия:</p><p>Теперь можно динамически передавать данные из контроллера:</p><p>Blade поддерживает механизм наследования, который упрощает работу с повторяющимися частями интерфейса.</p><h3>Интегрируем Vue.js или React</h3><p>Vue.js/React подключают, когда нужен динамичный и интерактивный интерфейс. Например, для <a href="https://tproger.ru/articles/ssr-ili-spa-veb-sajty-chto-vybrat-dlya-vas-i-vawego-biznesa">SPA</a>, реалтайм-функционала, сложных форм или фильтров.</p><p>Blade и JavaScript можно комбинировать: используйте Blade для рендеринга начального интерфейса и Vue.js/React для обработки интерактива.</p><h3>Динамический интерфейс без JS</h3><p><b>Livewire </b>— это инструмент для создания интерфейсов без необходимости обращаться к внешним библиотекам JavaScript. Преимущество в том, что весь код пишется на PHP.</p><p>Livewire пригодится для динамических форм, фильтрации таблиц, уведомлений. Он упрощает код, сохраняя гибкость.</p><h2>Шаг 6. Оптимизируем и тестируем проект</h2><p>Отправная точка улучшения производительности — работа с Blade-шаблонами. Laravel сам их оптимизирует, но есть практики по дополнительному ускорению:</p><ul><li><b>Минимизация логики в представлении</b>. Злоупотребление PHP внутри Blade замедляет рендеринг страниц. Вместо описания сложной логики в шаблонах ее лучше перенести в контроллер.</li><li><b>Кэширование шаблонов</b>. Работу приложения можно ускорить за счет запуска кэширования всех шаблонов, сокращая время компиляции — «<i>php artisan view:cache</i>».</li><li><b>Переиспользование</b>. Если фронтенд состоит из повторяющихся фрагментов, рекомендуется использовать Blade-компоненты.</li></ul><p>В приложениях SPA оптимизируем фрагменты JavaScript.</p><p><b>Laravel Mix</b> генерирует минифицированные CSS и JS. Проверьте размер этих файлов в папке <i>public/js</i>. Если их вес больше 1 МБ:</p><ul><li>Удалите лишние пакеты.</li><li>Используйте динамическую загрузку маршрутов или компонентов.</li></ul><p>Для Vue можно использовать динамическую загрузку, чтобы не грузить весь фронтенд сразу:</p><h3>Тестирование</h3><p>Убедимся, что приложение работает корректно.</p><p>Проверим, например, что страница приветствия открывается и показывает нужный текст:</p><p>Если используете Vue.js или React, для проверки компонентов применяйте <b>Jest </b>или <b>Mocha</b>.</p><p>Тест, который проверяет, что компонент отобразил нужный текст:</p><p>Если приложение работает с API:</p><p>Для проверки приложения под нагрузкой можно использовать <b>Artillery </b>или <b>JMeter</b>.</p><h2>Шаг 7. Разворачиваем и запускаем проект</h2><p>Перенесли данные, создали маршруты и контроллеры, внедрили представления, оптимизировали приложение и протестировали его. Остался последний шаг — развернуть проект на сервере и запустить его.</p><p>Выбор сервера зависит от предпочтений и нагрузок:</p><ul><li>Если важна скорость и масштабируемость, выбирайте <a href="https://tproger.ru/articles/video-osnovy-nginx-dlja-nachinajushhih-za-200-sekund">Nginx</a>. Он быстрее работает под высокой нагрузкой.</li><li>Если важен простой подход, используйте <a href="https://tproger.ru/video/video-osnovy-apache-kafka">Apache</a>. Он интегрируется с большинством систем.</li></ul><p>Фоновые задачи можно связать с <b>Supervisor</b>. Инструмент автоматически запускает воркеров при сбоях, обеспечивая бесперебойную обработку задач.</p><h3>Автоматизация развертывания</h3><p>Чтобы релиз прошел безболезненно, нужен рабочий процесс CI/CD. Например, в <a href="https://tproger.ru/articles/integraciya-ci-cd-processov-s-ispolzovaniem-github-actions">GitHub Actions</a> можно настроить сценарий, который:</p><ol><li>Проверит качество кода.</li><li>Установит зависимости.</li><li>Выполнит миграции.</li><li>Зальет проект на сервер.</li></ol><p>Предусмотрите откат, например, через <b>Spatie Laravel Backup</b>. Если что-то пойдет не так, у вас должна быть возможность вернуть предыдущую версию.</p><p>Инструмент <b>Sentry </b>поможет отслеживать ошибки, а <b>New Relic</b> — оценивать производительность.</p><h2>Заключение</h2><p>Устаревшие проекты уникальны, к каждому нужно искать индивидуальный подход. Надеемся, что пошаговое руководство станет основой для миграции вашего legacy-приложения на Laravel без переписывания кода с нуля.</p>]]></content:encoded>
    </item>
    <item>
      <title>15 вопросов с собеседований по фронтенду для мидлов</title>
      <link>https://tproger.ru/articles/15-voprosov-s-sobesedovanij-po-frontendu-dlya-midlov</link>
      <comments>https://tproger.ru/articles/15-voprosov-s-sobesedovanij-po-frontendu-dlya-midlov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/15-voprosov-s-sobesedovanij-po-frontendu-dlya-midlov</guid>
      <description><![CDATA[<p>Пов: вы пришли на собес на мидла. В статье — ищите вопросы и пытайтесь ответить сначала сами. Если не получается — ответы и решения тоже есть.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/15-voprosov-s-sobesedovanij-po-frontendu-dlya-midlov">15 вопросов с собеседований по фронтенду для мидлов</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Safari]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 26 Mar 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Статей в духе «вопросы для фронтенд разработчика написано много». Опыт Альберта Халимова в прохождении и проведении собеседований показывает, что, задавая базовые вопросы, интервьюер хочет узнать, готовился ли человек и насколько он заинтересован в работе.</p><p>На типичные вопросы Junior-разработчик должен легко ответить. Вместе с <a href="https://h.careers/curators/albert-khalimov">Альбертом Халимовым</a>, TeamLead Frontend Developer в Группе М.Видео-Эльдорадо и ментором <a href="https://h.careers/skills?utm_source=site_tproger&amp;utm_medium=article">Эйч Навыки</a>, разбираемся в тех же вопросах, но смотрим на них под другим углом и узнаем самое главное — готовы ли быть мидлом.</p><h2>1. Что такое оператор typeof?</h2><p>Вызов typeof x возвращает строку с именем типа:</p><h2>2.     Что вернет typeof null, typeof new Date, typeof alert?</h2><p>Date — это встроенный объект, который содержит дату и время, а также предоставляет методы управления ими.</p><p>Результатом вызова typeof null является "object". Это официально признанная ошибка в typeof, берущая начало еще со времен создания JavaScript и сохраненная для совместимости. Конечно, null — не объект. Это специальное значение с отдельным типом.</p><p>Вызов typeof alert возвращает "function", потому что alert — функция. Функции относятся к объектному типу. Но typeof обрабатывает их особым образом, возвращая "function". Так тоже повелось с момента создания JavaScript. Формально это неверно, но может быть удобным на практике.</p><p>Интересный факт: информация об операторе typeof — это последний пункт главы «Типы данных» на <a href="https://learn.javascript.ru/">https://learn.javascript.ru/</a>.</p><h2>3. Что такое NaN? Какого типа это значение? Как можно узнать, равно ли значение переменной NaN?</h2><p>NaN расшифровывается как "Not A Number", это "false" (ложное) значение. Будьте аккуратны: выражение typeof NaN возвращает тип Number. Чтобы проверить значение переменной на соответствие NaN, нужно воспользоваться встроенным методом isNaN() или оператором тройного равенства ===.</p><h2>4. Какие есть способы объявления функций? В чем их отличия? Что такое стрелочная функция?</h2><p>Ниже рассмотрим ключевые отличия Function Declaration от Function Expression.</p><p>Во-первых, синтаксис: Function Declaration — функция объявляется отдельной конструкцией function… в основном потоке кода.</p><p>Function Expression — функция, созданная внутри другого выражения или синтаксической конструкции. В данном случае функция создается в правой части «выражения присваивания» =:</p><p>Более тонкое отличие появляется тогда, когда функция создаётся движком JavaScript. Так, Function Expression появляется в то время, как выполнение доходит до него, и затем уже может использоваться.</p><p>После того, как поток выполнения достигнет правой части выражения присваивания let sum = function…, функция считается созданной и может быть использована (присвоена переменной, вызвана и т.д. ).</p><p>С Function Declaration всё иначе. Она может быть вызвана раньше, чем объявлена. Другими словами, когда движок JavaScript готовится выполнять скрипт или блок кода, прежде всего, он ищет в нём Function Declaration и создаёт все такие функции. Можно считать этот процесс «стадией инициализации».</p><p>Только после того, как все объявления Function Declaration будут обработаны, продолжится выполнение. В результате функции, созданные как Function Declaration, могут быть вызваны раньше своих определений.</p><p>Например, будет работать так:</p><p>Функция sayHi была создана, когда движок JavaScript подготавливал скрипт к выполнению, и такая функция видна повсюду в этом скрипте.</p><p>Если бы это было Function Expression, то такой код вызвал бы ошибку:</p><p>Функции, объявленные при помощи Function Expression, создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой (*). Слишком поздно.</p><p>Ещё одна важная особенность Function Declaration заключается в её блочной области видимости.</p><p>В строгом режиме, когда Function Declaration находится в блоке {...}, функция доступна везде внутри блока, но не снаружи.</p><p>Для примера давайте представим, что нам нужно объявить функцию welcome() в зависимости от значения переменной age, которое мы получим во время выполнения кода. И затем запланируем использовать её когда-нибудь в будущем.</p><p>Если мы попробуем использовать Function Declaration, это не заработает так, как задумывалось:</p><p>Это произошло, так как объявление Function Declaration видно только внутри блока кода, в котором располагается.</p><p>Вот ещё один пример:</p><p>Что можно сделать, чтобы welcome была видна снаружи if? Верным подходом будет воспользоваться функцией, объявленной при помощи Function Expression, и присвоить значение welcome переменной, объявленной снаружи if, что обеспечит нам нужную видимость.</p><p>Такой код заработает, как ожидалось:</p><p>Или мы могли бы упростить это ещё сильнее, используя условный оператор:</p><p>Так когда использовать Function Declaration, а когда Function Expression?</p><p>Как правило, если нам понадобилась функция, нужно рассматривать синтаксис Function Declaration, который мы использовали до этого. Он даёт больше свободы в том, как мы можем организовывать код. Функции, объявленные таким образом, можно вызывать до их объявления.</p><p>Также функции вида function f(…) {…} чуть более заметны в коде, чем let f = function(…) {…}. Function Declaration легче «ловятся глазами».</p><p>…Но если Function Declaration нам не подходит по какой-то причине или нам нужно условное объявление (мы рассмотрели это в примере выше), то следует использовать Function Expression.</p><h2>5. Что такое функции высшего порядка? Приведите примеры.</h2><p>Функции высшего порядка — это функции, которые могут:</p><ol><li>Принимать функции в качестве аргументов.</li><li>Возвращать функции как результат своей работы.</li></ol><p>Вот встроенные функции высшего порядка в JavaScript:</p><ul><li>map() — применяет функцию ко всем элементам массива.</li><li>filter() — фильтрует элементы массива на основе условия.</li><li>reduce() — сводит массив к одному значению, применяя функцию.</li></ul><h2>6. Что такое Promise и какие бывают состояния?</h2><p>Promise — объект в JavaScript, который представляет результат асинхронной операции. Промис позволяет обрабатывать результат операции, когда он станет доступным, вместо того, чтобы блокировать выполнение кода и ожидать завершения операции.</p><p>Промис может находиться в одном из трех состояний:</p><ul><li><b>Pending</b> — исходное состояние промиса. Он находится в ожидании выполнения или отклонения операции.</li><li><b>Fulfilled</b> — промис переходит в это состояние, когда операция успешно завершается.</li><li><b>Rejected</b> — промис переходит в это состояние, когда операция завершается с ошибкой. Здесь промис возвращает причину ошибки.</li></ul><p>Пример:</p><h2>7.     Как сравнивать в JS? Как сравнить два массива?</h2><p>Когда вы сравниваете примитивные типы (числа, строки, булевы значения и т.д.), используются операторы == (нестрогое сравнение) и === (строгое сравнение).</p><p>==  проверяет равенство значений после приведения типов.</p><p>=== проверяет как равенство значений, так и типов (без приведения типов).</p><p>При сравнении массивов в JavaScript важно помнить, что массивы — это объекты, и сравнение происходит по ссылке. То есть два массива будут равны только в том случае, если они указывают на одну и ту же ссылку в памяти.</p><p>Можно преобразовать массивы в строки JSON и сравнить их. Это удобный способ, но он имеет несколько ограничений (например, порядок элементов в массиве имеет значение).</p><p>Для более точного сравнения массивов (в том числе с вложенными структурами) можно пройтись по каждому элементу массива с помощью цикла for или методов every/some.</p><h2>8.     Чем отличаются any, unknown и never?</h2><p>Основные различия:</p><ul><li>any: можно присваивать любые значения, без проверки типа.</li><li>unknown: можно присваивать любые значения, но необходимо проверять тип перед использованием.</li><li>never: тип для значений, которые не могут существовать, например, функции, которые не возвращают ничего.</li></ul><h2>9.     Что такое CORS и как его можно решить на фронтенде?</h2><p>CORS — механизм безопасности, который предотвращает доступ к данным с других источников. Чтобы решить проблемы с CORS:</p><ul><li>На фронтенде можно использовать прокси-серверы для разработки.</li><li>В продакшн-окружении необходимо настроить CORS на сервере.</li><li>Если вы не контролируете сервер, то решением будет обращение к разработчикам API или использование серверного прокси для обхода ограничений.</li></ul><h2>10.  Что такое Progressive Web Apps (PWA)? Зачем нужно?</h2><p>Progressive Web Apps (PWA) — тип веб-приложений, который использует современные веб-технологии для предоставления пользователям опыта, схожего с нативными мобильными приложениями, но через обычный веб-браузер. PWA можно использовать в любом браузере, который поддерживает стандарты веба. Такие приложения могут работать оффлайн, присылать пуши, быстро загружаться и подстраиваться под любой браузер, который поддерживает эти фичи. Из примеров — банковские веб-приложения, которые можно установить на экран.</p><p>Вот главные особенности PWA:</p><ul><li><b>Работа в оффлайн-режиме (Offline-first). </b>PWA используют Service Workers, которые позволяют веб-приложению работать даже без интернета. Это значит, что приложение может кешировать данные и ресурсы, обеспечивая доступность контента в оффлайн-режиме или при плохом интернет-соединении.</li><li><b>Установка на устройство (Installable).</b> PWA можно устанавливать на устройства как нативные приложения. При этом скачивать их из магазина пользователю не нужно.</li><li><b>Push-уведомления.</b> PWA могут отправлять push-уведомления — так пользователь может получать информацию, даже если приложение закрыто.</li><li><b>Обновления.</b> Приложения могут автоматически обновляться в фоновом режиме.</li><li><b>Мгновенная загрузка.</b> PWA загружаются быстрее, так как они используют кэширование ресурсов и данных через Service Workers — это улучшает производительность даже при медленном интернете.</li><li><b>Универсальность.</b> PWA работают на всех платформах (мобильные устройства, десктопы, планшеты) и в любых браузерах, которые поддерживают современные веб-стандарты (например, Chrome, Firefox, Safari, Edge и т.д.).</li></ul><h2>11.  Lifecycle во Vue: когда использовать хуки жизненного цикла?</h2><p>В Vue 2 жизненный цикл выглядит следующим образом:</p><p>beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → Destroyed</p><p>В Vue 3 жизненный цикл был немного изменен и улучшен. Некоторые хуки переименованы:</p><p>beforeDestroy → beforeUnmount</p><p>destroyed → unmounted</p><p>Кроме того, в Vue 3 появилась возможность использовать Composition API, который предоставляет более гибкий способ организации жизненного цикла компонентов. Теперь можно создавать компоненты с помощью функции setup().</p><p>Когда использовать хуки жизненного цикла?</p><ul><li>beforeCreate и created используются для настройки данных, свойств или методов компонента до и после его создания.</li><li>beforeMount и mounted полезны для операций, которые необходимо выполнить при рендере компонента (например, вызов API, настройка сторонних библиотек, или выполнение начальной логики).</li><li>beforeUpdate и updated можно использовать для наблюдения за изменениями данных или для манипуляций с DOM до или после его обновления.</li><li>beforeDestroy и destroyed (или beforeUnmount и unmounted в Vue 3) полезны для очистки ресурсов перед уничтожением компонента.</li></ul><h2>12.  В каком компоненте отработает mounted вначале — дочернем или родительском?</h2><p>В Vue.js хук mounted вызывается для компонента, как только его DOM вставляется в дерево DOM. Когда компонент — часть иерархии (например, родительский и дочерний компоненты), хуки жизненного цикла выполняются в определенном порядке.</p><p>Хук mounted будет вызван для дочернего компонента перед родительским.</p><p>Объяснение: родительский компонент инициирует рендеринг и монтирование дочернего компонента. Когда Vue монтирует компоненты, он сначала монтирует все дочерние компоненты, а потом родительский компонент. Это связано с тем, что родительский компонент ждет завершения монтирования дочерних компонентов, чтобы их правильно вставить в DOM.</p><h2>13.  Как изменить commit message</h2><h4>1. Изменить последний коммит</h4><p>Если нужно изменить сообщение только последнего коммита, используйте команду:</p><p>git commit --amend</p><p>После этого Git откроет редактор, где вы сможете изменить сообщение коммита. Сохраните изменения и выйдите из редактора.</p><h4>2. Изменить старый коммит</h4><p>Если нужно изменить сообщение не последнего коммита, а более старого, можно воспользоваться rebase:</p><p>git rebase -i &lt;commit_id&gt;</p><p>Здесь &lt;commit_id&gt; — идентификатор коммита, сообщение которого вы хотите изменить. Можно использовать git log для получения ID нужного коммита. В открывшемся файле замените слово pick на reword напротив коммита, который хотите изменить, и сохраните файл. Git откроет редактор для изменения сообщения этого коммита. После редактирования сохраните и выйдите.</p><p>Завершите процесс rebase:</p><p>git rebase --continue</p><h4>3. Изменить сообщение в уже отправленном коммите (Push)</h4><p>Если коммит был уже отправлен в удаленный репозиторий, а вы хотите изменить сообщение коммита, то вам нужно будет форсировать пуш.</p><p>Измените коммит с помощью git commit --amend или git rebase -i.</p><p>После изменения выполните принудительный пуш:</p><p>git push --force</p><p>Пожалуйста, перед собеседованием повторите CSS. Многие разработчики усиленно готовятся к технической сессии по JS, TS, своему фреймворку, но забывают о верстке. Если вам повезет работать над новым продуктом, то верстка будет занимать больше половины времени.</p><h2>14.  Что такое псевдоклассы в CSS? Как обратиться к псевдоклассу в JS?</h2><p>Псевдоклассы в CSS — стили, которые применяются  к элементам в зависимости от их состояния или структуры в документе.</p><p>В JavaScript нельзя напрямую изменить псевдоклассы, но можно использовать селекторы CSS для выбора элементов с псевдоклассами. Это делается с помощью методов по типу querySelector и querySelectorAll.</p><h2>15.  Что такое dvh, lvh, em и rem в CSS? Когда и почему лучше использовать каждую из этих единиц измерения?</h2><p>Эти единицы были введены в спецификации CSS, чтобы улучшить работу с адаптивным дизайном и обеспечить корректное отображение на мобильных устройствах.</p><ul><li>dvh (dynamic viewport height) — единица измерения, которая учитывает динамические изменения в размерах окна, например, высота при открытии клавиатуры на мобильных устройствах.</li><li>lvh (large viewport height) — единица измерения, которая использует максимальную высоту вьюпорта, независимо от динамических изменений (например, не учитывает изменения, связанные с клавиатурой на мобильных устройствах).</li></ul><p>Когда использовать:</p><ul><li>dvh полезен, когда нужно учитывать изменения размера окна при взаимодействии с мобильными устройствами (например, при открытии клавиатуры).</li><li>lvh полезен для работы с мобильными устройствами, когда нужно обеспечить стабильный дизайн, не зависящий от изменения высоты вьюпорта из-за динамических изменений.</li><li>em — это единица измерения, которая зависит от размера шрифта родительского элемента. 1em равен текущему размеру шрифта родительского элемента. Если в родительском элементе установлен шрифт размером 16px, то 1em будет равен 16px.</li><li>rem — это единица измерения, которая зависит от размера шрифта корневого элемента (&lt;html&gt;). 1rem равен размеру шрифта, установленному на корневом элементе (по умолчанию в большинстве браузеров это 16px).</li></ul><p>Когда и зачем использовать каждую из этих единиц?</p><ul><li>dvh/lvh: Используйте, если вам нужно учитывать динамическое изменение высоты вьюпорта (например, на мобильных устройствах при открытии клавиатуры) или если вам нужно работать с максимальной высотой вьюпорта, независимо от динамических изменений.</li><li>em: Используйте, когда размеры элементов должны зависеть от размера шрифта родительского элемента. Это полезно для создания гибких и адаптивных макетов, которые изменяются с размером шрифта.</li><li>rem: Используйте, когда нужно, чтобы размеры были относительно размера шрифта корневого элемента. Так проще поддерживать единообразие и легко масштабировать весь интерфейс.</li></ul><p>Если вы знали ответы на все вопросы, поздравляем — можете гордо считать себя мидлом и смело ходить на собеседования. Если в каких-то вопросах плаваете, то подучите теорию и порешайте побольше задачек/почитайте код других разработчиков — тогда все получится.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 библиотек JavaScript, которые можно забыть в 2025 году</title>
      <link>https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu</link>
      <comments>https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu</guid>
      <description><![CDATA[<p>Неактуальные библиотеки и фреймворки JavaScript, о которых можно забыть в 2025 году. Более современные и производительные аналоги. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu">10 библиотек JavaScript, которые можно забыть в 2025 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Feb 2025 10:01:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Многие разработчики, как и люди других профессий, придерживаются консервативных взглядов. Они считают, что если технология старая, но еще работает, нет смысла менять ее на новую. Такие программисты продолжают пользоваться неактуальными библиотеками для написания кода, не обращая внимания на современные тренды.</p><p>Это в корне неправильный подход. Устаревшие фреймворки и библиотеки не отвечают текущим требованиям к производительности, масштабируемости и адаптивности. Они не успевают за новейшими парадигмами и функциями, что неизбежно отражается на качестве создаваемых продуктов.</p><p>В нашем обзоре — 10 библиотек JavaScript, которым в 2025 году пора сказать «До свидания». Для каждого продукта из антирейтинга мы подобрали альтернативные варианты.</p><h2>Фреймворки, которые утратили актуальность в 2025 году</h2><h3>jQuery</h3><p>Это одна из первых библиотек JavaScript, которая из-за инерционного мышления все еще входит в некоторые списки самых популярных инструментов разработки. Пользователи ценят jQuery за кроссбраузерную поддержку, лаконичный синтаксис и простые алгоритмы взаимодействия с DOM.</p><p>Почему прогеры продолжают пользоваться библиотекой? Чисто технически jQuery присутствует во множестве сайтов, сделанных 10-15 лет назад (тогда этот код стал альтернативой VanillaJS). Библиотека создавалась, чтобы сделать язык более гибким и удобным в разработке.</p><p>Сегодня многие преимущества jQuery утратили свою актуальность — например, создание кода, работающего на всех браузерах. Теперь платформы стандартизированы, что делает кроссбраузерные решения библиотеки ненужными.</p><p>Кроме того, современные нативные API JavaScript серьезно улучшились — для подавляющего большинства задач, которые раньше выполнял jQuery, достаточно ванильного JS. Новейшие методики обеспечивают все манипуляции с DOM и взаимодействие веб -страницы с сервером (AJAX-запросы), поэтому необходимость в библиотеке отпадает.</p><p>В 2025 пришло время отпустить jQuery — его применение сейчас может привести к замедлению загрузки веб-страниц и приложений, а уж этого бы нам точно не хотелось.</p><h4>Чем заменить</h4><p>Нативного API JavaScript в ряде случаев будет достаточно для разработки, а для всех остальных ситуаций есть новые версии высокопроизводительных фреймворков React, Vue и Angular.</p><h3>Lodash</h3><p>Когда-то эта универсальная библиотека утилит считалась почти обязательной для каждого проекта на JavaScript. Здесь есть String — функция преобразования для обрезки и переноса в верхний регистр; Object — утилита для  расширения и слияния; Array — для сжатия и изменения; многие другие фичи, включая глубокое клонирование объектов и манипуляции с массивами данных.</p><p>Библиотека Lodash помогала программистам писать более компактный, чистый и простой в обслуживании и поддержке код, конвертировать данные в различные форматы, выполнять математические операции. В настоящее для большинства таких операций утилиты не требуются.</p><h4>Чем заменить</h4><p>Сегодня многие функции, представленные в Lodash, есть в новой спецификации JavaScript E56. Оператор spread (…), методы Array (map, reduce, filter и прочие) решают те же задачи, которые некогда решал Lodash. В число главных недостатков библиотеки входит также ее большой вес — импорт всего одной функции увеличивает накладные расходы проекта.</p><h3>Moment.js</h3><p>Долгое время эта библиотека была основным инструментом для работы с датами. Ее сильными сторонами были:</p><ul><li>способность анализировать, проверять, актуализировать и отображать текущие метки времени;</li><li>работать с календарными датами;</li><li>определять длительность различных процессов;</li><li>поддерживать часовые пояса и т.д.</li></ul><p>Сейчас эта библиотека стала слишком тяжелой — даже в мини-формате она занимает 66 КБ, что излишне нагружает устройства, отражается на производительности и быстрой работе UX-функций. Есть более легкие пакеты с теми же функциями.</p><h4>Чем заменить</h4><p>Современная альтернатива — date-fns — набор функций для работы с датами на JavaScript, который не входит в библиотеки и работает независимо. Предусматривает модульный импорт — вы можете взять из пакета только то, что требуется для работы, тем самым снижая нагрузку.</p><p>Ещё один вариант — Luxon — новая библиотека для работы с датами, созданная командой Moment. Этот инструмент изначально позиционировался как замена предыдущему продукту компании как более мощное, современное и удобное средство. Здесь работа с часовыми поясами реализована без дополнительных расширений, применяется современный подход к написанию кода.</p><p>Кроме того, JavaScript Temporal API позволяет работать с датами и временем напрямую, не используя сторонние библиотеки. Поэтому любое из указанных трех решений делает применение Moment.js избыточным и ненужным.</p><h3>RequireJS</h3><p>Долгое время библиотека была для JavaScript-разработчиков основным инструментом для управления зависимостями. Технология асинхронного определения модулей (AMD) обеспечивала эффективную асинхронную загрузку файлов. Модульный принцип не использовался в других библиотеках и инструментах, что создавало ощущение эксклюзива.</p><p>Это был самый эффективный способ взаимодействия с зависимостями, особенно ценный в работе с большими приложениями. Совместимость со всеми популярными браузерами, включая Firefox, Safari, Chrome, Opera, а также веб-продуктами на Node, была еще одной сильной стороной библиотеки.</p><p>С появлением модулей в ES6 RequireJS утратила статус уникального инструмента. В новой спецификации JavaScript реализован нативный способ определения и импорта модулей. Такой подход делает синтаксис более интуитивным, ускоряет и упрощает разработку.</p><p>При этом RequireJS в сравнении с более свежими аналогами слишком сложен в настройке и применении. Он требует от прогеров ручной настройки загрузчика и управления путями зависимостей, что повышает риск ошибок и отнимает кучу времени. Современные загрузчики более расторопные и автоматизированные.</p><h4>Чем заменить</h4><p>Помимо ES6, с модулями успешно работает сборщик Webpack, компилируя их в единый файл. Это еще более эффективный инструмент, совместимый с TypeScript и Node.js. При запуске программа обрабатывает модули, выстраивает граф зависимостей между ними и на его основе генерирует общий файл.</p><p>У этого бендлера есть дополнительные продвинутые возможности — например, разделение кода, горячая замена модулей в реальном времени, а также операция tree shaking (встряхивание дерева), то есть удаление мертвого кода из продукта. Webpack делает работу с зависимостями более рациональной и полностью заменяет тяжелый и устаревший RequireJS.</p><h3>Backbone.js</h3><p>Одна из первых библиотек JS (выпущена в 2010), основанная на шаблоне проектирования Model-View-Controller. Предназначена, в основном, для разработки пользовательских интерфейсов и структурирования веб-приложений.</p><p>Некогда  Backbone.js считался легковесным и функциональным инструментом, который упрощал работу с кодом, улучшал синхронизацию приложения с сервером и позволял создавать эффективный клиентский код.</p><p>Со временем у фреймворка стали проявляться ограничения. Например, отсутствие механизма двусторонней привязки данных. Такая опция есть у многих современных библиотек, поэтому разработчикам не приходится при каждом обновлении или изменении модели вручную настраивать DOM и множить шаблонный код. Все прогеры в курсе, что ручные операции существенно повышают риск ошибок.</p><p>Кроме того, в Backbone.js нет собственного шаблонизатора, что вынуждает применять другие библиотеки типа Handlebars.js.</p><h4>Чем заменить</h4><p>Достойных вариантов замены достаточно. Это React с его архитектурой, основанной на компонентах, и виртуальным DOM. Это и Vue.js с двусторонней привязкой данных и гибкой архитектурой. Это также универсальный Angular с теми же функциями.</p><h3>Modernizr</h3><p>Библиотека обнаружения особенностей HTML5 и CSS3 в браузере пользователя. В свое время была крайне полезной и обеспечивала работу приложений в разных браузерах.</p><p>С появлением транпислеров (программ, которые переводят части кода с одного языка программирования на другой) необходимость в Modernizr существенно снизилась. Более того, использование этого инструмента чревато увеличением расходов на приложения. Разработчикам приходится задействовать множество тестов на обнаружение функций, что замедляет загрузку.</p><h4>Чем заменить</h4><p>Компилятор (транспилер) JavaScript Babel успешно решает задачу преобразования современного кода в формат, совместимый со старыми версиями браузеров. Кроме того, Babel — полифил, то есть способен заполнять пробелы в скрипте с целью добавления новых функций.</p><h3>MooTools</h3><p>Объектно-ориентированный фреймворк, некогда популярный и безальтернативный. MooTools содержит комплект утилит для работы с DOM, событиями и AJAX-запросами. Сильными сторонами библиотеки был объектно-ориентированный подход и лаконичный синтаксис. Разрабы, предпочитающие писать элегантный и ясный код, были от MooTools в восторге.</p><p>Однако постепенно все преимущества фреймворка нивелировались — сообщество так и не дождалось существенных обновлений и перешло на более прогрессивные инструменты. В сравнении с ними MooTools занимает много места, что негативно сказывается на приложениях, где важна производительность (а сегодня она важна везде).</p><h4>Чем заменить</h4><p>В современной версии Vanilla JavaScript реализована большая часть функций, представленных в MooTools, в том числе методы для работы с DOM и для обработки событий.</p><p>Что касается полноценных библиотек, то MooTools без проблем заменят React или Vue.js. Это простые в освоении и использовании прогрессивные фреймворки для разработки пользовательских интерфейсов.</p><h3>Script.aculo.us</h3><p>Библиотека визуальных эффектов и методов управления пользовательским интерфейсом. Была популярна у разработчиков, работающих с анимацией и интерактивными опциями в приложениях. Сильные стороны Script.aculo.us — простота в применении, обширный ассортимент возможностей — перетаскивание, сортировка, слайдеры и т.д.</p><p>Отсутствие значительных обновлений и большой вес были факторами, которые ослабили позиции Script.aculo.us в сообществе. Если в 2025 году в мире еще остались программисты, которые пользуются этой библиотекой, им точно пора осваивать новые инструменты.</p><h4>Чем заменить</h4><p>GreenSock — более мощная, быстрая и универсальная библиотека анимации с огромным выбором эффектов и элементов управления. Работает на стороне клиента и сервера, совместима со всеми браузерами.</p><p>Anime.js — еще один гибкий и адаптивный инструмент. Подходит новичкам, поскольку его просто настраивать и легко использовать.</p><h3>Underscore.js</h3><p>Библиотека утилит, которая годами удерживала лидирующие позиции в разработке на  JavaScript. Эксперты называли ее «швейцарским ножом разработчика» за большой выбор функций и массу возможностей.</p><p>Однако с этим инструментом произошло то же, что и другими библиотеками утилит. Большинство функций, которые были представлены в Underscore.js, теперь реализованы в ES6.</p><h4>Чем заменить</h4><p>Новая спецификация JavaScript E56+ поддерживает методы функционального программирования, позволяет манипулировать объектами и массивами данных. Таким образом, все функции Underscore.js доступны непосредственно на JavaScript без всяких посредников. Вывод — переносите код на E56+, он станет чище и проще в поддержке.</p><h3>Axios</h3><p>Библиотека для отправки запросов HTTP из браузера или Node.js. Поддерживает множество методов запросов (Get, Put, Delete и другие), загрузку и отправку файлов. Сильные стороны — удобный интерфейс, поддержка Promise API (способ организации асинхронного кода).</p><p>Несмотря на популярность Axios и его относительную свежесть, эта библиотека стремительно теряет позиции, поскольку появились новые инструменты с более расширенным функционалом.</p><h4>Чем заменить</h4><p>Fetch API превосходит конкурента по простоте и гибкости. Он выполняет те же задачи, но оснащен дополнительными функциями — потоковой передачей, отменой запросов, улучшенной обработкой ошибок.</p><p>Замена устаревших библиотек новыми — не только погоня за трендами и стремление к прогрессу, но и возможность создавать более производительные, легкие и экономичные веб-страницы и приложения.</p><p>В эпоху, когда быстродействие, лаконичность и оптимизация ценятся как разработчиками, так и юзерами, использование наиболее эффективных инструментов становится ключевым конкурентным преимуществом поставщиков цифровых продуктов.</p><p>Делитесь в комментариях, на какие библиотеки перешли! Ну а если хотите детальнее разобраться во всех аспектах Java и JavaScript, заходите в наш <a href="https://t.me/+b_gDXaX2fMIwODky">тг-канал</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топовые инструменты для фронтенд-разработки в 2025 году</title>
      <link>https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu</link>
      <comments>https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu</guid>
      <description><![CDATA[<p>Инструменты для фронтенд-разработки. Показываем актуальный инструментарий для frontend в 2025 году. Рассматриваем тренды для фронтендеров ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu">Топовые инструменты для фронтенд-разработки в 2025 году</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[Redux]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Feb 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Специальные инструменты для разработки фронтенда существенно упрощают работу программистов, ускоряют процесс, помогают создавать привлекательные интерфейсы сайтов и решают множество других прикладных задач.</p><p>Мы собрали топ самых эффективных инструментов для фронтенда в 2025 году. Актуальная информация о фреймворках, библиотеках, средствах сборки, проверки и отладки будет полезна как начинающим, так и опытным прогерам.</p><h2>Фреймворки и библиотеки для разработки интерфейсов</h2><p>Создание фронтенда, то есть клиентской части программного продукта — неотъемлемый этап разработки сайтов и приложений. Фронтендеры работают с с HTML, CSS, JavaScript, а также используют многочисленные библиотеки с готовыми решениями. Даже новички в курсе, что без фреймворков проекты сегодня не пишутся — это долго, тяжело и непродуктивно. Ниже — наиболее эффективные фреймворки для разработки UI.</p><h3>React.js</h3><p>Созданная Джорданом Валке, ведущим программистом самой известной в мире соцсети, библиотека React остается лидером в сфере разработки инфраструктуры на JavaScript UI. На <a href="http://react.js">React.js</a> написаны такие проекты, как Skype, PayPal, Airbnb, Dropbox и многие другие.</p><p>Популярность библиотеки объясняется вполне объективными причинами:</p><ul><li>Обширное комьюнити. Только на GitHub вы найдете больше 110 тыс. публикаций с тегом «react». Библиотекой пользуются во всем мире, а тысячи профессиональных программистов постоянно обновляют инструменты и актуализируют данные. Если у разработчика появится вопрос, он обязательно найдет на него ответ в сообществе.</li><li>Технологический бэкграунд. Библиотеку создали профи из FB для себя — такие проекты делаются максимально качественно и надежно. Тот факт, что технологии доверяют крупнейшие мировые корпорации, говорит сам за себя.</li><li>Активное взаимодействие с TypeScript. Этот инструмент представляет собой продвинутую версию JS, который со временем стал слишком тяжелым в плане кода. TypeScript лишен многих недостатков Java, поэтому активно применяется в React.js. В общем, в 2025 году фреймворк точно не умрет.</li><li>Версионность. В React, в отличие от Angular или Vue, код, написанный даже несколько лет назад, без проблем запустится на новейшей версии. А если там есть неактуальный элемент, программа сама подскажет, как его исправить.</li></ul><p>В React 19 появились новые, еще более мощные компоненты, повышающие производительность и пользовательский опыт:</p><ul><li>Улучшенная поддержка Server Components, с которой более удобно работать с серверным рендерингом и загружать контент в больших проектах;</li><li>Новый API — Actions, который делает более простой и продуктивной работу с формами и интерактивными элементами;</li><li>Директивы preload и preinit обеспечивают предварительную загрузку важных ресурсов, что ускоряет работу приложений;</li><li>Новый канал релизов React Canaries позволяет протестировать некоторые опции React еще до их официального выпуска.</li></ul><p>Улучшения произошли и в экосистеме React. Упрощается работа с Redux — библиотекой, которую все чаще используют в связке с React. Инструменты для работы с таблицами и интерфейсами React Table 8 более доступны и производительные.</p><h3>Vue.js</h3><p>Еще один мощный, но при этом простой и гибкий в применении инструмент для фронтенд-разработчиков — <a href="http://vue.js">Vue.js</a>. Согласно экспертным прогнозам, он сохранит свои позиции в топе-3 фреймворков для JavaScript в 2025 году.</p><p>Относительно недавно создатели Vue радикально обновили движок и архитектуру. При этом доля TypeScript кода в репозитории приближается к 99%, что расценивается профессиональными прогерами крайне позитивно.</p><p>Команда разработчиков Vue.js, возглавляемая Эваном Ю, в свое время заявила, что фреймворк станет самым простым и удобным инструментом из всех существующих. По мнению экспертов, их слова полностью подтвердились.</p><p>В числе главных преимуществ фреймворка:</p><ul><li>Подходит для новичков. Для освоения достаточно знания HTML, CSS, JavaScript;</li><li>Небольшой вес. Размер новой заархивированной библиотеки runtime меньше 10 kb;</li><li>В пакет входит виртуальный DOM — объектная модель документа;</li><li>Активное крутое сообщество. Профессионалы помогут, если у разработчика возникнут проблемы.</li></ul><p>Количество полноценных приложений, сделанных на Vue.js, превышает 36 тысяч. Это число постоянно растет, и в 2025 году тренд обязательно продлится. В экосистему внедряются новые технологии, например, Vapor Mode, — инструмент, открывающий новые горизонты для разработки высокопроизводительного софта.</p><p>Подход, заданный Composition API, позволяет создавать компоненты через импорт функций вместо обновления опций. На выходе получаем более чистую архитектуру, что особенно важно для продуктов со сложной логикой.</p><p>Появление высокоуровнего фреймворка Nuxt 4 принесет важные улучшения в плане производительности и гибкости разработки. Поддержка Vue 3.3+ в Nuxt 4 улучшает работу с анимацией и межкомпонентные переходы. Пользовательский интерфейс становится более динамичным и плавным.</p><p>На фреймворке Vue созданы сайты Ozon, Zoom, Chess (сайт для шахматистов с посещаемостью 20 млн пользователей в месяц), Livestorm — платформа для запуска вебинаров, и многие другие ресурсы.</p><h3>Angular</h3><p>Этому мощному фреймворку доверяет Google, что уже говорит само за себя. Множество десктопных и мобильных приложений создано на <a href="https://angularjs.org/">AngularJS</a> — это крутой инструмент с минимальным риском критических ошибок. На сайте фреймворка создатели призывают разработчиков сосредоточиться на приложениях, а код Angular берет на себя.</p><p>И хотя профи считают этот фреймворк более сложным в освоении, чем Vue и React, его функциональность оправдывает все трудности учебного процесса. В 2025 году эволюция Angular продолжится: его последние версии показывают существенные изменения в подходах к реактивности ПО и управлению состоянием.</p><p>Новые решения, на которые стоит обратить внимание:</p><ul><li>К числу ключевых нововведений фреймворка относится технология Signals, которая делает взаимодействие с реактивными данными более простым. «Сигналы» актуальны в том случае, когда требуется синхронное обновление UI и оптимизация производительности приложения.</li><li>В Angular 19 компоненты Standalone стали новым стандартом. Теперь они могут использоваться без добавления в модуль. Такое решение упрощает архитектуру приложений и делает подход к коду более прямолинейным.</li><li>Внедрение зависимостей (DI, Dependency Injection) дополнено новой функцией inject() — она заменяет стандартный конструктор, что также упрощает код и делает его более гибким.</li><li>Автоматическая миграция продуктов к новому API — еще один шаг к упрощению и сокращению кода. Это напрямую отражается на производительности современных приложений, в первую очередь, на больших и логически сложных.</li></ul><p>Прежние плюсы  Angular остались неизменными — расширяемость, взаимодействие с другими фреймворками и инструментами, множество надстроек и дополнений — Auto Validate, Complete, Grid и т.д.</p><p>На фреймворке написан сайт британской газеты The Guardian, интерактивные элементы PayPal, самый посещаемый сайт мониторинга погоды Weather.com, фронтенд музыкального ресурса VEVO и многие другие продукты.</p><h3>Svelte</h3><p>В свое время фреймворк предложил принципиально новый подход к разработке пользовательских интерфейсов. Концепция создателей <a href="https://svelte.dev/">Svelte</a> — делать больше с минимальными затратами. Некоторые разработчики считают Svelte больше компилятором, чем фреймворком, что по сути соответствует действительности.</p><p>В чем основные фишки Svelte:</p><ul><li>При меньшем весе проекты более производительны — им не требуется виртуальный DOM;</li><li>Фреймворк прост в освоении, поэтому подходит начинающим разработчикам;</li><li>Опытные прогеры обращают внимание на быстроту и стабильность инструмента;</li><li>Анимации в Svelte доступны прямо из коробки — сторонние библиотеки не требуются.</li></ul><p>На текущем этапе этот фреймворк рано ставить на одну ступень с React и Vue, но его рейтинг на GitHub постоянно повышается, и в 2025 году растущий тренд точно сохранится.</p><p>Фронтенд-разработкой с фреймворком Svetle пользовались такие компании, как Spotify, Ikea, Finance.yahoo, Music.apple и многие другие.</p><h3>Solid.js</h3><p>Минималистичный фреймворк, который по производительности и быстроте превосходит все остальные фреймворки из топа. <a href="https://www.solidjs.com/">Solid</a> напоминает React, но вместо виртуального DOM использует компиляцию. Проект без проблем компилируется в JavaScript-код, что обеспечивает быстрый рендеринг страницы (трансформацию кода в картинку для пользователя).</p><p>В чем плюсы:</p><ul><li>Тонкая реактивность обеспечивает оптимизацию рендеринга в реальном времени;</li><li>Есть бесшовная интеграция со всеми актуальными библиотеками на JS;</li><li>Компоненты фреймворка — стандартные JavaScript-функции: они выполняются однократно для настройки представления, после чего автоматически обновляют интерфейс.</li></ul><p>Solid.js, по состоянию на 2025, — идеальный инструмент для одностраничных приложений и продуктов с максимальной интерактивностью (чат-ботов, мессенджеров, панелей управления).</p><p>Фреймворк используют такие ресурсы, как 1c.ru, криптовалютная биржа Ape.pro, маркетплейс Майнкрафт Waypoint Studios и другие.</p><h2>Инструменты для сборки и разработки</h2><p>По мнению большинства экспертов, в 2025 году ведущим трендом в сборке и разработке на JavaScript будет работа с универсальными мета-инструментами, совместимыми с любыми фреймворками.</p><p>Топ наиболее эффективных инструментов этого направления:</p><ul><li><a href="https://vite.dev/">Vite</a>. Локальный сервер разработки от Эвана Ю. В новой версии Vita 6 возможности существенно расширились, в том числе в плане поддержки других фреймворков, помимо Vue. Благодаря модульной архитектуре и новой системе плагинов, улучшилась кастомизация сборки (процесс внесения изменений). С Vite можно использовать несколько фреймворков в одном проекте — для сложных приложений это актуальная опция. Обновления в реальном времени происходят быстро и стабильно.</li><li><a href="https://webpack.js.org/">Webpack</a>. Сборщик модулей, который компилирует части кода в единый файл. Работает с JavaScript и TypeScript. Несмотря на появление новых инструментов сборки, в 2025 году Webpack останется обязательным инструментом, особенно для работы с масштабными проектами. Он оптимизирует размер и скорость загрузки ресурсов, эффективно выстраивает процессы разработки, в том числе HMR — горячую замену модулей. Плюс обеспечивает совместимость продуктов с различными версиями браузеров.</li><li><a href="https://parceljs.org/">Parcel</a>. Главная фишка этого инструмента в том, что его не нужно настраивать и конфигурировать — это делается автоматически. Parcel применяет воркеры — скрипты для многоядерной компиляции, и содержит кэш файловых систем для ускоренной сборки. Есть поддержка из коробки JS, CSS, HTML, поэтому соответствующие плагины не требуются. Модули, которые меняются в процессе разработки, обновляются автоматически.</li></ul><h2>Тестирование и отладка</h2><p>В 2025 году в тестировании и отладке продуктов наиболее востребованы следующие инструменты:</p><ul><li><a href="https://jestjs.io/ru/">Jest</a>. Самый популярный фреймворк для тестирования кода на JavaScript. Работает с синхронным и асинхронным кодом, интегрируется с React и Vue. В числе основных плюсов — простая настройка и удобное применение. Подходит для проверки и отладки сложных приложений.</li><li><a href="https://www.cypress.io/">Cypress</a>. Инструмент для автоматизации тестирования, который подходит новичкам. Использует тест end-to-end, покрывая весь путь пользователя, и внедряется в CI/CD — процессы непрерывной доставки и развертывания. Благодаря подробной документации подходит для новичков.</li><li><a href="https://testing-library.com/docs/react-testing-library/intro">React Testing Library</a>. Библиотека эффективных инструментов для тестирования пользовательских интерфейсов UI. RTL позволяет абстрагироваться от внутренней логики компонентов и проверяет состояние реального DOM, то есть имитирует действия пользователей, руководствуясь только данными браузера.</li><li><a href="https://storybook.js.org/">Storybook</a>. Позиционируется как максимально простое средство тестирования и разработки. Создает изолированную программную среду для ускоренного и эффективного процесса.</li></ul><h2>Инструменты для контроля версий</h2><p>Актуальные в 2025 средства для контроля созданных разработчиками версий:</p><ul><li><a href="https://git-scm.com/">Git</a>. Распределенная VCS (система управления версиями) отслеживает изменения в исходном коде и файлах в совместных проектах. Позволяет править и контролировать версии в процессе разработки. Обладает расширенными возможностями работы с репозиториями.</li><li><a href="https://github.com/gitlabhq">GitHub/GitLab</a>. Службы управления репозиториями, которые используются и для управления изменениями в опенсорс-проектах. Оба репозитория обладают полным набором инструментов для контроля и интеграций, обеспечивая эффективную совместную разработку и неограниченное сотрудничество. Обладают встроенными опциями безопасности, которые разработчики могут в любой момент активировать.</li><li><a href="https://bitbucket.org/product">Bitbucket</a>. Аналог GitHub с бесплатным доступом к контролю команды до пяти разработчиков. Подходит для написания частных проектов, обладает гибкостью, совместим со множеством других инструментов, в том числе с Jira, — средой для управления проектами.  Интеллектуальный семантический поиск JQL сканирует код по запросу пользователя.</li></ul><h2>CSS-процессоры и CSS-фреймворки</h2><p>Инструменты для первичной трансляции кода, актуальные в 2025 году:</p><ul><li><a href="http://sass-lang.com/">Sass</a>. Препроцессор упрощает написание кода, исключая одинаковые участки или заменяя ключевые элементы синтаксиса одним знаком. Sass считается самым надежным языком расширений CSS, содержит средства импорта и множество других функций.</li><li><a href="http://lesscss.org/">Less</a>. Этот препроцессор поддерживает CSS и позволяет разработчикам применять его методы для улучшения и дополнения веб-приложений. В Less встроены логические, строковые, математические функции, а также функции списков.</li><li><a href="https://getbootstrap.com/">Bootstrap</a>. Классический фреймворк для ускоренной верстки со множеством встроенных компонентов. Более 20% всех сайтов в мире создано с его помощью. Автоматически выстраивает адаптивную сетку на базе Flex-модели, создает изображения, поставляется с панелями навигации и другими компонентами.</li><li><a href="https://tailwindcss.com/">Tailwind CSS</a>. Фреймворк, который пользователи называют прогрессивной версией Bootstrap. Содержит обширный каталог утилитарных классов и инструментов для прототипирования, стилизации сайтов и приложений. Легко настраивается, работает с собственными служебными шаблонами, создает сложные адаптивные макеты, в том числе с ориентацией под мобильные устройства.</li></ul><h2>Инструменты для работы с API и серверной логикой</h2><p>Эффективная работа с API обеспечивает надежность при обработке информации в приложениях.</p><p>В 2025 году топ таких инструментов выглядит следующим образом:</p><ul><li><a href="https://graphql.org/">GraphQL</a>. Язык, описывающий взаимодействие клиента с сервером.  Рассматривается как альтернатива стандартного инструмента REST. В сравнении с последним, более удобен в применении, содержит обширный инструментарий.</li><li><a href="https://www.apollographql.com/docs/react">Apollo Client</a>. Язык запросов, созданный разработчиками FB. Интегрируется с GraphQL и React для управления состоянием приложения. Предоставляет эффективные инструменты в виде поддержки кэширования, управления состоянием и исправления ошибок. Интегрируется с библиотекой Redux и другими фреймворками.</li><li><a href="https://axios-http.com/ru/docs/intro">Axios</a>. JS-библиотека для работы с HTTP-запросами, а по сути — клиент для работы в браузере и с платформой Node.js. Помогает настроить взаимодействие между frontend и backend.</li></ul><h2>UI и UX-дизайн</h2><p>Интерфейсу и комфорту пользователя современные сайты и приложения уделяют максимум внимания. На кривые и неудобные ресурсы посетители просто не приходят — зачем, если есть лаконичные и функциональные продукты, отвечающие актуальным трендам цифрового дизайна.</p><p>Эти инструменты сохраняют свою актуальность в 2025 году:</p><ul><li><a href="https://www.figma.com/">Figma</a>. Графический редактор, который остается самым популярным инструментом для проектирования интерфейсов, прототипирования и тестирования. Также это среда взаимодействия команды разработчиков, доступная непосредственно в браузере. Содержит удобные инструменты, может работать в режиме многозадачности.</li><li><a href="https://helpx.adobe.com/ru/xd/get-started.html">Adobe XD</a>. ПО для работы с интерфейсами, анимированием, прототипами сайтов, сервисов и приложений от лидера индустрии. Основной инструмент UX-дизайнеров, желающих создавать юзабельные и современные макеты и делиться результатами работы с командой. Содержит многочисленные инструменты для рисования, создания 3D-эффектов, добавления интерактивных функций и анимации.</li><li><a href="https://www.sketch.com/">Sketch</a>. Выбор многих профессионалов индустрии UI/UX дизайна. Упрощает разработку интерфейсов благодаря множеству встроенных полезных функций — артбордов, редакторов, поддержкой командной работы в режиме онлайн. Работает только с macOS.</li></ul><p>При выборе фреймворков и инструментов фронтам стоит руководствоваться удобством и простотой использования, соответствием собственному профессиональному уровню, языковой поддержкой, ценой, а также спецификой создаваемого продукта.</p><p>Вспомогательные инструменты ускоряют и упрощают разработку, снижают риск ошибок и работают на результат — запуск привлекательных, быстрых и функциональных веб-продуктов и приложений.</p><p><i>Рассказывайте в комментариях, какими фреймворками и библиотеками пользуетесь вы. А если хотите найти большей полезной информации про фронтенд — вам </i><a href="https://t.me/+BDTRdPNEOY00ZjE6">сюда</a><i>.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>В какую сторону развивается Vue и есть ли ему современные альтернативы</title>
      <link>https://tproger.ru/articles/v-kakuyu-storonu-razvivaetsya-vue-i-est-li-emu-sovremennye-alternativy</link>
      <comments>https://tproger.ru/articles/v-kakuyu-storonu-razvivaetsya-vue-i-est-li-emu-sovremennye-alternativy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/v-kakuyu-storonu-razvivaetsya-vue-i-est-li-emu-sovremennye-alternativy</guid>
      <description><![CDATA[<p>Фреймворк для разработки интерфейсов и ве-приложений Vue — особенности и преимущества. Куда движется и есть ли ему современные альтернативы</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/v-kakuyu-storonu-razvivaetsya-vue-i-est-li-emu-sovremennye-alternativy">В какую сторону развивается Vue и есть ли ему современные альтернативы</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Инновации]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 17 Jan 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Прогрессивный фреймворк для создания веб-приложений, сайтов и пользовательских интерфейсов Vue.js входит в топ наиболее популярных инструментов разработки. Vue легко интегрируется в проекты, где задействован язык программирования JavaScript и есть библиотеки на его основе. В числе основных плюсов Vue.js — доступность, простая архитектура, высокая производительность и гибкие настройки. У фреймворка обширная экосистема и многочисленное сообщество пользователей.</p><p>Vue создан более 10 лет назад. Для IT-продукта это большой срок, достаточный для завершения полного эволюционного цикла. Однако фреймворк продолжает развиваться и остается востребованным инструментом для создания интерфейсов, веб-приложений и инфраструктуры.</p><p>Узнаем, есть ли альтернативы у фреймворка Vue, каковы его особенности и преимущества и как использовать Vue.js с максимальной эффективностью.</p><h2>Что такое Vue.js и зачем он нужен</h2><p>Разработка современных интерфейсов и веб-приложений практически невозможна без фреймворков. Эти инструменты используются для оптимизации процессов и включают в себя наиболее востребованные сценарии и функции. Vue.js стабильно входит в рейтинг лучших фреймворков и широко используется крупными компаниями для разработки своих продуктов.</p><p>Vue создан программистом из Google Эваном Ю в 2012 году — это был его пет-проект, то есть продукт для личного пользования, которым он занимался в свободное от основной работы время. Доступной для широкой публики технология стала только в 2015 году.</p><p>Эван Ю решил разработать этот фреймворк после того, как попытался поработать с Backbone.js и Angular — инструментами аналогичного назначения. Их функциональные возможности показались программисту недостаточными.</p><p>Когда коллега Эвана по ИТ-отрасли Тейлор Отвелл, создатель другого популярного продукта Laravel, заявил в соцсети, что изучает Vue, считая его более удобным, чем другие инструменты, популярность фреймворка кратно возросла. Другие разработчики стали активно использовать Vue.js для разработки пользовательских интерфейсов.</p><p>Интересный факт. Название фреймворка происходит от английского слова «view» в переводе на французский язык, что указывает на связь модели и отображения.</p><p>Это бесплатный опенсорс-проект (с открытым кодом), которым могут пользоваться все желающие. Улучшением и доработкой компонентов Vue занимаются программисты всего мира — у фреймворка очень обширное и доброжелательное сообщество. Несколько лет подряд Vue.js даже держался в топе на GitHub по количеству звезд. И в 2025 году популярность фреймворка все еще остается высокой.</p><h2>Сферы применения Vue</h2><p>Востребованность Vue.js объясняется его широкой сферой применения. Фреймворк используется для разработки:</p><ul><li>быстрых сайтов и веб-приложений;</li><li>веб-ресурсов с повышенной нагрузкой — онлайн-магазинов, информационных порталов;</li><li>лендингов — одностраничных сайтов с интерактивным содержанием;</li><li>социальных сетей, сервисов CMS и других;</li><li>адаптивных интерфейсов;</li><li>личных кабинетов и страниц пользователей;</li><li>интерфейсов для авторизации, интерактивных чатов, форм заявки и прочих функциональных блоков.</li></ul><p>Vue пользуется популярностью не только в среде рядовых пользователей, но и в профессиональном сообществе. Продуктом пользуются такие компании, как Alibaba, EuroNews, Zoom, Ozon, Xiaomi и многие другие. Фреймворк считается одним из самых перспективных и адаптивных — новые версии выходят регулярно.</p><p>Многие компании используют Vue.js в своих внутренних проектах. Например, такие гиганты индустрии как Apple и Google в качестве основных инструментов разработки применяют другие фреймворки, но периодически привлекают и разработчиков на Vue.js. Компания Яндекс в основном пользуется React, но проект «Едадил» полностью сделан на Vue.</p><h2>Основные преимущества Vue</h2><p>Список плюсов у фреймворка довольно внушительный.</p><h3>Реактивность</h3><p>У разработчиков на Vue есть набор готовых шаблонов и возможность вносить изменения в реальном времени, не обновляя страницы. Такое свойство ускоряет разработку, повышает скорость загрузки и делает управление состоянием любой системы интуитивно понятным. Отслеживание и срабатывание происходит в процессе выполнения кода непосредственно в браузере, то есть сборка при такой схеме работы не требуется.</p><h3>Декларативность</h3><p>Синтаксис шаблонов расширяет стандарты HTML, позволяя описывать ожидаемый результат в декларативной форме на основе статуса JavaScript. Если говорить проще, декларативность, это когда вы формулируете то, что хотите сделать, а фреймворк сам выполняет поставленную задачу.</p><h3>Низкий порог входа</h3><p>Если вы знакомы с JavaScript, знаете основы CSS и HTML, вы без труда освоите Vue. Концепции фреймворка просты для понимания: программисты пишут код уже на первых неделях освоения.</p><h3>Подробная документация</h3><p>Эксперты называют <a href="https://v3.ru.vuejs.org/">доки Vue</a> эталонными — работать с таким сопровождением одно удовольствие. По сути для обучения достаточно документации с подробным описанием основных библиотек и инструментов.</p><h3>Обширное сообщество</h3><p>Глобальное коммьюнити предлагает пользователям обучающие ресурсы и полноценную поддержку, в том числе на русском языке. Если у начинающего прогера возникнет вопрос, он с высокой долей вероятности получит на него развернутый ответ на многочисленных форумах.</p><h3>Небольшой вес</h3><p>Приложения и сайты на Vue мгновенно загружаются и быстро работают. В современных условиях это существенное конкурентное преимущество. Шустрые сайты не только более удобны, но и лучше ранжируются поисковиками.</p><h3>Простое внедрение</h3><p>Фреймворк используют для модульной интеграции — не обязательно создавать всё приложение, можно обойтись его ключевыми элементами. Например, разработать на фреймворке только интерфейс для интерактивного чата или личный кабинет. При этом элементы на Vue беспрепятственно взаимодействуют с частями, сделанными на других библиотеках.</p><p>Более того, ядро на Vue.js можно без труда внедрить в действующий проект, созданный на другом фреймворке. Сайт продолжит работу, а его модули можно переписывать постепенно без остановки проекта.</p><h2>Минусы</h2><p>Несмотря на многочисленные плюсы, Vue.js, как и любая другая технология, несовершенна. Опытные разработчики выделяют следующие недостатки.</p><h3>Сложности в освоении при углубленном изучении</h3><p>На начальной стадии фреймворк действительно прост в освоении, но по мере углубления в экосистему программисты часто сталкиваются с трудностями по причине обилия библиотек и инструментов.</p><h3>Производительность</h3><p>В масштабных проектах со сложным функционалом могут возникать проблемы с производительностью. Требуется тщательное планирование и оптимизация ресурсов, чтобы справиться со сложными сайтами без ресурсных потерь.</p><h3>Совместимость</h3><p>В плюсах мы упоминали простую интеграцию фреймворка, но совместимость возможна не во всех случаях. Если мы взаимодействуем с разветвленной экосистемой, требующей индивидуальных решений, понадобятся глубокие знания разработки, чтобы модули Vue гармонично дополняли, а не перегружали технологический стек.</p><h2>Как развивается Vue</h2><p>В 2025 году Vue не собирается сдавать позиции и широко используется в разработке веб-продуктов. Интуитивно понятный синтаксис шаблонов и архитектура, состоящая из компонентов, делает этот инструмент предпочтительным выбором для многих программистов.</p><p>Эксперты выделяют ряд трендов в развитии фреймворка:</p><ul><li>Дальнейшая поддержка TypeScript. Этот язык программирования был создан с целью расширить возможности Java. Интеграция с Vue.js открывает новые перспективы для разработчиков.</li><li>Оптимизация производительности. Ведутся работы по ускорению приложений на фреймворке и повышению эффективности, что крайне важно для пользовательского опыта.</li><li>Работа над API. Предложены более гибкие варианты организации кода, что облегчает его сопровождение и повторное применение.</li><li>Расширение экосистемы. Библиотека плагинов пополняется новыми продуктами и инструментами — участники сообщества постоянно работают над обогащением ресурсной базы разработчиков.</li><li>Ориентация на инновации. Используются новейшие решения для работы над сложными проблемами.</li></ul><p>Сейчас разработчики применяют версии Vue 3.0 и 3.5. Эти продукты по ряду параметров превосходят предыдущие итерации:</p><ul><li>Улучшенная реактивность. Фреймворки нового поколения внедряются в действующие проекты еще быстрее и потребляют меньше ресурсов.</li><li>Упор на Composition API. Инновационный подход к организации компонентов фреймворка — отличный способ распространять логику приложения на другие продукты. Такая схема существенно упрощает повторное использование кода.</li><li>Применение Vue CLI — полноценной системы для ускорения разработки. Обеспечивает бесперебойную работу компонентов сборки, отвечает за настройку приложения и быстрое прототипирование.</li><li>Быстрота и мощность. Новые версии проще использовать для нативных приложений за счет модульности и оптимизации библиотек (автоматического удаления лишнего кода).</li><li>Повышенная производительность рендеринга — преобразования трехмерных образов из программ в изображения, которые видит пользователь.</li><li>Более эргономичный синтаксис. Экономия ресурсов и времени, потраченного на разработку.</li><li>Внедрены новые алгоритмы для сравнения виртуального DOM с «настоящим», что ускоряет рабочие процессы.</li></ul><p>В новых версиях улучшена масштабируемость, что позволяет разрабатывать более сложные и многофункциональные приложения. Оптимизирована также обработка ошибок, стали более гибкими возможности отладки.</p><h2>Альтернативы и конкуренты: сравнение Vue с другими фреймворками</h2><p>Ближайшие конкуренты Vue — это React, Angular, Svelte. Рассмотрим альтернативные фреймворки в сравнении с Vue.js.</p><h2>Vue.js vs React</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-17/f14c4d5c-f6e9-43a9-8581-53b5f832e900.png" alt="vue.js аналоги" /></figure><p>Библиотека с открытым кодом React — не менее популярный инструмент для разработки, чем Vue. Технически ее нельзя назвать полноценным фреймворком, при этом выбор решений для создания сайтов и веб-приложений довольно обширный.</p><p>Спор о том, что лучше, Vue или React, ведется уже несколько лет — стороны до сих пор не пришли к консенсусу. Оба инструмента обладают гибкой архитектурой, высокой производительностью, обширным функционалом. У каждого обширное сообщество пользователей, готовых привести сотни аргументов в защиту своего выбора.</p><p>Однако руководствоваться стоит исключительно объективными различиями:</p><ul><li>Изучение React занимает больше времени. Это факт, с которым согласны обе стороны. Если вы новичок в разработке, вам больше подойдет Vue — он проще по синтаксису, его концепция более понятна.</li><li>Различный подход к реактивности. В React такие сайты создаются через виртуальный DOM — это усложняет изменение исходного хода. В Vue программист может работать с DOM напрямую, что ускоряет процесс изменений и упрощает работу программиста.</li><li>Vue лучше взаимодействует со сложно-синхронизированной анимацией. Это фреймворк более удобен для дизайнеров, которые могут виртуально представить шаблон. В React это реализуется только через JSX. Но зато такой код короче, что в некоторых ситуациях тоже важно.</li><li>Документация. У Vue она более подробная, со множеством ответов на сложные вопросы. Однако React компенсирует этот недостаток за счет более обширного сообщества, в котором можно найти ответ на любой вопрос.</li></ul><p>В числе преимуществ React — наличие совместимой с библиотекой платформы React Native, которая позволяет создавать кроссплатформенный мобильный софт на Android и iOS. В экосистеме Vue специальных продуктов для разработки приложений для смартфонов нет.</p><h2>Vue.js vs Angular</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-17/99c80cdf-d0d7-40e8-a05d-e4bb3666042a.png" alt="angular аналоги" /></figure><p>Разработка компании Google для одностраничных веб-приложений Angular работает на Java, TypeScript, Dart. Как и Vue.js, это фреймворк с открытым исходным кодом с репозиторием на GitHub.</p><p>Ключевые отличия Angular и Vue.js:</p><ul><li>С помощью Angular пишут код, который можно легко адаптировать под другие среды — например, для мобильных ОС. В Vue такие задачи реализовать гораздо сложнее.</li><li>При этом Vue.js более гибок в применении. Его можно использовать как дополнительный инструмент для создания отдельных модулей. Angular потребуется внедрять целиком в весь проект.</li><li>Как и в случае с React, обучение на Vue проще. Angular требует более глубоких познаний в программировании, сам процесс освоения и внедрения в практику занимает больше времени.</li><li>Angular использует ajax — встроенную технологию взаимодействия с сервером без необходимости перезагружать страницу. Это упрощает передачу и получение данных. Реализован и механизм маршрутизации. В Vue эти функции реализуются только через сторонние библиотеки.</li><li>Vue больше подходит для динамических веб-продуктов, ориентированных на UI/UX и пользовательские интерфейсы.</li></ul><p>Выбор между фреймворками во многом зависит от целей и задач программиста, а также особенностей самого проекта. Для корпоративных и масштабных проектов Angular считается лучшим выбором, но у Vue преимущество в скорости и простоте применения.</p><h2>Vue.js vs Svelte</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-17/d8b5eb92-bf1f-46e9-a40b-5415842585c6.png" alt="svelte и vue.js" /></figure><p>Фреймворк Svelte использует иной подход к разработке веб-интерфейсов, нежели React и Vue. У него другая организация кода и свой алгоритм реализации проектов.</p><p>Ключевые отличия Vue.js и Svelte:</p><ul><li>Реактивность в Svelte стала частью языка. С этим фреймворком обновлять контент при изменении состояния гораздо проще.</li><li>Svelte превосходит другие фреймворки по скорости и легкости. Поскольку логика обновлений полностью перемещена в код, нет необходимости использовать Virtual DOM, что делает приложения более быстрыми.</li><li>Сообщество Svelte не такое обширное, поэтому у малоопытных прогеров могут возникнуть проблемы с решением необычных задач.</li><li>Документация у Vue.js тоже более подробная. У Svelte доки лаконичные и содержат только основную информацию о функционале.</li></ul><p>В целом Svelte менее популярный фреймворк, поскольку проект относительно молодой и пока больше распространен в профессиональной среде, нежели в любительской.</p><h2>Итоги</h2><p>Главные плюсы Vue — простота, доступность и возможность точечного применения. Поскольку у фреймворка низкий порог входа, он часто становится инструментом первого проекта у начинающих разработчиков. Достаточно нескольких недель, чтобы начать использовать Vue.js.</p><p>Экспертное сообщество сходится во мнении, что в 2025 году фреймворк не только не утратит, но, вполне возможно, увеличит свою популярность. Развитие и улучшение функционала Vue — непрерывный процесс, интенсивность которого легко оценить по периодичности появления новых версий.</p><p>Наш вывод однозначен: в ближайшее время фреймворк точно не забудут. Это конкурентоспособный и перспективный инструмент веб-разработки, привлекательный как для частных, так и для корпоративных проектов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</title>
      <link>https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki</link>
      <comments>https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki</guid>
      <description><![CDATA[<p>Популярные фреймворки для веб-разработки. Показываем основные виды фреймворков. Рассматриваем пошаговую инструкцию по использованию ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki">Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 10 Jan 2025 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выбор фреймворка влияет на скорость, удобство разработки, производительность, масштабируемость и поддержку приложения. Рассмотрим популярные варианты для веб-разработки фронтенда, бэкенда и фулстека и сравним их между собой.</p><h2>Frontend фреймворки</h2><h3>React</h3><p>Это самый популярный фреймворк для создания веб-приложений. React используется в лендингах, динамических веб-приложениях и даже мобильных приложениях (<a href="https://tproger.ru/articles/your-first-app-in-react-native">React Native</a>).</p><p>UI здесь разбивается на независимые и переиспользуемые блоки. Такие компоненты легко интегрировать, комбинировать в разных частях приложения или между проектами. Фреймворк ускоряет разработку и рефакторинг.</p><p>React обращается к DOM только для обновления изменившихся компонентов. За счет этого повышается производительность приложения.</p><p>Пример простого React компонента:</p><h4>Преимущества фреймворка:</h4><ul><li>Облегчает повторное использование кода и поддержку приложений;</li><li>Имеет множество дополнительных библиотек и инструментов;</li><li>Виртуальный DOM снижает прямые манипуляции с DOM и повышает производительность приложения;</li><li>Фреймворк пользуется популярностью в сообществе. Как результат  —  множество учебников, разборов документации и сторонних библиотек.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Концепции JSX и управления состоянием могут быть сложны для новичков;</li><li>Плохая кроссбраузерная поддержка;</li><li>Требует дополнительных библиотек для маршрутизации и управления состоянием.</li></ul><h3>Vue.js</h3><p>Vue используется для разработки простых лендингов и комплексных веб-приложений. Это гибкое решение, которое можно интегрировать в проекты постепенно.</p><p>Преимущество Vue в его простоте и низком пороге входа. При этом фреймворк сохраняет статус мощного инструмента для разработки сложных веб-приложений.</p><p>Vue автоматически отслеживает зависимости между блоками и обновляет DOM при их изменении, как React.</p><p>Компонентная архитектура Vue позволяет разбивать UI на переиспользуемые части. Разметка, стили и логика разделяются «оболочкой», а это облегчает поддержку и масштабирование приложения.</p><p>Пример простого компонента Vue:</p><p>Экосистема Vue включает множество библиотек и плагинов, расширяющих возможности фреймворка. Например, Vuex для управления состоянием, Vue Router, Nuxt.js и другие.</p><h4>Преимущества фреймворка:</h4><ul><li>Понятный синтаксис и подробная документация;</li><li>Может использоваться как библиотека или цельный фреймворк в зависимости от проекта;</li><li>Есть поддержка серверного рендера;</li><li>Автоматически обновляет интерфейс при изменении данных;</li><li>Имеет небольшой вес файлов.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Меньше ресурсов и сторонних библиотек по сравнению с React и Angular;</li><li>Неполная документация на русском языке.</li></ul><h3>Angular</h3><p>С помощью Angular разрабатывают клиентские части веб-приложений. Этот фреймворк сложнее Vue и React.</p><p>Angular чаще используют для крупных веб-приложений. Например, панели администрирования, системы управления контентом и т. д.</p><p>По аналогии с Vue и React, фреймворк разбивает приложение на независимые, переиспользуемые блоки кода. Компоненты: шаблон; класс, описывающий поведение; стили.</p><p>Освоение Angular требует больше времени и усилий по сравнению с Vue и React из-за архитектуры и специфических концепций. Нужны углубленные знания по внедрению зависимостей, декораторам и модулям.</p><p>Пример простого Angular-компонента:</p><h4>Преимущества фреймворка:</h4><ul><li>Богатый выбор инструментов, шаблонов, которые сокращают сроки реализации сложных приложений;</li><li>Angular CLI расширяется за счет shematics, поэтому его легко доработать под конкретные задачи;</li><li>Есть поддержка TypeScript: статическая типизация улучшает качество кода;</li><li>Встроенная утилита для обновления проекта при переходе на новую версию Angular.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Ангуляр сложнее, чем Вью и Реакт. Его изучение занимает больше времени, если это первый фреймворк в карьере разработчика.</li></ul><h2>Backend фреймворки</h2><h3>Django (Python)</h3><p>Django подходит для широкого спектра приложений — от блогов до высоконагруженных веб-сервисов. Админ-панель фреймворка упрощает управление контентом и пользователями. Django часто используют для разработки новостных сайтов, интернет-магазинов, социальных сетей и образовательных платформ.</p><p>Фреймворк содержит множество инструментов для решения общих задач веб-разработки. «В комплекте» готовые библиотеки для аутентификации пользователей, администрирования контента, работы с формами, маршрутизации URL.</p><p>Django следует архитектурному шаблону Model-View-Controller (MVC). Модели определяют структуру данных, представления обрабатывают логику и взаимодействие с моделями, а шаблоны отвечают за представление данных пользователю.</p><p>Сильная сторона Django — его ORM (Object-Relational Mapping). Интерфейс для работы с базой данных на Python используется для написания сырых SQL-запросов. Django поддерживает PostgreSQL, MySQL, SQLite, Oracle.</p><p>Если ищете универсальный фреймворк для бэкенд-разработки на Python, Django определенно заслуживает вашего внимания.</p><p>Пример модели Django:</p><p>В примере определяем модель Article с полями title, content и published_at. Метод __str__ возвращает строковое представление объекта:</p><p>Представление article_list получает объекты Article из базы данных и передает их в шаблон для отображения.</p><h4>Преимущества фреймворка:</h4><ul><li>Широкий набор инструментов: включает ORM, аутентификацию и админ-панель;</li><li>Фреймворк задаёт структуру проекта — помогает разработчикам понимать, как и где добавлять новую функцию;</li><li>Защищен от SQL-инъекции и подделки межсайтовых запросов;</li><li>Подходит для высоконагруженных приложений.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Django ORM уступает последней SQLAlchemy.</li></ul><h3>Ruby on Rails (Ruby)</h3><p>Rails подходит для быстрого прототипирования и проектов, ориентированных на работу с базами данных. Его используют для SaaS-платформ, CRM-систем, CMS, маркетплейсов и многого другого.</p><p>Rails применяет архитектурный паттерн MVC (Model-View-Controller). Фреймворк хорош с точки зрения бизнес-логики и взаимодействует с базой данных с помощью ActiveRecord ORM.</p><p>Rails поставляется со встроенными инструментами и библиотеками. Например, ActiveRecord для работы с базами данных, ActiveStorage для управления файлами, ActionMailer для отправки email.</p><p>В сообществе Rails огромное количество гемов (библиотек), расширяющих функциональность фреймворка.</p><p>Пример модели Rails (с использованием ActiveRecord):</p><p>Пример контроллера Rails:</p><p>В примере определяем модель Article с валидациями и связями. Контроллер ArticlesController содержит экшены для списка статей, отображения отдельной статьи, создания новой статьи.  Приватный метод article_params используется для фильтрации параметров.</p><h4>Преимущества фреймворка:</h4><ul><li>Продуманная структура, которая продвигает стандарты качества и лучшие практики веб-разработки;</li><li>Active Record ORM упрощает взаимодействие с базой данных;</li><li>Vue, Angular.js и React легко интегрируются с Ruby on Rails.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Ruby on Rails js медленнее Django и Node.js.</li></ul><h3>Node.js с Express (JavaScript)</h3><p>Express — фреймворк Node.js с набором функций для разработки веб-приложений и API. В нем реализован простой интерфейс для HTTP-запросов и маршрутизации.</p><p>Node.js + Express используется для сервисов, серверных приложений (например, чатов или игр).</p><p>Преимущество Node.js и Express состоит в возможности писать на JavaScript как клиентскую, так и серверную сторону. Можно вести разработку на одном языке и делиться кодом с фронтендом и бэкендом.</p><p>Пример простого приложения на Express:</p><h4>Преимущества фреймворка:</h4><ul><li>JavaScript на всем стеке — один язык для фронтенда и бэкенда;</li><li>Имеет минимальные ограничения, можно строить архитектуру как удобно.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Отсутствуют встроенные компоненты, требуются дополнительные настройки для безопасности и работы с базами данных;</li><li>Управление обратными вызовами усложняет код и его поддержку.</li></ul><h2>Full-Stack фреймворки</h2><h3>Laravel (PHP)</h3><p>Laravel — фреймворк для веб-разработки на PHP. Он использует архитектуру MVC: разделяет логику приложения и улучшает организацию кода.</p><p>Laravel выбирают для разработки CMS, SaaS-платформ, электронной коммерции и др. Встроенные библиотеки ускоряют работу.</p><p>В фреймворке реализована:</p><ul><li>Система миграций для управления структурой базы данных;</li><li>Eloquent ORM для работы с данными;</li><li>Система шаблонизации Blade;</li><li>Встроенная поддержка аутентификации и авторизации;</li><li>Очередь заданий и планировщик для выполнения асинхронных задач.</li></ul><p>Пример определения маршрута в Laravel:</p><p>Пример контроллера Laravel:</p><p>Пример модели Eloquent:</p><p>В примерах выше определяем маршрут, который принимает id и возвращает строку с идентификатором. Контроллер UserController методом show получает пользователя из базы данных по id и передает его в представление user.profile. Модель User представляет таблицу пользователей в базе данных и определяет заполняемые атрибуты.</p><h4>Преимущества фреймворка:</h4><ul><li>Шаблонизатор Blade упрощает создание представлений;</li><li>ORM Eloquent облегчает работу с базами данных;</li><li>Есть автоматизация задач с помощью встроенных инструментов и командной строки.</li></ul><h4>Недостатки:</h4><ul><li>Сложности с долгосрочной поддержкой версий.</li></ul><h3>Spring Boot (Java)</h3><p>Spring Boot применяется для разработки микросервисов и облачных приложений. Модульная архитектура используется в независимых сервисах, которые легко масштабировать.</p><p>Фреймворк имеет встроенный контейнер сервлетов (Tomcat, Jetty), чтобы запускать приложение как автономный JAR-файл без развертывания на внешнем сервере.</p><p>Фреймворк также предлагает:</p><ul><li>Автоконфигурацию библиотек (JPA, JDBC);</li><li>Встроенные метрики мониторинга;</li><li>Поддержку внешней конфигурации;</li><li>Интеграцию с базами данных.</li></ul><h4>Преимущества фреймворка:</h4><ul><li>Есть встроенные серверы Tomcat, Jetty и Undertow;</li><li>Облегчает управление зависимостями с помощью стартовых пакетов;</li><li>Оснащен встроенным контейнером сервлетов;</li><li>Автоматическая конфигурация экономит время на старте проекта.</li></ul><h4>Недостатки:</h4><ul><li>Spring Boot создает множество неиспользуемых зависимостей и  увеличивает размер файла развертывания.</li></ul><h3>Meteor (JavaScript)</h3><p>Особенность Meteor в том, что он синхронизирует данные в реальном времени. Фреймворк автоматически обновляет пользовательский интерфейс при изменении данных на сервере. Это возможно благодаря протоколу DDP (Distributed Data Protocol) и реактивным источникам данных, таких как MongoDB.</p><p>На JS + Meteor можно писать код, который работает как на клиенте, так и на сервере. Фреймворк также предоставляет интегрированную систему сборки, которая автоматически объединяет ресурсы приложения.</p><p>Meteor выбирают для разработки приложений, требующих обновления данных в реальном времени (чаты, приложения для совместной работы, панели мониторинга,  игровые проекты). Его реактивная архитектура и синхронизация данных облегчают создание интерактивных и отзывчивых пользовательских интерфейсов.</p><h4>Преимущества фреймворка:</h4><ul><li>Архитектура и синтаксис с понятным кодом упрощают обучение новичков и повышают производительность команды;</li><li>Есть мгновенная синхронизация данных между клиентом и сервером;</li><li>Возможна интеграция базы данных MongoDB.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Не предлагает широкого функционала для масштабирования и разделения логики на модули;</li><li>Сложности с масштабированием при увеличении числа пользователей из-за обработки данных в реальном времени.</li></ul><p>При выборе фреймворка важно учитывать долгосрочные перспективы проекта. Также следует принимать во внимание доступность обучающих ресурсов и поддержки. Помните, нет идеального решения. Выбор фреймворка зависит от конкретных требований, ресурсов и предпочтений команды.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ JavaScript-фреймворков для быстрой разработки в 2025</title>
      <link>https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020</link>
      <comments>https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020</guid>
      <description><![CDATA[<p>Топ JavaScript фреймворков в 2025. Рассказываем об основных фреймворков для быстрой разработки. Рассматриваем преимущества и недостатки ✔ Tproger
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020">Топ JavaScript-фреймворков для быстрой разработки в 2025</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Nov 2024 09:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Фреймворки — многофункциональные платформы с набором специализированных инструментов и библиотек, которые сильно упрощают и ускоряют разработку приложений и других продуктов. Программисты говорят, что фреймворки упорядочивают хаос и задают рамки, в которых работа выполняется более эффективно.</p><p>JavaScript считается наиболее востребованным  языком сценариев для создания веб-продуктов, интерфейсов, фронтенд- и бэкенд-частей сайтов, мобильных приложений. Для этого языка создано множество фреймворков различного назначения и профиля.</p><p>Узнаем, какие фреймворки JavaScript наиболее востребованы для разработки в 2025 году, каковы их сильные стороны и особенности, и как правильно выбрать продукт для своего проекта.</p><h2>Преимущества фреймворков</h2><p>Методы и функции, написанные на JavaScript и называемые фреймворками, представляют собой готовые решения для использования разработчиками. Эти структуры отвечают за взаимодействие приложений с серверами и значительно упрощают манипулирование элементами программных продуктов. Как правило, у них открытый исходный код, что позволяет программистам постоянно вносить улучшения.</p><p>В числе основных преимуществ фреймворков для разработки:</p><ul><li><b>Эффективность.</b> Применение уже готовых функций шаблонов повышает качество разработанных проектов. Программисты пишут меньше кода, он более чистый, а сама задача выполняется оперативнее.</li><li><b>Стоимость.</b> Разработка веб-приложений обходится дешевле за счет сокращения ресурсов, при этом фреймворки JavaScript доступны всем желающим.</li><li><b>Скорость.</b> У большинства фреймворков JavaScript отличная документация, в которой подробно описана работа всех функций. По каждому продукту существует обширная группа поддержки, работает множество форумов для профи и любителей. Все это предоставляет разработчикам массу дополнительной информации, что упрощает задачу.</li><li><b>Масштабирование.</b> При необходимости дальнейшего развития программных продуктов фреймворки JavaScript используются для их адаптации под более широкую аудиторию пользователей или дополнительные опции.</li></ul><p>Далее рассмотрим топ лучших фреймворков для языка скриптов, которые помогут разработчикам создавать 2025 году качественные, быстрые и производительные веб- и мобильные приложения.</p><h2>React</h2><p>Когда профессиональные разрабы говорят о лучших фреймворках JavaScript, они обязательно называют в первых рядах React. По сути не совсем фреймворк, а обширная библиотека, предназначенная для создания наиболее сложных пользовательских интерфейсов  для веб- и нативных приложений. В 2025 году React остается в топе актуальных инструментов отрасли.</p><p>Основные преимущества React:</p><ul><li><b>Изолированность компонентов. </b>Это свойство позволяет разработчикам разделять пользовательские интерфейсы и работать с каждым модулем по отдельности. Это обеспечивает платформам стабильную работу — если в одной из опций возникают сбои, это никак не сказывается на статусе остальных.</li><li><b>Декларативный подход.</b> Несмотря на использование кода на JavaScript, фреймворк React работает в декларативном режиме. То есть разработчик описывает желаемое содержание интерфейса, а библиотека реализовывает эту задачу. Поэтому программировать и настраивать продукты на React проще, чем писать классический код на JS.</li><li><b>Наглядность.</b> Это качество — прямое следствие декларативности. Поскольку на React сразу указывается итоговое состояние конкретного объекта, разработчику при написании кода заранее известно, как элемент будет смотреться на странице.</li><li><b>Утилитарность компонентов.</b> Созданные на React элементы можно не прописывать каждый раз заново при добавлении новых опций. Эти части можно копировать и вставлять в другие разделы. При этом в каждом компоненте содержатся все необходимые сведения и методы для реализации конкретных функций.</li><li><b>Использование JSX.</b> Это расширение JavaScript, в котором сочетается язык программирования и HTML. Инструмент предназначен для работы с разными компонентами на странице независимо от состояния прочих объектов. При этом части, которые выглядят в строке как HTML, сохраняют синтаксис JSX.</li><li><b>Отзывчивость.</b> React работает с DOM — объектной моделью документа. В копии есть все элементы веб-приложения и данные об их взаимодействии. Когда пользователи совершают действия, сначала реагирует виртуальная копия, затем реальная. То есть пользователь видит результат действий мгновенно, даже если сама платформа «тяжелая».</li><li><b>Дополнительные инструменты.</b> По причине популярности React разработчики-энтузиасты создали десятки совместимых с фреймворком инструментов. Один из них — React Native для развертывания продуктов в разных ОС и на любых устройствах с помощью стандартных протоколов.</li></ul><p>Обширная экосистема React — это бесшовная и ускоренная разработка современных интерактивных интерфейсов, которые активно используются в самых популярных соцсетях. Библиотека продолжает развиваться и остается наиболее востребованной в среде опытных и начинающих программистов.</p><h2>Vue.js</h2><p>Прогрессивный фреймворк для разработки пользовательских интерфейсов. Отличается легкостью освоения, содержит множество полезных нововведений и улучшений в свежих версиях. Разработчики считают Vue.js идеальным выбором для быстрого прототипирования и использования небольшими командами.</p><p>Этот фреймворк подходит для постепенной интеграции, то есть внедрять его можно для отдельных страниц, что делает разработку более простой и доступной.</p><p>Основные плюсы Vue:</p><ul><li>легковесность — файлы фреймворка не требуют большого количества ресурсов;</li><li>подробная документация с туториалами, что упрощает работу с инструментом новичкам;</li><li>активное пользовательское сообщество, в том числе в русскоязычном сегменте;</li><li>возможность подключения и создания собственных плагинов;</li><li>эффективное взаимодействие с DOM;</li><li>быстрая разработка.</li></ul><p>Vue поддерживает расширение JSX и технологию TypeScript, но одновременно остается верен стандартам разработки на HTML и CSS. Такая универсальность упрощает процесс работы над проектом и его поддержку после реализации.</p><p>Для тех, кто знаком с основами фронтенд, освоение Vue и поддержка приложений на основе фреймворка не будет сложной задачей. Управление инструментом интуитивно понятно, а экосистема постоянно развивается, что делает Vue одним из самых популярных веб-фреймворков в 2025 году.</p><h2>Svelte</h2><p>Этот фреймворк практикует принципиально иной подход, чем Vue и React: вместо виртуального объекта DOM он использует компиляцию. То есть вместо работы в браузере Svelte компилирует компоненты в предельно оптимизированный и легкий код на JavaScript, что положительно сказывается на быстроте и эффективности созданных на Svelte приложений.</p><p>Не случайно такие компании, как Avast, 1Password и другие используют для создания своих продуктов именно этот фреймворк.</p><p>Ключевые преимущества:</p><ul><li>Простой и минималистичный синтаксис, похожий на HTML, который легко освоить и использовать. Благодаря простоте фреймворк вполне доступен для начинающих.</li><li>Использование реактивной модели программирования. Такой подход строится на реагировании на события и асинхронности.</li><li>Высокая производительность. По этому параметру Svelte благодаря уникальному подходу значительно опережает другие фреймворки.</li><li>Быстрота. За счет скорости Svelte настоятельно рекомендуется для создания быстрых, масштабируемых и интерактивных веб-страниц.</li><li>Универсальность. Svelte бесшовно интегрируется с другими востребованными инструментами.</li></ul><p>Фреймворк идеально подходит для создания приложений с обширным объемом данных, а также продуктов, работающих в интерактивном режиме. Svelte выполняет задачи на ходу, что делает его топовым фреймворком 2025 года.</p><h2>Next.js</h2><p>Фреймворк Next.js предназначен для серверного рендеринга (SSR), при котором код веб-приложений генерируется на сервере, а не в браузере. Это сокращает время реакции и ускоряет интерактивность приложений.</p><p>Библиотека подходит для создания масштабируемых приложений и пользовательских интерфейсов на основе React. Благодаря наличию Node.js и возможности аутсорсить некоторые опции на сторону сервера Next.js можно использовать в качестве бэкенд инструмента.</p><p>В списке других достоинств, которые отмечают программисты:</p><ul><li><b>Автоматическое разделение кода.</b> Next самостоятельно дробит код на небольшие, более управляемые части, что позволяет работать только с необходимыми компонентами и сокращает время первичной загрузки страницы.</li><li><b>Фреймворк без проблем интегрируется с библиотеками CSS на JavaScript</b>, что существенно упрощает стилизацию, при этом нет необходимости использовать сторонние инструменты.</li><li><b>Горячая замена модулей. </b>Благодаря этой опции разработчики видят изменения в состоянии в реальном времени без обновления страницы. Это делает разработку более эффективной и удобной.</li><li><b>Роутинг на базе файловой системы.</b> На платформе Next.js создание роутов (построение оптимального маршрута в структуре папок и файлов) упрощено, что делает более эффективной интеграцию внутренних и внешних функций приложения.</li><li><b>Наличие собственных плагинов</b> для работы непосредственно с фреймворком. Благодаря этому свойству программист может адаптировать рабочую среду под свои конкретные запросы.</li></ul><p>При этом нельзя считать Next.js дополнением к React. Это полноценный фреймворк, в котором имеется набор оригинальных инструментов и алгоритмов. Однако разработчику перед освоением Next.js придется изучить основы React.</p><h2>Nuxt.js</h2><p>Еще один инструмент для серверного рендеринга, но уже на базе Vue.js. В первую очередь Nuxt.js — это фронтенд-фреймворк для разработки передовых динамичных веб-приложений с интерактивными функциями.</p><p>Несмотря на то, что эту библиотеку нельзя назвать полностью автономной, Nuxt во многих случаях будет приоритетным выбором для разработки приложений с быстрой загрузкой и SEO-оптимизацией, а также сценариев для сложных масштабируемых проектов.</p><p>Главные плюсы Nuxt.js:</p><ul><li><b>Быстрый и простой процесс разработки.</b> Скрипты на JS используются не только на серверной, но и на клиентской стороне, что упрощает процесс написания кода.</li><li><b>Автоматическая разбивка кода.</b> Фреймворк генерирует статическую версию сайта, используя специализированную конфигурацию Webpack. При этом за каждый статически генерируемый роут отвечает отдельный файл с кодом для запуска.</li><li><b>Качественная структура.</b> Фреймворк по умолчанию предлагает упорядоченную структуру для всего проекта, что позволяет начать разработку на более выгодных стартовых условиях.</li><li><b>Принцип «конвенция вместо конфигурации».</b> В структуре минимум конфигурационных файлов, что ускоряет разработку и минимизирует ошибки. Встроенная маршрутизация существенно упрощает разработку сложной навигации.</li><li><b>Удобство.</b> Nuxt.js часто обновляется и совершенствуется. Разработчикам доступна подробная документация, а благодаря стандартным настройкам освоить фреймворк относительно легко.</li></ul><p>Сильной стороной фреймворка выступает также полноценная экосистема плагинов, которые облегчают такие задачи, как обработка API, создание серверного функционала и управление состоянием. Мощная модульная архитектура позволяет без труда подключать счетчики аналитики, добавлять прогрессивные PWA-фишки на сайт и решать множество других задач.</p><h2>Remix</h2><p>Относительно новый фреймворк для разработки клиент-серверных продуктов на JavaScript. Основан на библиотеке React, имеет встроенную поддержку TypeScript. Разработчики часто используют Remix для создания одностраничных веб-приложений с перспективой масштабирования.</p><p>Преимущества использования фреймворка:</p><ul><li><b>Вложенные страницы.</b> Все страницы внутри папок выступают вложенными роутами, а не отдельными. По этой причине компоненты можно добавить непосредственно на родительскую страницу, что ускоряет загрузку.</li><li><b>Граничный метод обработки ошибок. </b>Error Boundaries — наиболее эффективный способ исправления ошибок в компонентах библиотеки React. Это особенно удобно для сборки, поскольку исключает блокировку целой страницы из-за незначительной ошибки.</li><li><b>Автоматическая обработка.</b> В Remix состояния загрузки обрабатываются самостоятельно, разработчику нужно лишь указать, что будет отображаться в процессе загрузки приложения. Это встроенная возможность фреймворка, для которой не потребуются сторонние библиотеки.</li><li><b>Универсальность. </b>Remix подходит для работы на всех платформах и взаимодействует с любыми интерфейсами. Фреймворк обрабатывает запросы непосредственно на HTTP-сервере.</li></ul><p>В целом разработчики отмечают улучшение пользовательского опыта за счет уменьшения строк кода. Этот фреймворк становится все более распространенным, особенно для работы над частными проектами и игровыми приложениями.</p><h2>Другие перспективные фреймворки</h2><p>В зависимости от целей разработки можно использовать и другие инструменты для сценариев на JavaScript. В 2025 году опытные разработчики рекомендуют обратить внимание на следующие фреймворки и библиотеки:</p><ul><li><b>Solid.js.</b> Декларативная библиотека для быстрой разработки пользовательских интерфейсов. Здесь, как и в Svelte, нет виртуального DOM, а есть компиляция шаблонов в реальные узлы и их обновление через детализированные реакции. У фреймворка достаточно обширная документация, в том числе русскоязычная. Есть все основания полагать, что фреймворк в ближайшем будущем будет активно набирать популярность.</li><li><b>Astro. </b>Еще один проект с большим потенциалом. Ориентирован на создание веб-продуктов с объемным контентом (информационные сайты, блоги, интернет-магазины и т.д.). Фреймворк практикует серверный рендеринг, поддерживая HTML, CSS и при необходимости TypeScript. Производительность и ориентирование на контент обеспечивает высокую конверсию. Сайты и приложения на Astro загружаются быстро, при этом разработчики используют на порядок меньше сценариев.</li><li><b>Qwik.</b> Еще один относительно новый фреймворк с улучшенной архитектурой и преимуществами в виде ускоренной загрузки сайтов независимо от уровня их сложности. Поскольку скорость загрузки ресурса уже учитывается поисковыми системами, это свойство приобретает особую ценность для коммерческих проектов. В Qwik строгая иерархия компонентов и улучшенные функции за счет применения техник SSR или SSG.</li></ul><p>Выбор оптимального фреймворка для качественной и быстрой разработки проекта зависит от множества факторов и тщательного предварительного анализа. Разработчикам необходимо грамотно определить приоритеты. Среди значимых факторов — скорость работы, мобильность и возможность масштабирования, частота обновлений фреймворков. В любом случае быстрота, простая поддержка и легкость в добавлении новых функций пойдут инструментам только на пользу.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ужасный код: если бы злодеи хорроров стали программистами</title>
      <link>https://tproger.ru/articles/uzhasnyj-kod--esli-by-zlodei-horrorov-stali-programmistami</link>
      <comments>https://tproger.ru/articles/uzhasnyj-kod--esli-by-zlodei-horrorov-stali-programmistami?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/uzhasnyj-kod--esli-by-zlodei-horrorov-stali-programmistami</guid>
      <description><![CDATA[<p>Мы погрузились в мрачный мир фантазий и представили, какие языки программирования и роли могли бы выбрать самые известные злодеи хоррор-фильмов, если бы они ворвались в IT. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/uzhasnyj-kod--esli-by-zlodei-horrorov-stali-programmistami">Ужасный код: если бы злодеи хорроров стали программистами</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 31 Oct 2024 09:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ночь Хэллоуина сгущается, тьма окутывает мир, и из самых глубоких уголков кинематографа выходят наши любимые кошмары. Но представьте, если бы эти жуткие персонажи сменили свое оружие на клавиатуру и монитор? Что, если бы Норман Бейтс автоматизировал свой мотель с помощью Python, а Пеннивайз заманивал пользователей в свои веб-ловушки на JavaScript?</p><h2>1. Норман Бейтс («Психо»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/6951c6b4-9e2b-4498-94aa-7700063929f1.jpg" alt="" /></figure><h2>Почему Python?</h2><p>Норман — сотрудник с раздвоением личности. Python для него как второй Норман: гибкий, мощный и позволяет быстро автоматизировать все, что только можно. Идеально подходит для человека, который ведет двойную жизнь и хочет держать все под контролем, не привлекая лишнего внимания.</p><h2>Его путь в IT</h2><p>Норман начинал как сисадмин в семейном мотеле "Бейтс". Ручное управление серверами быстро ему надоело — ну сколько можно делать одно и то же? Он начал писать скрипты на Python, автоматизируя бэкапы, мониторинг и деплой. Затем подсел на Docker и Kubernetes, завернул всю инфраструктуру в контейнеры и настроил CI/CD пайплайны.</p><p>Однажды Норман без уведомления команды внес критические изменения в продакшен-серверы ночью, когда никого не было на месте. Это привело к сбою системы на несколько часов. Когда коллеги попытались разобраться, он отрицал свою причастность, ссылаясь на проблемы с автоматизацией.</p><p>Но позже выяснилось, что он сделал это под влиянием своего "второго я", не осознавая последствий.</p><h2>2. Майкл Майерс («Хэллоуин»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/2edbbf8b-1b3f-47ba-af52-d973ac93c0cc.jpg" alt="" /></figure><h2>Почему C?</h2><p>Майкл — молчаливый и непробиваемый. C для него — идеальный язык: никаких лишних абстракций, полный контроль над железом. Ему не нужны навороты и фреймворки — только чистый код и абсолютная власть над системой.</p><h2>Его путь в IT</h2><p>С детства Майкл разбирал и собирал механизмы, пытаясь понять, как все работает изнутри. Начал с ассемблера, но перешел на C, когда понял, что так можно быть эффективнее, не теряя контроля. Работал над прошивками для микроконтроллеров, системами реального времени, где каждая миллисекунда на счету. Его код запускает медицинское оборудование и авионику — там, где ошибки не прощаются.</p><p>Однажды Майкл взялся за разработку критически важного модуля в одиночку, отказавшись от помощи и код-ревью. Когда модуль был интегрирован, система дала сбой, что привело к остановке производства.</p><p>Майкл любитель действовать в одиночку, игнорируя окружающих, на работе его нежелание сотрудничать может привести к серьезным проблемам.</p><h2>3. Пеннивайз («Оно»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/3672c708-3a03-446b-be8c-4cb2aa300c53.jpg" alt="" /></figure><h2>Почему JavaScript?</h2><p>Пеннивайз — мастер иллюзий и обмана. JavaScript для него — как волшебная палочка: можно творить что угодно и где угодно. Он любит удивлять пользователей неожиданными эффектами и нестандартными решениями. Вездесущность JS позволяет ему быть везде и сразу, играя с восприятием и ожиданиями.</p><h2>Его путь в IT</h2><p>Начал с создания веб-сайтов, которые завораживали и одновременно пугали пользователей своей необычностью. Быстро освоил все популярные фреймворки, переключаясь между React и Vue. Решил, что одной клиентской магии мало, и ушел в бэкенд.</p><p>Однажды Пеннивайз внедрил в продакшен нестабильную экспериментальную функцию без согласования. Пользователи были шокированы неожиданными изменениями интерфейса, что привело к массовому оттоку клиентов.</p><p>Раньше он появлялся и пугал детей, теперь на работе его неожиданные решения могут привести к убыткам компании и увольнению одним днем.</p><h2>4. Гостфейс («Крик»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/402925e7-3402-42e4-bdb4-36cc95b258aa.jpg" alt="" /></figure><h2>Почему Ruby?</h2><p>Гостфейс обожает интриги и игры разума. Ruby, по его мнению, идеально подходит для хакинга. Ему нравится быть на шаг впереди и всегда оставаться в тени. Ruby дает ему возможность быстро писать скрипты для поиска уязвимостей и эксплойтов.</p><h2>Его путь в IT</h2><p>Сначала был обычным админом, но быстро заскучал без адреналина. Погрузился в мир кибербезопасности, специализируясь на пентестах и социальной инженерии. Может украсить пароль у кого угодно, используя социальную инженерию и хитрость. В компании он тот, кто проводит внутренние проверки безопасности, и никто не знает, когда ждать следующего сюрприза.</p><p>На прошлой неделе Гостфейс решил проверить бдительность коллег и организовал фишинговую атаку внутри компании без предупреждения руководства. Это вызвало панику и недоверие среди сотрудников. Но лучше так, чем терроризировать жертв звонками, хотя...</p><h2>5. Кожаное лицо («Техасская резня бензопилой»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/6b8107b6-df04-4239-9fcf-e2bdc89ca177.jpg" alt="" /></figure><h2>Почему C++?</h2><p>Кожаное лицо любит работать с железом напрямую. C++ дает ему мощь и гибкость, позволяя писать эффективный код для микроконтроллеров. Он ценит контроль над памятью и возможность выжать максимум из ресурсов. Для него код — это инструмент, как и бензопила, которым он мастерски владеет.</p><h2>Его путь в IT</h2><p>С юных лет мастерил устройства из подручных материалов. Когда открыл для себя программирование микроконтроллеров, понял, что это его стихия. Создает прошивки для IoT-устройств, умных гаджетов и даже для самодельных девайсов. Его разработки надежны и устойчивы к любым условиям — будь то жара Техаса или суровая зима.</p><p>Коллеги знают: если нужно что-то спаять, запрограммировать и заставить работать — это к нему. Хотя он не особо разговорчив и может показаться грубоватым.</p><p>Во время стресса из-за сжатых сроков Кожаное лицо повредил дорогостоящее оборудование в лаборатории, пытаясь "улучшить" его без согласования.</p><h2>6. Акула («Челюсти»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/dbc0f930-5c93-49e9-a00e-836b47b26d6c.jpg" alt="" /></figure><h2>Почему Go?</h2><p>Акула — воплощение скорости и эффективности. Go для нее — идеальный инструмент для создания высокопроизводительных сервисов. Простота синтаксиса и мощные возможности конкурентности позволяют ей строить системы, которые не тонут под нагрузкой. Go — это язык для хищников, которые не терпят рутинных задач.</p><h2>Ее путь в IT</h2><p>Начинала с Java, но быстро поняла, что Go лучше подходит для ее целей. Стала экспертом в микросервисной архитектуре, разворачивая кластеры, способные обрабатывать миллионы запросов в секунду. Ее код оптимизирован на все 100%, как и она сама в погоне за добычей.</p><p>Коллеги уважают ее за способность быстро решать сложные задачи и держать систему на плаву. Но однажды в попытках улучшить производительность, Акула самостоятельно изменила настройки кластера, что привело к потере данных. Ей сложно перестроиться от бесконтрольных атак, поэтому на работе ее агрессивные действия могут причинить ущерб. Будьте осторожны.</p><h2>7. Существа из «Тихое место»</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/76c6e40d-6b9e-4077-b55d-f300f7cd357d.jpg" alt="" /></figure><h2>Почему Rust?</h2><p>Существа ценят тишину и надежность. Rust дает им безопасность и высокую производительность, предотвращая ошибки еще на этапе компиляции. Они создают системы, которые работают без сбоев и не требуют вмешательства — все тихо и гладко. Rust — идеальный язык для тех, кто предпочитает оставаться в тени, обеспечивая стабильность.</p><h2>Их путь в IT</h2><p>Начали как системные администраторы, но быстро поняли, что могут сделать больше. Освоили Rust для разработки внутренних инструментов и сервисов мониторинга. Настроили инфраструктуру так, что пользователи даже не подозревают о ее существовании — все работает как по маслу, без лишнего шума.</p><p>Недавно их чрезмерная реакция на мелкие проблемы привела к полной остановке системы. Маленький баг был воспринят как критическая угроза, и они отключили сервисы для "предотвращения катастрофы". Помните, они нападают на любой звук, на работе их гиперчувствительность может нанести вред.</p><h2>8. Сара Фир («Улица страха»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/68b9ede1-3c9c-46a8-b7c8-4d5c22e73a5c.jpg" alt="" /></figure><h2>Почему Kotlin?</h2><p>Сара видит то, что скрыто от других. Kotlin дает ей мощь и гибкость для создания масштабируемых приложений. Он современный и лаконичный, позволяющий писать чистый и понятный код. В сочетании с ML она строит модели, которые могут предсказывать будущее.</p><h2>Ее путь в IT</h2><p>Начинала как аналитик данных, копаясь в цифрах и выявляя закономерности. Освоила Kotlin, чтобы писать эффективные приложения для обработки больших данных.  Руководит командой Data Science, создавая алгоритмы, которые помогают компании быть на шаг впереди конкурентов.</p><p>Убежденная в своей правоте, Сара обновила новую модель без тестирования. Это привело к неверным прогнозам и финансовым потерям. Стоит сказать CTO, что на работе ее уверенность может обернуться против компании.</p><h2>9. Джейсон Вурхиз («Пятница, 13-е»)</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-10-30/d3194107-8621-4d13-a422-7c047cd60ee9.jpg" alt="" /></figure><h2>Почему Java?</h2><p>Джейсон — вечный, как сама Java. Java для него — символ стабильности и надежности. Он ценит проверенные временем технологии и масштабируемость, которую предоставляет язык. Его код такой же прочный, как и он сам, выдерживает любые нагрузки и атаки.</p><h2>Его путь в IT</h2><p>Начал с разработки для банков и крупных корпораций, где ошибка может стоить миллионов. Специализируется на системах, где отказоустойчивость и безопасность на первом месте. С помощью Spring и Hibernate строит архитектуры, которые работают годами без сбоев.</p><p>Было и такое, что Джейсон отказался от обновления технологий и продолжал использовать устаревшие версии, что сделало систему уязвимой для атак. Уверенность в стабильных решениях — это хорошо, но на работе его сопротивление изменениям может навредить безопасности компании.</p><p>Вот такие айтишные персонажи могли бы получиться из наших любимых хоррор-злодеев! У каждого свой уникальный стиль, подход к работе и, конечно же, свой любимый язык программирования.</p>]]></content:encoded>
    </item>
    <item>
      <title>Приложение для прогноза погоды на Vue JS</title>
      <link>https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js</link>
      <comments>https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Practical developer]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js</guid>
      <description><![CDATA[<p>В данной статье описывается созданный Vue JS проект для извлечения данных о погоде на основе местоположения, которое задает пользователь.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/prilozhenie-dlya-prognoza-pogody-na-vue-js">Приложение для прогноза погоды на Vue JS</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 Jul 2024 14:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Первоначальная настройка
приложенияя</h2><p>Ознакомление с созданным приложением предполагает наличие предварительных знаний о фреймворке Vue.js.</p><p>Сайт прогноза погоды создавался с помощью использования фреймворка Vue 3. Предварительно устанавливается Vue CLI, который позволяет быстро создать шаблон нового проекта. Среда разработки - Visual Studio Code.</p><p>Данные о погоде получаются с помощью API сервиса <b>OpenWeatherMap</b>, который позволяет использовать некоторый функционал
бесплатно. Для того, чтобы показать на карте местоположение, подключается <b>OpenStreetMap </b>– бесплатная карта всего мира.</p><h2>Интерфейс пользователя</h2><p>Интерфейс пользователя состоит из: текстового поля
поиска местоположения, визуальной карты, где показывается найденный город и в
правой части экрана данные о прогнозе погоды. Прогноз погоды можно увидеть на
данный момент, на сегодня и на ближайшие 5 дней.</p><figure><img src="https://media.tproger.ru/user-uploads/102865/2024-07-12/de5914ae-87db-428c-a6e9-900d1ab859bb.png" alt="" /><figcaption>Основной интерфейс<br /></figcaption></figure><p>В текстовом поле поиска места, после ввода данных применяется фильтр для
поиска населённого пункта в виде выпадающего списка. Данные можно вводить на
русском и английском языках.</p><figure><img src="https://media.tproger.ru/user-uploads/102865/2024-07-12/56c6b03f-315a-40fa-b27c-cf49634e671a.png" alt="" /><figcaption>Фильтр поиска местоположения<br /></figcaption></figure><h2>Структура проекта</h2><p>После открытия данного проекта с помощью редактора кода, будет видна
следующая структура:</p><figure><img src="https://media.tproger.ru/user-uploads/102865/2024-07-15/8f2d9a1a-fa75-44ca-a455-43b3585dace0.png" alt="" /><figcaption>Структура Vue проекта<br /></figcaption></figure><p>Пояснение к наиболее важным файлам и папкам:</p><ul><li>src – основной код проекта</li></ul><ul><li>папка js – javascript – файлы, содержащие повторяющиеся функции,
     методы и миксины в проекте</li></ul><ul><li>node_modules – исходный код, подключенных библиотек
     и сервисов проекта</li></ul><p>Основные файлы папки src:</p><ul><li>App.vue – корневой компонент интерфейса, в нем
      отображаются все остальные компоненты и страницы</li><li>main.js – файл, который
      монтирует и собирает приложение</li><li>components – папка, где находятся компоненты для создания
      пользовательского интерфейса</li><li>pages – здесь содержатся компоненты маршрутизации, к
      которым происходит навигация</li><li>router – содержит файл router.js, который описывает правила построения
      маршрутов к компонентам в папке pages</li></ul><h2>Сторонние библиотеки, ресурсы, используемые в приложении</h2><h3>Получение списка стран, городов, населенных пунктов</h3><p>В Интернете существует множество различных сервисов для получения списка
стран и городов мира, большинство из них являются платными. В данном проекте
создан CSV-файл с населёнными пунктами на основе списка
ООН для экономической торговли.</p><p>Список ООН можно найти по ссылке <a href="https://unece.org/trade/uncefact/unlocode">https://unece.org/trade/uncefact/unlocode</a>. Здесь можно получить список в различных форматах: csv, txt, mdb. Данные в этих файлах представлены в формате UN/LOCODE — международной
системе классификации географических объектов. Необходимые данные из этих файлов
для проекта: коды стран согласно ISO 3166-1 alpha-2, наименование
населенного пункта и координаты.</p><p>Столбец
географических координат местоположения содержит широту/долготу, если таковые имеются. Используется следующее стандартное
представление:  0000lat 00000long (lat - широта: N или S ; long - долгота: W или E)</p><h3>Библиотека Papa Parse</h3><p>Для обработки полученных данных из CSV-файла городов и стран, в проекте используется библиотека Papa Parse, доступная по ссылке <a href="https://www.papaparse.com/">https://www.papaparse.com/</a>. Данная
библиотека позволяет как считывать и обрабатывать данные из CSV, так и преобразовывать информацию к CSV-формату. Ее можно установить с помощью следующей
команды npm:</p><p>Пример асинхронной функции получения данных из CSV в компоненте CountriesCodes.vue:</p><h3>Сервис OpenWeatherMap</h3><p><b>OpenWeatherMap </b>– интернет сервис для предоставления API получения данных о погоде. В основном сервис
платный, но есть и ограниченный бесплатный функционал.</p><p>Чтобы начать пользоваться API, необходимо
перейти по ссылке <a href="https://openweathermap.org/">https://openweathermap.org/</a>, создать учетную запись и получить свой API-ключ. Согласно документации, бесплатно можно получить прогноз на
текущий момент и прогноз на 5 дней в 3-х часовом формате.</p><p>Получить географические координаты для прогноза возможно,
используя следующие подходы: вызов API по географическим
координатам – широте и долготе, вызов API по идентификатору города.</p><p>Вызов API: <b>https://api.openweathermap.org/data/2.5/weather?lat={lat}&amp;lon={lon}&amp;appid={API
key}</b>. Возвращаемые
данные можно получить в XML
или JSON формате.</p><p><a href="https://openweathermap.org/current#builtin">Документация по вызову API</a></p><p>Если вам нужно автоматически преобразовать
названия городов в географические координаты и наоборот, можно воспользоваться API геокодированием.</p><p>Пример геокодирования: <b>api.openweathermap.org/data/2.5/forecast?q={city
name}&amp;appid={API key}</b></p><p>Пример подключения к <b>OpenWeatherMap </b>и получения данных можно найти в основном компоненте <b>App.vue</b>:</p><p>Параметры place,
code передаются из  <b>CountriesTextBox.vue</b> – наименование населённого пункта, код
страны согласно ISO 3166-1 alpha-2.</p><h3>Сервис OpenStreetMap</h3><p><b>OpenStreetMap (OSM)</b> – это бесплатный, открытый и глобальный
общественный проект карты мира. Подобно Википедии, данные OSM могут быть
добавлены, отредактированы и использованы всеми желающими.</p><p><b>OSM </b>представляет собой базу картографических объектов. Картинка формируются
на её основе. Эту базу объектов можно посмотреть и самостоятельно изменить. Все
объекты на карте делятся на четыре типа: точка, линия, полигон и составной
объект.</p><p>Чтобы подключить и интегрировать
<b>OSM</b>-карты на веб-сайт можно
использовать различные картографические библиотеки JavaScript, такие как: Openlayers, Leaflet, Mapbox. В данном проекте используется библиотека Openlayers.</p><p><b>OpenLayers </b>– это многофункциональная библиотека
на JavaScript для встраивания карт. Она распространяется под лицензией BSD для
программного обеспечения с открытым исходным кодом. <b>OpenLayers </b>поддерживает
<b>OpenStreetMap </b>и другие карты. Доступа <a href="https://github.com/openlayers/openlayers">по ссылке</a>.</p><p><b>Openlayers </b>и набор расширений можно установить помощью следующих команд npm:</p><p>Пример кода Vue JS для отображения карт <b>OpenStreetMap </b>через <b>Openlayers</b>:</p><h2>Описание компонентов, маршрутизации приложения</h2><h3>Компонент App.vue</h3><p>Основной компонент <b>App.vue</b>
собирает вместе все
приложение. В нем подключается <b>OpenWeatherMap API</b> и располагаются компоненты для поиска населенных
пунктов, маршрутизация для выбора типа погоды и карта <b>OpenStreetMap</b>.</p><h3>Компоненты CountriesCodes.vue, CountriesTextBox.vue</h3><p><b>CountriesCodes.vue</b> – отдельный компонент, который загружает и обрабатывает CSV-данные о населенных пунктах и странах. Загрузка
данных происходит в методе beforeMount. Родительскому
компоненту загруженные данные передаются через $emit:</p><p>В <b>App.vue</b> данные передаются так:</p><p><b>CountriesTextBox.vue</b><b> </b>–<b> </b>компонент, который создает текстовое поле для ввода и поиска
местоположения. При вводе текста появляется выпадающий, отфильтрованный список
для выборки местоположения. Выпадающий список визуально формируется на основе манипуляций css-свойств для контейнеров HTML.</p><p><b>CountriesTextBox.vue</b> принимает CSV-данные из <b>App.vue</b>:</p><p>После обработки данных, компонент возвращает найденное место, страну и
координаты для передачи сервису прогноза погоды в <b>App.vue</b> следующим образом:</p><p>Далее получение данных в <b>App.vue</b> от <b>CountriesTextBox.vue</b> происходит в методе getLocation:<br /></p><h3>Маршрутизация в приложении</h3><p>С помощью маршрутов в приложении происходит навигация к различным компонентам. Для этого подключается необходимая библитека:</p><p>Разным типам погоды прогноза погоды соответствуют свои компоненты: прогноз сейчас, на сегодня и на 5 дней. 
Все компоненты маршрутизации находятся в папке src/pages:<b> ForecastNow.vue, ForecastToday.vue,
ForecastFiveDays.vue. </b>Для описания маршрутов в файле <b>src/router/router.js</b> создается массив с описанием объектов к страницам
роутера. <br /></p><p>Фрагмент кода<b> router.js
</b>:</p><p>Для выбора типа прогноза погоды пользователь сайта должен нажать на
соответствующей вкладке в правой части экрана. За создание вкладок отвечает
отдельный компонент <b>ForecastTypeTabs.vue</b>, который в цикле обрисовывает кнопки
навигации. При нажатии кнопки/вкладки для
определенного прогноза через $emit родительскому компоненту <b>App.vue</b> передаются данные о выбранном типе погоды.</p><p>Фрагмент кода <b>ForecastTypeTabs.vue</b>:</p><p>В свою очередь в родительском компоненте <b>App.vue</b> находится сам роутер &lt;router-view&gt; и происходит навигация к
необходимой странице через метод getForecastType.</p><p>Пример навигации к компоненту <b>ForecastNow.vue</b>, ответственному за прогноз погоды на данный момент:</p><p>Компоненту <b>ForecastNow.vu</b>e передаются данные в формате JSON от сервиса <b>OpenWeatherMap</b>, которые компонент отображает в требуемом формате.</p><h2>Итоговый результат</h2><p>Онлайн результат работы приложения можно увидеть по ссылке:</p><p>Ссылка на исходный код:</p><h3>Настройка сборки</h3><ul><li>клонировать проект <br /></li></ul><ul><li>войти в папку проекта</li></ul><ul><li>установить зависимости</li></ul><ul><li>запустить локальный сервер разработки <br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Какой JS-фреймворк выбрать новичку во фронтенде</title>
      <link>https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende</link>
      <comments>https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[МТС]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende</guid>
      <description><![CDATA[<p>Рассказываем про React, Angular и Vue.js — трёх слонов, на которых держится мир современной веб-разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende">Какой JS-фреймворк выбрать новичку во фронтенде</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 Feb 2024 09:07:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>В жизни каждого начинающего фронтендера наступает момент: вёрстка и ванильный JavaScript уже освоены, а значит, пришло время выбрать своего бойца, точнее — фреймворк для дальнейшей работы.</p><p>От этого выбора может зависеть то, как быстро вы найдёте первую работу, в какой сфере и с какой зарплатой. В этой статье разберём плюсы и минусы самых популярных фреймворков, чтобы вам было проще определиться.</p><h2>Чтотакое фреймворк и чем он отличается от библиотеки</h2><p><i>Фреймворк</i> — каркас программы, как готовое тесто для пиццы. Вам не нужно покупать яйца, муку и молоко, замешивать тесто, ждать несколько часов. Достаточно выбрать любимый соус и начинку — и отправить всё в духовку.</p><p>Это значит, что у фреймворка есть постоянная и переменная части — модули и элементы, которые можно добавлять по желанию для кастомизации программы.</p><p>Часто фреймворки путают с библиотеками.</p><p><i>Библиотека </i>— коллекция функций, классов и методов, которые вы можете использовать в коде. Она не определяет структуру вашего приложения, а предоставляет инструменты для выполнения конкретных задач.</p><p>Работая с фреймворком, вы можете использовать много разных библиотек. Во фронтенде это jQuery, Lodash, Moment.js, D3.js и другие.</p><p>По сути популярный React — это тоже библиотека, а не фреймворк. Так как он даёт узкоспециализированный функционал для создания пользовательских интерфейсов веб-приложений и не задаёт их чёткую структуру. Но всё же мы будем рассматривать React вместе с другими фреймворками, как это чаще бывает на практике.</p><h2>Популярные JS-фреймворки</h2><p>Чтобы выбрать фреймворки для этой статьи, мы заглянули на HeadHunter и проанализировали, какие технологии наиболее востребованы у работодателей.</p><p>На первом месте с 3 371 результатом оказался React, на втором — Angular (1 361 вакансия), на третьем — Vue.js с 1 161 упоминанием. Поэтому о них сегодня и пойдёт речь.</p><figure><img src="https://media.tproger.ru/user-uploads/73713/2024-01-31/cf128db3-1ef9-432d-ba9b-849f75c5171f.png" alt="" /></figure><h2>React</h2><p>React — фреймворк/библиотека JavaScript для разработки пользовательских интерфейсов. Это универсальное решение для создания небольших приложений.</p><p><b>Преимущества React:</b></p><ul><li>синтаксис JSX (JavaScript XML) делает код более читаемым и понятным</li><li>виртуальный DOM повышает скорость отрисовки компонентов</li><li>удобно создавать отдельные компоненты и переиспользовать их в других частях программы</li><li>используется направленный поток данных (дочерние элементы не влияют на родительские), за счёт чего в коде реже возникают баги</li></ul><p><b>Недостатки React:</b></p><ul><li>может показаться сложным для новичков, которые не знакомы с синтаксисом JSX</li><li>для создания сложных приложений необходимо использовать дополнительные библиотеки, что может усложнить поддержку проекта</li><li>для оптимальной работы с фреймворком надо знать такие инструменты, как Babel, Webpack, Redux</li></ul><p>Как выглядит программа Hello, world! на React:</p><h2>Angular</h2><p>Angular — фреймворк от компании Google для работы с интерфейсами.</p><p>Его первая версия AngularJS увидела свет в 2010 году, но после выхода React стали хорошо видны её недостатки, поэтому в компании решили переработать фреймворк. Так, в 2016 году появился Angular, который сейчас применяют во многих крупных компаниях для создания сложных корпоративных приложений.</p><p><b>Преимущества Angular:</b></p><ul><li>использует TypeScript, который добавляет статическую типизацию к JavaScript, что упрощает обнаружение ошибок</li><li>предоставляет всю необходимую инфраструктуру для разработки веб-приложений, включая маршрутизацию, управление состоянием, HTTP-запросы, валидацию форм и другие инструменты</li><li>включает в себя инструменты для оптимизации производительности, что улучшает скорость отрисовки интерфейса</li><li>удобный синтаксис для тех, кто переходит из бэкенда во фронтенд или фулстек-разработку</li></ul><p><b>Недостатки Angular:</b></p><ul><li>сложность освоения TypeScript для новичков в программировании, из-за этого высокий порог входа во фреймворк</li><li>не подходит для небольших приложений, так как весит 550-600 Кб</li><li>предлагает только один способ построения архитектуры ПО</li></ul><p>Как выглядит программа Hello, world! на Angular:</p><h2>Vue.js</h2><p>Vue.js — фреймворк для создания интерактивных пользовательских интерфейсов от разработчика Эвана Ю, более простая и лёгкая альтернатива другим фреймворкам и библиотекам.</p><p><b>Преимущества Vue.js:</b></p><ul><li>обладает интуитивно понятным синтаксисом, что делает его лёгким в освоении даже для новичков в веб-разработке</li><li>компонентная архитектура способствует переиспользованию кода, модульности и упрощает разработку</li><li>небольшой размер библиотеки (для архивированной версии — до 20 Кб), что обеспечивает быструю загрузку и меньшие требования к пропускной способности сети</li><li>подробная и понятная документация, в том числе на русском языке</li></ul><p><b>Недостатки Vue.js:</b></p><ul><li>редко используется крупными компаниями, что ограничивает возможности для поиска работы</li><li>имеет ограниченную экосистему, что может усложнить поиск решений для специфических задач</li></ul><p>Как выглядит программа Hello, world! на Vue.js:</p><h2>Какой фреймворк подойдёт вам</h2><p>Советуем найти бесплатные видео в интернете, которые рассказывают о синтаксисе и других особенностях фреймворков, и попробовать поработать с ними на практике.</p><p>Так вы сможете понять, что же вам ближе: React, Angular или Vue.js. Но не спешите и помните про базу — прежде чем переходить на фреймворки, хорошо разберитесь в работе JavaScript. Эти знания и умение гуглить правильные вопросы помогут разобраться в любой технологии.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 изменений JavaScript за 2023 год, которые вы могли упустить</title>
      <link>https://tproger.ru/news/10-izmenenij-javascript-za-2023-god--kotorye-vy-mogli-upustit</link>
      <comments>https://tproger.ru/news/10-izmenenij-javascript-za-2023-god--kotorye-vy-mogli-upustit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/10-izmenenij-javascript-za-2023-god--kotorye-vy-mogli-upustit</guid>
      <description><![CDATA[<p>Рассказали о 10 изменениях в JavaScript и веб-разработке в 2023 году, которые вы могли пропустить. Речь идёт о Next.js, React, Angular, Vue, и Node.js.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/10-izmenenij-javascript-za-2023-god--kotorye-vy-mogli-upustit">10 изменений JavaScript за 2023 год, которые вы могли упустить</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Jan 2024 11:07:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Блогер Fireship рассказал о 10 изменениях в JavaScript и веб-разработке в 2023 году, которые вы могли пропустить. Речь в ролике идёт о Next.js, React, Angular, Vue, и Node.js.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>2023 год оказался бурным: обвал банка, покупка Twitter Илоном Маском, увольнения друзей автора, аресты крипто-энтузиастов, выпуск Cybertruck Tesla и замена ChatGPT на рабочих местах.</li><li>В JavaScript произошли значительные изменения: почти каждый фреймворк решил обновиться в 2023 году.</li><li>Новая функция ECMAScript ‘object group by’ позволяет группировать объекты по определенному признаку, например, по возрасту.</li><li>Добавлены методы ‘array to sorted’, ‘to spliced’ и ‘to reversed’, которые не изменяют исходный массив, в отличие от ‘sort’ и ‘reverse’.</li><li>В HTML появились новые элементы, такие как тег ‘search’ для поисковых форм и элемент ‘dialogue’ для модальных диалогов.</li><li>iOS наконец разрешила веб-приложениям отправлять push-уведомления.</li><li>Next.js обновился до версии 13.4 с новой функцией ‘app directory’, позволяющей получать данные непосредственно в React-компонентах.</li><li>Фреймворк Nuxt.js в экосистеме Vue.js обновил свои инструменты разработчика и предложил компоненты через унифицированную экосистему JavaScript-инструментов.</li><li>Svelte ввел новую функцию ‘Runes’, изменяющую подход к реактивным переменным и управлению состоянием.</li><li>Angular представил новый синтаксис шаблонов, сигналы и ‘deferrable views’ для ленивой загрузки, а также обновил свой логотип.</li><li>Node.js улучшил модель разрешений и добавил собственный WebSocket клиент.</li><li>Bun — новая среда выполнения JavaScript, написанная на Zig, обещает улучшенный опыт разработки и высокую производительность.</li><li>HTMX получил награду ‘JavaScript Framework of the Year’, предлагая подход, сокращающий использование JavaScript.</li></ol><p>Ниже представлен транскрибированный перевод ролика на русском языке.</p><p>2023 год был диким. Мой банк обанкротился, Илон купил Твиттер, почти все мои друзья были уволены, все мои любимые крипто-братья попали в тюрьму, Tesla успешно скрестила DeLorean с Pontiac Aztec, создав Cybertruck, и ChatGPT сделал меня устаревшим. Но все эти хорошие новости блекнут на фоне изменений, которые увидели веб-разработчики в мире JavaScript за последний год, когда почти каждый фреймворк решил переосмыслить себя в 2023 году. В сегодняшнем видео мы рассмотрим 10 недавних изменений в JavaScript, которые вы могли пропустить.</p><h2>Обновления ECMAScript: группировка объектов</h2><p>Каждый год в ECMAScript стандартизируются новые языковые возможности, после чего они реализуются в браузерах. Одна из моих любимых новых возможностей в этом году – это группировка объектов. Представьте, у вас есть массив объектов, в котором объекты имеют похожую схему. Это могут быть записи из базы данных, где каждый объект имеет поле возраста.</p><p>Вы можете использовать группировку, чтобы разделить детей и взрослых, определив функцию, которая группирует всех, кто моложе 21 года, в детей, и всех, кто старше, во взрослых. В результате получается объект, организованный в группы. Это хорошая маленькая утилита, но когда я чаще всего использую – это array to sorted, вместе с to spliced и to reversed. В JavaScript уже были методы sort и reversed, но проблема в том, что они изменяют исходный массив на месте. И это сбивает с толку, потому что другие методы, такие как map и filter, этого не делают. Вместо этого они копируют массив и возвращают новый.</p><p>С помощью этих методов теперь вы можете сортировать, разворачивать и вырезать массив, рассматривая исходный как неизменяемое значение, что, как правило, является более разумным способом написания вашего кода.</p><h2>Новые элементы HTML</h2><p>Веб-разработчики также получили несколько крутых обновлений в виде совершенно новых элементов HTML. Например, тег search – это более семантический способ определения поля поиска на веб-сайте, который может заменить более общий тег form.</p><p>Это хорошо, но элемент dialogue намного мощнее, что позволяет создавать фактические модальные диалоги и управлять ими с помощью JavaScript с использованием встроенных методов, таких как showModal и close. Еще одна хорошая утилита, но это приводит нас к пункту три.</p><h2>iOS позволил веб-приложениям делать push-уведомления</h2><p>После многолетних умолчаний и умолений Apple, iOS наконец позволяет веб-приложениям отправлять уведомления push.</p><p>И это огромная победа для 0,0001% пользователей веб-сайтов, которые фактически разрешают веб-сайтам отправлять им уведомления push, что, скорее всего, ваш дедушка, который случайно нажал кнопку разрешения и теперь не знает, как ее отключить. Но теперь пришло время поговорить о веселых вещах, фреймворках.</p><h2>Обновился Next.js</h2><p>Самый популярный фреймворк JavaScript, Next.js, совершенно отличается от прошлого года благодаря каталогу приложений, который стал стабильным в мае с версией 13.4. Самое заметное отличие в том, что теперь вы можете получать данные непосредственно внутри компонентов React благодаря серверным компонентам, которые являются компонентами React, способными работать на сервере.</p><p>Отзывы о каталоге приложений были в какой-то степени противоречивыми. С одной стороны, у него много потрясающих новых функций и он может упростить ваш код, но многие жаловались, что он кажется спешным и недоделанным, как и способ, которым сейчас запускают видеоигры, где просто выпускают что-то на рынок, а затем исправляют его в течение следующих нескольких лет. Люди жаловались на необходимость использования директивы use client везде из-за нарушения существующих библиотек React.</p><p>Люди жаловались на медленный dev-сервер, который работает на Rust, что странно, потому что все, что работает на Rust, должно быть быстрым. И люди сравнивали его новую функцию серверных действий с PHP. Одно из самых оскорбительных оскорблений, которое можно сделать в отношении фреймворка JavaScript, но самая большая проблема заключается в том, что запуск Next.js довольно сложно сделать правильно вне Vercel, и это привело к проектам, таким как OpenNext, которые берут на себя утомительную задачу запуска его везде. Next по-прежнему является доминирующим мета-фреймворком, но Nuxt.js и экосистема Vue также имели много крутых обновлений в 2023 году, таких как его инструменты разработчика.</p><p>Эти инструменты запускаются непосредственно в браузере и значительно упрощают понимание структуры сложного приложения. Но одна вещь, которую вы, возможно, не знали о Nuxt, – многие из его компонентов доступны через унифицированную экосистему инструментов JavaScript. Например, если вам не важен Vue.js и вы просто хотите веб-сервер, вы можете использовать Nitro для создания быстрого сервера с обычным JavaScript. Забавно, что я думаю, что экосистема Vue.js изменилась меньше всего в 2023 году, и как следствие, она кажется наиболее стабильной и предсказуемой экосистемой.</p><h2>Новая функция в Svelte</h2><p>С другой стороны, Svelte был разрушен в 2023 году. В шокирующем заявлении несколько месяцев назад Svelte объявил о новой функции под названием Runes, которая кардинально изменит опыт разработчика в пятой версии. Вместо определения реактивных переменных с помощью let, теперь есть такая штука, как рун, которая по сути является макросом компилятора, сообщающим компилятору Svelte, что это значение является реактивным.</p><p>Svelte также избавляется от синтаксиса с двоеточием и знаком доллара и хранилищ с рунами, такими как derived и effect. Первоначальная реакция на эти изменения была отчасти смешанной, некоторые пользователи считали, что эти изменения делают Svelte гораздо больше похожим на React, от которого они пытаются отойти в разработке.</p><p>Но с другой стороны, многие люди любят эти изменения и видят их как необходимые для развития фреймворка в правильном направлении. Как активный пользователь Svelte, я жду выхода окончательной версии 5, прежде чем сформировать свое мнение.</p><h2>Обновления Angular</h2><p>Награду за наиболее измененный фреймворк в 2023 году, однако, получил Angular. У него длинный список новых функций, но наиболее заметные изменения для ненавистников Angular – это новый синтаксис шаблонов, который предоставляет более чистый способ обработки условий и циклов, заменяя вещи вроде ngf и ng4.</p><p>Кроме того, Angular также принял сигналы, как и все остальные фреймворки, и внес новую функцию под названием отложенные представления, которые позволяют декларативную ленивую загрузку непосредственно в шаблоне. Но самое главное, у Angular появился совершенно новый логотип, что действительно было единственным, что помешало ему стать самым популярным фреймворком в мире в прошлом.</p><h2>Улучшился Node.js</h2><p>Много сумасшедших изменений на фронт-энде, но на бэк-энде Node.js тихо стал лучше. С версией Node.js 20 была выпущена новая модель разрешений, которая улучшает безопасность, контролируя, к каким функциям имеет доступ скрипт. Очень похоже на то, что сделал Deno несколько лет назад. И затем с выпуском Node.js 21 был представлен собственный клиент WebSocket, основанный на API WebSocket в браузере.</p><h2>Новая среда Bun</h2><p>Самым большим дисруптором на бэк-энде JavaScript в 2023 году, однако, стал Bun. Это новая среда выполнения JavaScript, написанная на Zig, которая вышла с потрясающим опытом разработчика и дикими заявлениями о производительности. И после первоначального выпуска было обнаружено немало ошибок, но она по-прежнему остается многообещающим новым способом делать бэк-энд на JavaScript в будущем.</p><h2>Фреймворк HTMX</h2><p>И с этим мы рассмотрели 10 различных способов, которыми JavaScript изменился в 2023 году. Но я почти забыл о самом большом из всех – HTMX, фреймворк, который показал нам, что любой может завоевать воображение экосистемы JavaScript, если вы достаточно пошутили и мемили на Twitter.</p><p>Но самое главное, как я показал здесь научно, HTMX может фактически устранить тонну JavaScript по сравнению с подходом статус-кво, принятым всеми основными фреймворками. Это идеальный JavaScript-фреймворк для ненавистников JavaScript.</p><p>Именно поэтому сегодня я в восторге и почетно представляю команду HTMX с наградой JavaScript Framework of the Year, которая в основном является Нобелевской премией в мире JavaScript.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что нового в обновлении Vue 3.4</title>
      <link>https://tproger.ru/news/chto-novogo-v-obnovlenii-vue-3-4</link>
      <comments>https://tproger.ru/news/chto-novogo-v-obnovlenii-vue-3-4?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/chto-novogo-v-obnovlenii-vue-3-4</guid>
      <description><![CDATA[<p>В начале января 2024 года вышло обновление Vue 3.4. Рассказываем, что изменилось в новой версии фреймворка. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/chto-novogo-v-obnovlenii-vue-3-4">Что нового в обновлении Vue 3.4</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Jan 2024 10:48:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>В начале января 2024 года вышло обновление Vue 3.4. Англоязычный блог LearnVue рассказал, что изменилось в новой версии Vue.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Вышла новая версия Vue 3.4, которая вносит изменения, улучшающие производительность и разработку.</li><li>Внутреннее улучшение заключается в полной переписи парсера шаблонов, что ускоряет компиляцию компонентов.</li><li>Новый парсер использует токенизатор на основе машины состояний вместо регулярных выражений, что повышает производительность.</li><li>Изменения в системе реактивности Vue: теперь эффекты, зависящие от вычисляемых значений, запускаются только при их изменении.</li><li>Улучшения разработчика (DX) включают стабилизацию DefineModel и новую сокращенную запись для vBind.</li><li>Улучшены сообщения об ошибках и сокращены строки ошибок в продакшене для уменьшения размера бандла.</li><li>Синтаксис реактивности, который был объявлен устаревшим в Vue 3.3, теперь окончательно удален, но его можно использовать с помощью библиотеки Vue macros.</li></ol><p>Ниже — транскрибированный перевод ролика на русский язык.</p><p>Vue 3.4 вышел пару недель назад, и я уже давно не делал видео, так что давайте поговорим о нововведениях. Самые значительные изменения касаются внутренней работы Vue, которые улучшают производительность, но также есть некоторые приятные обновления для разработчиков.</p><h2>Обновление парсера шаблонов в Vue 3.4</h2><p>Первое внутреннее улучшение – полная переработка парсера шаблонов. Он используется для компиляции наших однофайловых компонентов.</p><p>Я даже не буду притворяться, что точно понимаю, что происходит под капотом, но по моим скромным знаниям, полученным из прочтения блога Эвана Ю, нескольких часов просмотра уроков на YouTube и нескольких попыток прочесть исходный код, старый парсер сильно полагался на просмотры строк и регулярные выражения, в то время как новый парсер использует токенизатор конечного автомата на основе HTML парсера 2.</p><p>Это означает, что ему нужно пройти по строке только один раз, что дает нам приятный прирост производительности.</p><p>Что это значит для нас – компиляции и сборки, скорее всего, увидят улучшение производительности, а другие части экосистемы Vue, такие как Volar или Vue TSC, будут работать быстрее.</p><h2>Реактивный Vue</h2><p>Далее, есть некоторые изменения в том, как Vue подходит к реактивности. Раньше, если вычисляемое значение должно было пересчитаться, все зависящие от этого значения вычисляемые значения или эффекты также должны были запуститься. Например, другое вычисляемое значение или эффект.</p><p>Давайте посмотрим на это в коде. Допустим, у нас есть ref под названием name, вычисляемое свойство, которое проверяет, является ли имя моим и затем watch эффект, который выводит в консоль в зависимости от того, я это я или нет.</p><p>До версии 3.4, каждый раз, когда мы меняем имя, is me будет отмечено как что-то вроде “грязного” ввода, который требует пересчета, но фактически пересчитываться оно не будет, пока у нас не будет чего-то, что считывает это значение, в нашем случае, наш watch эффект.</p><p>Так что мы не узнаем, меняется ли is me, пока этот watch эффект не запустится. Но теперь способ, которым вычисляемые значения запускают эффекты, все подписанные эффекты будут запускаться только в том случае, если значение вычисляемого изменится.</p><p>Это более точная и эффективная реализация системы пользовательской активности. Если вы видели мое видео о “eager computed values”, результат довольно похож. И даже в документации по использованию вычисляемого свойства в Vue для “eager composable” говорится, что нам больше не нужно это в Vue 3.4. И затем другая половина изменений – это некоторые хорошие улучшения DX, начиная с некоторых изменений в Define Model.</p><h2>Define Model</h2><p>Возвращаясь к Define Model, если вы использовали его в Vue 3.3, когда он был экспериментальным, то теперь он стабилен. Если вы не знаете, что это такое, Define Model – это приятный синтаксический сахар, который позволяет нам быстро создавать значения, используемые в двусторонней привязке данных с помощью vModel. Раньше, если вы хотели иметь ref, который моделирует какой-то ввод в дочернем компоненте, этот компонент должен был принимать prop и затем генерировать событие, когда этот ввод меняется.</p><p>С Define Model Vue заботится об этом за нас, поэтому нам просто нужно использовать Define Model и все готово.</p><h2>Новый сокращенный синтаксис vBind</h2><p>Следующее изменение – новый сокращенный синтаксис vBind. При передаче переменной в качестве prop, иногда имя нашего prop совпадает с нашей переменной. Vue 3.4 дает нам новый сокращенный вариант для этого. Так что вместо того, чтобы говорить “colon title equals title” для привязки переменной с именем title, мы можем просто использовать “colon title” для сокращения.</p><p>Честно говоря, я не знаю, буду ли я использовать этот сокращенный вариант, но если вас раздражает старый синтаксис и вы устали все время все печатать, просто попробуйте его, чтобы увидеть, понравится ли он вам. И затем некоторые другие незначительные улучшения DX – лучшие сообщения об ошибках для таких вещей, как ошибки несоответствия гидратации, а также сокращение строк ошибок в продакшене для уменьшения размера пакета. И в изменении, которое мы могли предвидеть, синтаксис преобразования реактивности, который был устаревшим в Vue 3.3, официально был удален.</p><p>Но если вам нравится этот синтаксис, вы все еще можете использовать его с библиотекой Vue macros.</p>]]></content:encoded>
    </item>
    <item>
      <title>Angular vs Vue: что выбрать в 2024 году</title>
      <link>https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu</link>
      <comments>https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu</guid>
      <description><![CDATA[<p>Сравнили фреймворки Angular и Vue. Рассмотрели преимущества и недостатки, сходства и различия, возможности карьерного роста.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu">Angular vs Vue: что выбрать в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 25 Jan 2024 11:55:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>Англоязычный IT-блогер Daniel Dan сравнил фреймворки Angular и Vue. Он рассмотрел такие темы, как преимущества и недостатки, сходства и различия, возможности карьерного роста, и выяснил, какой из фреймворков лучше использовать для вашего проекта.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Даниэль обсуждает выбор между фреймворками Angular и Vue для разработки пользовательских интерфейсов.</li><li>Angular, созданный Google в 2010 году, предпочтителен для корпоративных проектов, имеет встроенные инструменты и библиотеки, а также поддерживает динамическую и двустороннюю привязку данных.</li><li>Angular использует TypeScript, обеспечивает высокую производительность благодаря иерархической инъекции зависимостей и другим функциям, поддерживается Google и легко интегрируется с сторонними приложениями.</li><li>Vue, созданный на основе вдохновения от Angular, отличается простотой и элегантностью, предлагает гибкость и прогрессивное развитие, позволяя легко добавлять пользовательские модули и компоненты.</li><li>Vue обеспечивает гибкость интеграции, простоту использования и функциональное расширение с помощью мощных API.</li><li>Angular и Vue имеют схожие черты: компонентно-ориентированную архитектуру, реактивную привязку данных и декларативный стиль программирования, а также большие сообщества разработчиков.</li><li>Основные различия между Angular и Vue включают архитектуру (Angular – MVVM, Vue – только ViewModel), реактивность, обработку ошибок, встроенные функции и производительность.</li><li>Выбор между Angular и Vue зависит от конкретных потребностей проекта и целей разработки.</li><li>Vue лучше подходит для динамических приложений, проектов, ориентированных на UI/UX, портфолио и одностраничных приложений.</li><li>Angular лучше подходит для кроссплатформенной и гибридной веб-разработки, крупных проектов и предприятий, требующих серверной отрисовки.</li><li>Angular и Vue обеспечивают высокооплачиваемые рабочие места, с зарплатами до $125,000 и $156,000 в год соответственно, а также возможности для фриланса.</li></ol><p>Ниже представлен транскрибированный перевод видео на русский язык.</p><p>Вы наверняка слышали о Angular и Vue. Это два суперпопулярных фреймворка, которые разработчики используют для создания полноценных пользовательских интерфейсов.</p><p>Но вам, как разработчику, может прийтись принять непростое решение. Какую из этих двух технологий использовать в конкретном проекте? Меня зовут Даниэль, и сегодня мы поговорим о противостоянии Angular и Vue. Мы изучим их плюсы и минусы, сходства и различия. Мы постараемся понять, какой из этих фреймворков лучше подходит для различных типов проектов.</p><h2>Преимущества Angular</h2><p>Итак, приступим. Vue против Angular, но для чего они хороши? Ребята, прежде чем мы начнем сравнивать эти два фреймворка, давайте обсудим, для чего они были созданы. Как вы знаете, каждая технология создается с определенной целью.</p><p>И когда вы понимаете, какая эта цель, легче принимать правильное решение. Angular, Angular, созданный Google в 2010 году. Это лучший выбор для корпоративных проектов благодаря своим обширным функциям и высокой производительности. В отличие от других фреймворков, Angular не замедляет приложения. Он предлагает встроенные инструменты и библиотеки. Его код может быть использован на различных платформах, что делает разработку гибкой.</p><p>Плюс, у него есть динамическое связывание пользовательского интерфейса и двустороннее связывание данных, важные элементы его дизайна. И ребята, у Angular есть множество преимуществ, которые делают его таким популярным среди разработчиков. Основанный на TypeScript. Прежде всего, ребята, это TypeScript, язык программирования, созданный Microsoft, который является бесплатным и с открытым исходным кодом. Он добавляет статическую типизацию с возможностью использования типовых аннотаций к JavaScript.</p><p>TypeScript, надмножество JavaScript, улучшает качество кода с помощью надежной навигации, рефакторинга и функций автодополнения, что уменьшает ошибки в масштабных приложениях. Поддерживается Google. Еще одно преимущество заключается в том, что фреймворк поддерживается Google. Это включает в себя подробную документацию и возможности для будущего расширения фреймворка. Следующее – высокая производительность. Благодаря иерархической инъекции зависимостей, IV-рендерингу, AOT-компилятору, дифференциальной загрузке и поддержке Angular Universal, производительность фреймворка выдающаяся.</p><p>Обновленное руководство. Angular CLI предлагает своевременные рекомендации по зависимостям, загрузчикам и плагинам. Благодаря этому разработчики остаются в курсе последних рекомендаций. Бесшовные интеграции. Angular позволяет легко интегрировать сторонние приложения. Это дает разработчикам гибкость и множество инструментов для упрощенной разработки. Наконец, возможность настройки. Разработчики могут интегрировать элементы и модули из других фреймворков, адаптируя их под свои потребности. Дело в том, что элементы HTML Angular могут быть легко повторно использованы и управляемы путем обертывания их в качестве элементов DOM.</p><h2>Преимущества Vue</h2><p>Итак, как вы видите, ребята, есть много преимуществ у Angular. Но теперь давайте посмотрим на Vue. Vue, также называемый Vue.js, это все о чистом и элегантном дизайне. Представьте себе фреймворк, который объединяет мощные веб-инструменты с простотой. Вот что такое Vue.</p><p>Теперь вот интересный факт. Создатель Vue был вдохновлен Angular. Он взял это вдохновение и создал Vue, фреймворк, который позволяет легко создавать современные веб-проекты. Одной из выдающихся особенностей Vue является его прогрессивный характер. Он динамичен, что означает, что вы можете настраивать код вашего приложения, не нарушая основной функциональности. Плюс Vue предлагает невероятную гибкость. Вы можете легко добавлять пользовательские модули и визуальные компоненты, настраивая ваши веб-приложения до совершенства.</p><p>Другими словами, ребята, есть много преимуществ, которыми можно наслаждаться. Во-первых, Vue – это все о гибкости. Он позволяет вам плавно интегрировать его в ваш существующий код без нарушения вашего рабочего процесса.</p><p>Традиционный подход. Еще одна крутая часть заключается в том, что Vue придерживается традиционного подхода. Он не усложняет вещи ненужным шаблонным кодом.</p><p>Вместо этого он оптимизирует процесс, делая разработку приложений быстрее и более простой. И, наконец, функциональное расширение. Vue предлагает функциональное расширение, предоставляя набор мощных API.</p><p>Эти функциональные возможности позволяют вам создавать гибкую и обширную логику компонентов. Так что, ребята, судя по всему, Vue не уступает Angular.</p><h2>Сходства между Angular и Vue</h2><p>Ребята, прежде чем я продолжу, я стараюсь делать образовательный контент в увлекательной форме, делать его интересным вместо скучным.</p><p>И взамен я прошу просто лайкнуть это видео и подписаться на мой канал, если вам нравится контент, который я делаю. Вот и все. Люди, помните, что создатель Vue использовал Angular в качестве своего вдохновения. Это означает, что у этих двух фреймворков JavaScript много общего.</p><p>Итак, давайте поговорим о самых больших сходствах между ними. Архитектура на основе компонентов.</p><p>И Angular, и Vue работают как строительные блоки. Они разбивают пользовательские интерфейсы на более мелкие части, называемые компонентами. Эти компоненты похожи на логические кирпичи, которые можно создавать индивидуально. Реактивное связывание данных привязывает ваши данные непосредственно к тому, что видят пользователи. Поэтому, когда ваши данные меняются, ваш дисплей автоматически обновляется, без дополнительной работы. И Vue, и Angular делают это в реальном времени. Декларативное программирование. Vue и Angular могут выглядеть по-разному, но они оба имеют замечательную особенность – декларативный стиль программирования. Вместо перечисления пошаговых инструкций, вы просто описываете, что хотите достичь. Сообщество. У Angular и Vue есть большие сообщества разработчиков, где люди предлагают улучшения и поддерживают фреймворки. Они формируют функции, исправляют проблемы и часто помогают другим разработчикам.</p><h2>Различия между Angular и Vue</h2><p>Хорошо, друзья. Vue.js и Angular – это оба инструмента для создания фронтенда приложений с использованием JavaScript. Однако во многих аспектах они отличаются. Эти области, например, включают основную архитектуру, производительность, реактивность и другие.</p><p>Но давайте поговорим об этом более подробно.</p><p>Архитектура. Angular похож на полноценного архитектора, модель MVVM. Отлично подходит для создания детальных и сложных приложений. Кроме того, он поддерживает все виды серверных языков. Это делает Angular универсальным. Vue похож на декоратор фронтенда, только модель Vue.</p><p>Он отлично улучшает внешний вид, но не является универсальным инструментом для всего процесса создания. Проще говоря, Angular – это все в одном. Vue – только для фронтенда. Реактивность. Angular полностью основан на JavaScript. Он отлично подходит для приложений в реальном времени. Vue также использует HTML и CSS и идеально подходит для создания одностраничных приложений.</p><p>Он автоматически отображает любые обновления. Обработка ошибок. Angular обрабатывает ошибки во время компиляции. Vue заботится о них на лету во время выполнения. Функции. Angular поставляется с встроенными функциями, такими как маршрутизация, формы и внедрение зависимостей.</p><p>Он идеально подходит для крупных проектов. Vue более легковесен и отлично подходит для одностраничных проектов. Производительность. Когда речь идет о скорости, Vue намного быстрее.</p><p>Почему? Дело в том, что Vue остается легким с акцентом на слое Vue. Vue также получает ускорение от виртуального DOM, обеспечивая дополнительную скорость на различных платформах. Angular с его многочисленными встроенными функциями немного тяжелее и требует больше времени на выполнение задач.</p><p>Хорошо, ребята, и теперь мы подходим к главному вопросу.</p><h2>Какой фреймворк следует выбрать для вашего проекта? Vue или Angular?</h2><p>Итак, принимая во внимание все вышесказанное, что лучше, Vue или Angular?</p><p>Честно говоря, как часто бывает с такими технологиями, здесь нет однозначного ответа. Я могу сказать, что у обоих фреймворков есть свои преимущества. Angular надежен и прошел проверку временем, а Vue быстр и прост в использовании. Выбор между ними зависит от ваших конкретных потребностей и целей вашего проекта.</p><p>А когда речь идет о Vue, я думаю, что имеет смысл использовать его для. Динамических приложений, проектов, сосредоточенных на пользовательском интерфейсе, портфолио и сайтов с большим количеством изображений, а также одностраничных приложений. С другой стороны, Angular более подходит для приложений, требующих надежной функциональности, особенно для крупных команд и масштабируемых проектов. Поэтому лучше использовать его для кросс-платформенной и гибридной веб-разработки. Больших проектов и предприятий, требующих серверного рендеринга. Но, ребята, это также зависит от стратегии разработки проекта и возможностей вашей команды разработчиков. Поэтому все зависит от поиска подходящего решения для целей вашего проекта. Возможности карьеры.</p><p>Конечно, есть еще один важный вопрос.</p><h2>Поможет ли изучение этих технологий получить высокооплачиваемую работу?</h2><p>Если вы планируете стать разработчиком на Angular или Vue, вам не о чем беспокоиться. Согласно недавнему опросу Stack Overflow, Angular входит в топ-5 самых популярных веб-фреймворков.</p><p>И Vue не сильно отстает. Это означает, что спрос на разработчиков Angular и Vue остается высоким. По данным Glassdoor, разработчики на Angular в Соединенных Штатах могут зарабатывать до $125,000 в год. В то же время разработчики на Vue могут зарабатывать до $156,000 в год. Фрилансеры на Angular зарабатывают от $16 до $30 в час. И фрилансеры на Vue зарабатывают около $19-35 в час.</p><p>Итак, как вы можете видеть, здесь существенная разница в отношении офисных работ и не так много в плане фриланса. Ладно, мои уважаемые разработчики, это все, что у меня есть по сравнению Angular и Vue.</p><p>https://www.youtube.com/@Daniel-Dan./videos</p>]]></content:encoded>
    </item>
    <item>
      <title>Газпромбанк.Тех и Skillbox запускают программу подготовки фронтенд-разработчиков</title>
      <link>https://tproger.ru/articles/gazprombank-teh-i-skillbox-zapuskayut-programmu-podgotovki-frontend-razrabotchikov-erid-ljn8jyhqz</link>
      <comments>https://tproger.ru/articles/gazprombank-teh-i-skillbox-zapuskayut-programmu-podgotovki-frontend-razrabotchikov-erid-ljn8jyhqz?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вика Овсянникова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gazprombank-teh-i-skillbox-zapuskayut-programmu-podgotovki-frontend-razrabotchikov-erid-ljn8jyhqz</guid>
      <description><![CDATA[<p>Программа состоит из пяти курсов для фронтенд-разработчика, с помощью которых учащиеся смогут пополнить портфолио на 8 кейсов. Лучших позовут на стажировку в Газпромбанк.Тех.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gazprombank-teh-i-skillbox-zapuskayut-programmu-podgotovki-frontend-razrabotchikov-erid-ljn8jyhqz">Газпромбанк.Тех и Skillbox запускают программу подготовки фронтенд-разработчиков</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 14 Dec 2023 13:20:01 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Совместный курс «Профессия Фронтенд-разработчик» Газпромбанк.Тех и Skillbox позволит освоить навыки веб-верстки, JavaScript, TypeScript, фреймворки React.js или Vue.js. Студенты научатся разрабатывать сайты с анимацией, веб-приложения и оформят более восьми кейсов в портфолио на GitHub. Лучшие учащиеся получат возможность попасть на стажировку в Газпромбанк.Тех.</i></p><figure><img src="https://media.tproger.ru/user-uploads/75379/2023-12-14/668438ef-f8a0-4e54-9911-600b2b85ca8c.jpg" alt="" /></figure><p>Программа состоит из 5 курсов:</p><ul><li>«Погружение в профессию Фронтенд-разработчик»,</li><li>«Веб-верстка 3.0»,</li><li>«JavaScript»,</li><li>«Typescript, инструменты разработчика»,</li><li>«Изучение фреймворка React.js или Vue.js на выбор».</li></ul><p>Учащиеся научатся верстать сайты на языках HTML и CSS, «оживлять» веб-страницы, настраивать взаимодействие с сервером с помощью JavaScript, изучат стандарт рынка TypeScript. В процессе обучения они смогут выбрать фреймворк, с которым свяжут свою профессиональную деятельность в будущем: React.js или Vue.js. Кроме того, студенты получат навыки работы с Git и Figma.</p><p>Курс «Веб-верстка 3.0» создан в новом игровом формате. Студентам предстоит выполнять задачи от компаний, накапливая баллы за их успешное решение. Количество баллов зависит от выполнения задач разного уровня сложности — легких, средних и сложных. Чем сложнее задача, тем больше баллов. Задания представлены от трех разных типов IT-заказчиков: от компании Газпромбанк, диджитал-агентства Whitemark, а также от проектов на фриланс-бирже «Хабр Фриланс». Такой подход позволит студенту погрузиться в специфику работы в различных направлениях IT, узнать о ролях в команде разработки и лучше подготовиться к выходу на работу.</p><p>Обучение на программе проходит по предзаписанным видеолекциям и вебинарам с отраслевыми экспертами. Среди спикеров курса:</p><ul><li><b>Никита Балихин</b>, Tech Lead сервисной разработки в Газпромбанке,</li><li><b>Павел Рубан</b>, Lead веб-разработки в Газпромбанке,</li><li><b>Павел Гонзалес</b>, ведущий фронтенд-разработчик в Skillbox,</li><li><b>Валерий Кузнецов</b>, фронтенд-разработчик в «Циан»,</li><li><b>Павел Кольцов</b>, фронтенд-разработчик в «Самолете» и другие.</li></ul><p>Во время образовательного процесса поддержку также оказывают опытные профессионалы: куратор-эксперт подробно разбирает домашние задания, HR-консультант помогает с поиском работы, а служба заботы решает технические вопросы.</p><p>Идеи для обновления курса появились благодаря продуктовому исследованию работодателей из разных компаний — от стартапов и агентств до IT-гигантов. Результаты кастдевов позволили определить ожидания работодателей от джуниор-фронтенд-разработчиков, сформировать актуальную карту компетенций, которая легла в основу курса.</p><blockquote>Мы собрали программу, которая отвечает принципу необходимости, но достаточности навыков выпускника для того, чтобы найти работу на рынке. Для этого мы провели исследование работодателей и пообщались с ведущими российскими экспертами из индустрии. Так, например, благодаря анализу мы выяснили, что компаниям необходимы кандидаты с уверенным знанием TypeScript, и в образовательный трек мы внесли отдельный курс с обучением этому языку программирования.</blockquote><p>Программа адаптирована с учетом роста интереса к IT-профессиям — 95% новых пользователей направления «Программирование» начинают обучение без базовых цифровых знаний. Поэтому на курсе студенты получат ответы на основные вопросы, возникающие на старте карьеры в IT. Учащиеся научатся воспринимать информацию на языке разработчика, работать с массивами, освоят необходимые функции и цифровые инструменты. Помимо этого, слушателям расскажут про систему грейдов в IT: как продвигаться по карьерной лестнице и с какими задачами работают специалисты на разных уровнях.</p><p>Рекомендованная длительность прохождения <a href="https://skillbox.ru/course/frontend-developer/">программы</a> — девять месяцев. Выпускники оформят более восьми кейсов в портфолио на GitHub и получат возможность попасть на стажировку в Газпромбанк.Тех. По завершении обучения у учащихся будет сертификат государственного образца.</p><p><i>Реклама АО «Газпромбанк» LjN8Jyhqz</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Менеджер паролей, который не хранит пароли — конкурс пет-проектов</title>
      <link>https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov</link>
      <comments>https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Artem]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov</guid>
      <description><![CDATA[<p>Написал свой удобный и безопасный менеджер паролей, который могут протестировать все.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/menedzher-parolej-kotoryj-ne-hranit-paroli-konkurs-pet-proektov">Менеджер паролей, который не хранит пароли — конкурс пет-проектов</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Oct 2023 12:14:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем привет! Меня зовут Артем (Nelkor) и я всем сердцем увлечён программированием. Занимаюсь этим на работе и время от времени создаю пет-проекты.</p><h2>Вступление</h2><p>Все мы пользуемся паролями. Мы хотим, чтобы наши пароли были сложными, уникальными для каждого аккаунта и не хотим хранить их на бумажке. Однако, помнить десятки разных и сложных паролей попросту невозможно, и мы идём на компромисс. Например, пароли начинают повторяться. Мы понимаем, что это уязвимость, но как иначе удержать свои доступы в голове?</p><p>В начале этого года я решил — хватит! Я перейду на один из менеджеров паролей. Все крутые парни пользуются менеджерами паролей. И я стал изучать их.</p><p>Неочевидная проблема заключается в том, что менеджеры паролей… хранят пароли. Как правило, это зашифрованный файл на устройстве. Если доступ к этому файлу будет утерян, мы потеряем доступ ко всем своим аккаунтам. Если мы купили новое устройство, на нём этого файла нет. Если мы завели новый аккаунт на одном устройстве, а войти хотим с другого, на нём этого пароля нет. Файл необходимо синхронизировать и следить за его версиями.</p><p>В критически важный момент мы можем не получить доступ к своему аккаунту.</p><p>Эту проблему, якобы решает облачное хранение. Но облачное хранилище — это всегда чей-то сервис. Мы не можем быть уверены, что этот сервис не сломается или не откажет нам в доступе по любой причине.</p><h2>Идея</h2><p>Ни один из популярных менеджеров паролей не предоставляет той функциональности, которая мне нужна. И я решил сделать свой.</p><p>Принцип простой — придумать и запомнить один надёжный пароль не так уж трудно. Этот пароль может играть роль источника энтропии для криптографической функции, которая вычисляет пароль для конкретного аккаунта. Все данные аккаунтов можно безопасно сохранять на устройстве для удобства пользователя.</p><p>Зная свой исходный пароль, <b>мы можем получить доступ к любому своему аккаунту откуда угодно, хоть с совершенно нового устройства</b>. Чистая функция вычислит оба раза одинаковый результат, если передавать ей на вход одинаковые данные.</p><p>В качестве варианта реализации я выбрал PWA. Во-первых, PWA — это, прежде всего, веб-сайт. То есть получить доступ к нему максимально просто. Во-вторых, PWA — это приложение, которое можно установить на любое устройство. Буквально одни плюсы и нет минусов.</p><p>В начале года как раз узнал про методологию Feature-sliced design и решил распробовать её на своём новом пет-проекте. В качестве реактивной библиотеки выбрал свою любимую третью Vue. Итак, дамы и господа, встречайте…</p><h2>Passcryptum</h2><figure><img src="https://media.tproger.ru/user-uploads/91563/2023-10-20/9257af88-4b14-4c4d-89a0-54a01b0c0edc.png" alt="" /></figure><p><a href="https://github.com/nelkor/passcryptum">GitHub — Passcryptum</a></p><p>Исходный пароль обрабатывается функцией PBKDF2 SHA-512 262144 итераций. Это серьёзное препятствие на пути у тех, кто захочет получить доступ к нашим аккаунтам путём перебора исходного пароля.</p><p>Приложение не хранит пароли, но хранит список сервисов и логинов в зашифрованном виде. Без нашего исходного пароля никто не сможет прочитать даже список сервисов, которыми мы пользуемся. В свою очередь мы, заходя в Passcryptum, сразу видим свои сервисы и можем сразу скопировать логин/пароль.</p><p>Список сервисов можно безопасно хранить где угодно и передавать на другие устройства. Даже если у нас новое устройство, а список сервисов потерян — ничего страшного, можно просто ввести свои сервисы и логины заново и получить свои пароли.</p><p>Если есть нужда сменить пароль на аккаунте — у каждого логина есть версия. Инкрементируем версию и получаем новый совершенно уникальный пароль.</p><p>Чтобы не вводить каждый раз свой суперсекретный исходный пароль (мало ли где кто подсмотрит), существует возможность задать PIN. Хеш исходного пароля шифруется значением PIN, а также отпечатком системы устройства. PIN можно сколько угодно раз забыть, удалить и установить новый. Главное — помнить свой исходный пароль и вводить его исключительно осторожно.</p><h2>Заключение</h2><p>Passcryptum решил мою проблему и я с радостью готов поделиться со всем миром этим инструментом. В Passcryptum нет ничего платного и весь код открыт.</p><p>Помимо README.md, я добавил несколько полезных инструкций:</p><ul><li><a href="https://github.com/nelkor/passcryptum/blob/main/docs/password-generation.md">Алгоритм генерации паролей</a>;</li><li><a href="https://github.com/nelkor/passcryptum/blob/main/docs/pin.md">PIN</a>;</li><li><a href="https://github.com/nelkor/passcryptum/blob/main/docs/recommendations.md">Рекомендации по использованию</a>.</li></ul><p>Для инструкций выбрал английский язык как международный. Надеюсь, это никому не помешает прочитать, ведь средства автоматизированного перевода сейчас уже на очень высоком уровне.</p><p>Спасибо за внимание! Каждому человеку, который пользуется паролями (ну то есть просто каждому), искренне советую попробовать Passcryptum.</p>]]></content:encoded>
    </item>
    <item>
      <title>5 архитектурных ошибок, которые мы совершаем на старте проектов</title>
      <link>https://tproger.ru/articles/5-arhitekturnyh-owibok--kotorye-my-soverwaem-pri-starte-proektov</link>
      <comments>https://tproger.ru/articles/5-arhitekturnyh-owibok--kotorye-my-soverwaem-pri-starte-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-arhitekturnyh-owibok--kotorye-my-soverwaem-pri-starte-proektov</guid>
      <description><![CDATA[<p>Какие архитектурные ошибки чаще всего совершают разработчики при запуске проектов и как их избежать? Разбираем пять критичных промахов, которые мешают продукту масштабироваться и усложняют поддержку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-arhitekturnyh-owibok--kotorye-my-soverwaem-pri-starte-proektov">5 архитектурных ошибок, которые мы совершаем на старте проектов</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Redux]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 14 Jul 2023 12:10:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Можно запустить MVP за пару недель, но потом годами разгребать архитектурные долги. Ошибки на старте проекта легко не заметить: код вроде бы работает, фичи выкатываются, пользователи приходят. Но когда продукт растёт, каждая непродуманная деталь в архитектуре оборачивается багами. Разбираем пять ключевых ошибок, которые разработчики совершают чаще всего, и объясняем, как их избежать.</p><h2>Ошибка 1. Нет четких границ между слоями приложения</h2><p>На старте проекта код часто пишется «в лоб»: контроллеры ходят в базу напрямую, внутри функций появляются бизнес-правила и расчёты, а валидация размазывается по коду. Это кажется удобным, пока приложение небольшое. Но при росте команды и количества фич изменения начинают ломать соседние части кода, баги растут, а скорость разработки падает.</p><p>Можно выделить три базовых уровня:</p><ul><li>Контроллеры (или хэндлеры) принимают запросы, проводят базовую валидацию (например, через pydantic-схемы) и передают данные дальше.</li><li>Слой бизнес-логики реализует правила работы приложения: транзакции, расчёты скидок, проверку лимитов, работу с несколькими сервисами.</li><li>Слой доступа к данным отвечает за запросы к базе и возвращает данные в удобной для бизнес-логики форме.</li></ul><p>Например, в FastAPI проще начать с хэндлеров, которые сразу ходят в SQLAlchemy-модель. Но если сразу заложить сервисный слой, расчёты комиссий и проверку бизнес-правил можно будет тестировать изолированно, не поднимая всю API. Слой репозиториев позволяет в будущем легко заменить Postgres на другую базу или добавить кэш, не переписывая логику приложения.</p><p>Чёткое разделение позволяет быстро находить, где живёт бизнес-логика, где происходит доступ к данным и куда добавлять новые фичи. Продукт растёт, а код остается предсказуемым, удобным для изменений и масштабирования.</p><h2>Ошибка 2. Игнор масштабирования с первого дня</h2><p>Когда проект только запускается, кажется, что про масштабирование можно подумать потом. Приложение обслуживает сотню пользователей, запросы проходят быстро, всё работает. Но как только запускается маркетинг или приходит первый крупный клиент, внезапно всё начинает тормозить, а в коде нет ни одной зацепки, куда безопасно вставить кэш или вынести тяжёлые операции в фон.</p><p>Важно сразу закладывать в архитектуру точки роста, даже если пока они не нужны на каждый день.</p><p>Например:</p><ul><li>Добавить очереди и фоновые задачи через Celery или RQ, если есть риск появления тяжёлых операций (генерация отчётов, массовая рассылка).</li><li>Разносить чтение и запись: даже простое разделение на эндпоинты, где читающие операции не блокируются длительными транзакциями, уже помогает при росте нагрузки.</li><li>Придумать, как кэшировать самые тяжелые запросы: например, использовать Redis, чтобы хранить агрегированные данные, а не считать их каждый раз.</li><li>Закладывать возможность горизонтального масштабирования: не привязывать логику к локальному состоянию приложения, использовать хранилище с возможностью разделения нагрузки, не писать монолит, который нельзя будет разбить на части при росте.</li></ul><p>На практике проект растёт быстрее, чем кажется. Сначала в API добавляется массовая выгрузка CSV, потом приходят интеграции с другими сервисами, а затем накатывается нагрузка от новых пользователей. Если архитектура не подготовлена, команде приходится ставить костыли, переписывать эндпоинты под фоновые задачи или внедрять кэш в экстренном порядке, исправляя баги в проде.</p><p>Закладывая масштабирование в архитектуру с первого дня,  команда экономит себе месяцы переработок и спасается от бесконечных хотфиксов. Это инвестиция, которая позволяет команде развивать продукт спокойно.</p><h2>Ошибка 3. Преждевременное усложнение архитектуры</h2><p>Многие разработчики боятся, что проект не выдержит нагрузку, поэтому с самого старта закладывают сложные паттерны, микросервисы, брокеры событий и сразу три уровня кэширования. Но пока в системе нет ни пользователей, ни подтверждённой бизнес-модели, такие решения снижают скорость разработки и приводят к куче багов.</p><p>Рядовой пример — проект сразу запускается на Kubernetes с несколькими сервисами, которые обмениваются сообщениями через Kafka. В реальности такие проекты вначале требуют десятков часов на поддержание инфраструктуры, а баги приходится искать сразу в нескольких сервисах, между которыми гуляют события. При этом единственная реальная задача в начале — быстро проверить гипотезы и получить первых пользователей.</p><p>Упрощённая архитектура на старте позволяет команде сосредоточиться на продукте: монолит с чёткими слоями (контроллеры, сервисы, репозитории) куда быстрее дорабатывается и легче деплоится, чем микросервисы с отдельными контурами.</p><p>Что можно делать:</p><ul><li>Запускать монолит на FastAPI или Django, а не дробить на микросервисы до появления реальных узких мест.</li><li>Использовать Postgres без брокеров событий, пока не появятся требования к масштабированию.</li><li>Добавлять кэш Redis точечно, когда видна реальная нагрузка, а не вслепую кэшировать каждый запрос.</li></ul><p>Сложные архитектуры требуют времени на поддержку и экспертизу, чтобы не допустить критичных ошибок (например, потерю событий в брокере или гонки данных между сервисами). Поэтому вложения в сложную архитектуру оправданы, когда проект достигает уровня, где без этого уже не обойтись.</p><p>Если команда делает стартап или MVP, преждевременное усложнение архитектуры только тормозит развитие продукта. Гораздо эффективнее заложить возможности для масштабирования (очереди, фоновые задачи, кэш), но держать архитектуру простой до тех пор, пока проект не начнёт расти и не появятся реальные вещи, требующие изменений.</p><h2>Ошибка 4. Непродуманная работа с зависимостями</h2><p>В начале проекта обычно кажется, что зависимости — это просто. Но со временем проект разрастается, зависимости множатся, версии начинают конфликтовать, а обновление одной библиотеки ломает другую.</p><p>Эта ошибка обычно проявляется в нескольких местах. Например, в проект могут без разбора ставиться зависимости про запас или ради одной строчки удобной функции, хотя можно обойтись стандартной библиотекой. Ещё одна частая проблема — зависимости фиксируются слишком жестко, что не дает обновляться безопасно, или наоборот, версии не фиксируются вовсе, и проект начинает падать после автоматического обновления библиотек.</p><p>Чтобы избежать проблем, важно с самого начала заложить порядок в работе с зависимостями:</p><ul><li>Использовать инструмент управления зависимостями, который позволяет контролировать версии и изолировать окружения.</li><li>Разделять зависимости для разработки и продакшена.</li><li>Периодически обновлять зависимости, чтобы не закапываться в старые версии, но делать это контролируемо и с прогоном тестов.</li></ul><p>Например, при работе с Python удобным подходом будет использование Poetry: можно зафиксировать версии зависимостей в pyproject.toml, автоматически создавать lock-файл, следить за актуальностью библиотек и легко пересоздавать окружение. Если проект запускается на CI/CD, можно установить точные версии и сразу выявить, где обновление ломает тесты.</p><p>В длинных проектах непродуманная работа с зависимостями множится в геометрической прогрессии. Любой новый разработчик тратит время на настройку окружения, зависимости конфликтуют, часть библиотек остаётся неиспользованной. Порядок с зависимостями экономит часы и дни, снижает риск падений в проде и влияет на развитие проекта.</p><h2>Ошибка 5. Нет стратегии управления состоянием</h2><p>Состояние — это данные, которые хранятся между запросами или действиями пользователя: корзина, прогресс пользователя, кэшированные результаты запроса, состояние WebSocket-подключений. Если не продумать, как эти данные хранятся, обновляются и синхронизируются, приложение быстро начинает вести себя непредсказуемо.</p><p>На старте часто используют облегченный подход: данные передаются по цепочке вызовов, хранятся в сессии или глобальных переменных, кэшируются в памяти процесса. Это удобно, пока пользователей мало и сервер один. Но при росте нагрузки и масштабировании начинаются проблемы: сессии теряются между инстансами, кэш расходится, данные теряются при перезапуске приложения.</p><p>Чтобы избежать хаоса, управление состоянием нужно продумать заранее:</p><ul><li>Выяснить, какие данные должны храниться между запросами и как долго.</li><li>Решить, где хранить состояние: в базе данных, Redis, сторонних сервисах.</li><li>Сразу заложить сериализацию и валидацию состояния, чтобы избежать рассинхронизации форматов.</li></ul><p>Например, хранение кэша в памяти может подойти для небольших проектов, но если приложение начинает горизонтально масштабироваться, лучше вынести кэш в Redis, чтобы все инстансы работали с единым источником. Для сессий пользователей можно использовать JWT, если нужно масштабирование без общего состояния, или централизованное хранилище сессий, если требуется возможность их отзыва.</p><p>При работе с фронтендом стратегия управления состоянием не менее важна. Например, при использовании React или Vue проект может сначала обходиться локальным состоянием компонентов, но при росте сложности приложение начинает сыпаться из-за рассинхрона между компонентами. Важно заранее заложить подход с централизованным состоянием, а также понять, какие данные держать в состоянии клиента, а какие запрашивать заново.</p><p>Без стратегии управления состоянием проект становится сложным в отладке и поддержке. Грамотное управление состоянием ускоряет разработку и снижает количество багов в будущем.</p><p>А какие ошибки допускаете вы? Делитесь в комментариях или в тг-канале <a href="https://t.me/+a1v-IRDDUqI0MDhi">Веб-страница</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Приложение для поиска погоды с Vue 3 + OpenWeatherMap API</title>
      <link>https://tproger.ru/articles/prilozhenie-dlya-poiska-pogody-s-vue-3-openweathermap-api</link>
      <comments>https://tproger.ru/articles/prilozhenie-dlya-poiska-pogody-s-vue-3-openweathermap-api?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/prilozhenie-dlya-poiska-pogody-s-vue-3-openweathermap-api</guid>
      <description><![CDATA[<p>Рассказываем, как написать простое приложение для поиска погоды, используя Vue 3 и OpenWeatherMap API. Весь код — внутри.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/prilozhenie-dlya-poiska-pogody-s-vue-3-openweathermap-api">Приложение для поиска погоды с Vue 3 + OpenWeatherMap API</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 May 2023 09:37:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет всем! Сегодняшняя цель – построить простое приложение для поиска погоды, используя Vue 3 + OpenWeatherMap API.</p><p>Это — перевод <a href="https://medium.com/js-dojo/weather-search-app-with-vue-3-openweathermap-api-8b2cf3f2b264">оригинальной статьи</a> с Medium.com на английском языке. Автор — William Schulte. Далее ведётся повествование от лица автора.</p><p><b>В ходе этого проекта мы рассмотрим:</b></p><ol><li>Как настроить функцию search() для обработки ответа от OpenWeatherMap API на основе введенного пользователем почтового индекса США. (В вашем случае, почтовый индекс может быть каким угодно).</li><li>Как использовать метод JavaScript Object.keys() в функции для округления значений погоды (возвращаемых из ответа) до ближайшего целого числа.</li></ol><p>Приложение, которое мы создадим, на самом деле является урезанной, одностраничной версией <a href="https://github.com/jsfanatik/vue-vite-weather">приложения OpenWeatherMap API dashboard</a>, которое я создал ранее. Если хотите, вы можете посмотреть его репозиторий на GitHub. Для этого проекта мы создадим кое-что попроще.</p><p>Давайте начнем!</p><h2>Настройка проекта</h2><p>Сначала откройте IDE и скопируйте и вставьте следующий код шаблона в HTML-файл:</p><p>Теперь создадим блок скрипта:</p><p>Внутри функции setup() добавьте следующие свойства:</p><h2>Функция Search()</h2><p>Чуть ниже свойств, которые мы написали, настроим функцию search(), которая будет обрабатывать вызов API OpenWeatherMap:</p><p>Чтобы вызов API работал, вам нужно зарегистрироваться для получения ключа API на сайте OpenWeatherMap. После создания учетной записи и получения ключа вставьте его в URL-адрес API в указанном месте.</p><p>После ввода 5-значного почтового индекса и нажатия кнопки Enter, API вернет данные о погоде для введенного пользователем почтового индекса (см. интерполированное свойство cityZip.value в URL).</p><p>Чтобы увидеть разобранные данные, просто скопируйте и вставьте URL-адрес с ключом API и введенным почтовым индексом в браузер. После этого вы увидите большое JSON-дерево погодных данных для выбранного города.</p><p>В данном приложении нам важно получить из ответа API данные о погоде, содержащиеся в следующем объекте:</p><p>Хотя по умолчанию эти значения представлены в градусах Цельсия, мы можем преобразовать их в градусы Фаренгейта, добавив "&amp;units=imperial" в конце URL API. После сохранения res.data.main в weatherValue.data мы должны увидеть эти значения, преобразованные в Фаренгейт.</p><p>Теперь запустите приложение в браузере. На этом этапе вы должны увидеть такое окно:</p><figure><img src="https://media.tproger.ru/uploads/2023/05/c5b4b88b-52ee-4600-8931-281814bc8fc6.png" alt="" /></figure><p>Кажется, что все работает нормально. Однако одна из задач этого проекта – возвращать значения погоды, округленные до ближайшего целого числа. Для этого мы используем метод Object.keys() как часть функции для округления значений погоды. Но сначала давайте рассмотрим основную концепцию метода Object.keys().</p><h2>Метод Object.keys()</h2><p>Если вы не знали, метод Object.keys() в JavaScript возвращает массив перечисляемых строковых имен свойств данного объекта. Обратите внимание на следующий пример из документации JavaScript MDN:</p><p>object1 – это объект, содержащий свойства. Каждое свойство представлено парой ключ:значение. Результатом является новый массив, содержащий только ключи исходного объекта. В данном случае результатом будет:</p><p>Теперь давайте применим эту концепцию к нашему приложению. Вернемся в наш HTML-файл и добавим код ниже функции search():</p><p>Внутри функции roundedValue() мы создадим свойство roundData, которое установим в пустой объект. Затем мы используем метод Object.keys() для создания нового массива, содержащего все ключи из weatherData.value.</p><p>console.log(Object.keys(weatherData.value)) должен вернуть следующее:</p><p>Далее мы используем метод map() для итерации по вновь созданному массиву ключей, причем каждый элемент в массиве ключей будет представлен элементом key.</p><p>Чтобы округлить каждое значение погоды, мы передадим weatherData.value[key] в Math.round() внутри обратного вызова, используя при этом ключевой элемент как индекс для каждого итерируемого элемента weatherData.value.</p><p>Наконец, каждое новое округленное значение мы присвоим roundData[key].</p><p>После выполнения console.log(roundData) мы должны увидеть новый объект:</p><p>В функции setup() мы добавим новое вычисляемое свойство roundedData, которое будет возвращать наша функция roundedValue(). Не забудем включить оба этих элемента в возвращаемую функцию setup.</p><p>Давайте также обновим карточку с информацией о погоде в шаблоне, чтобы интерполировать вычисляемое свойство roundedData (там, где это необходимо):</p><p>Окончательный код должен выглядеть следующим образом:</p><p>Конечный результат должен быть похож на первый снимок экрана:</p><figure><img src="https://media.tproger.ru/uploads/2023/05/9fd2961a-d119-4049-952d-1c6dfd0199be.png" alt="" /></figure><p>И вот, у вас всё получилось! Поздравляю вас!</p>]]></content:encoded>
    </item>
    <item>
      <title>Обзор Vue 3.3. Что изменилось и при чём тут TypeScript</title>
      <link>https://tproger.ru/articles/vywel-reliz-vue-3-3</link>
      <comments>https://tproger.ru/articles/vywel-reliz-vue-3-3?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vywel-reliz-vue-3-3</guid>
      <description><![CDATA[<p>Команда Vue сообщила о выпуске версии 3.3 "Rurouni Kenshin". Многие обновления направлены на поддержку TypeScript.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vywel-reliz-vue-3-3">Обзор Vue 3.3. Что изменилось и при чём тут TypeScript</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 May 2023 09:33:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Команда Vue <a href="https://blog.vuejs.org/posts/vue-3-3">сообщила</a> о выпуске версии 3.3 — “Rurouni Kenshin”.</p><p>В новой версии разработчики постарались улучшить опыт разработки. К примеру, было улучшено взаимодействие с SFC &lt;script setup&gt; на TypeScript.</p><p>Также были решены многие давние проблемы с использованием Vue и TypeScript.</p><h2>Основные изменения</h2><h3>Обновления зависимостей</h3><p>Чтобы обновиться до Vue 3.3, нужно также обновить зависимости:</p><ol><li>volar / vue-tsc@^1.6.4;</li><li>vite@^4.3.5;</li><li>@vitejs/plugin-vue@^4.2.0;</li><li>vue-loader@^17.1.0 (если используется webpack или vue-cli).</li></ol><h3>Поддержка импортированных и комплексных типов в макросах</h3><p>До версии 3.3 типы в defineProps и defineEmits могли быть только локальными типами и поддерживали только литералы типов.</p><p>Так было потому, что Vue нужно было анализировать свойства props для генерации опций во время выполнения кода.</p><p>Теперь, в версии 3.3, компилятор разрешает использовать импортированные и комплексные, сложные типы:</p><p>Обратите внимание, что поддержка сложных типов основана на AST, поэтому не все типы могут поддерживаться на 100%. К примеру, условные типы вообще не поддерживаются.</p><p>Вы можете использовать условные типы для одного параметра, но не для объекта параметров.</p><h3>Универсальные компоненты</h3><p>Компоненты &lt;script setup&gt; теперь принимают универсальные параметры через атрибут generic:</p><p>Значение generic работает как список параметров между &lt;...&gt; в TypeScript.</p><p>Теперь можно использовать несколько параметров, extends, типы по умолчанию и импортированные типы:</p><p>Раньше эту функцию надо было включить вручную. Теперь, в последней версии volar/vue-tsc, она включена по умолчанию.</p><h3>Эргономичный defineEmits</h3><p>Ранее параметр для defineEmits поддерживал только синтаксис сигнатуры вызова:</p><p>Тип соответствует возвращаемому типу для emit, но он короткий и неудобный для написания. В версии 3.3 ввели более эргономичный способ объявления emit:</p><p>В литерале типа ключ — это имя события, а значение — тип массива, определяющий дополнительные аргументы.</p><p>Старый синтаксис сигнатуры всё ещё поддерживается.</p><h3>Типизированные слоты с defineSlots</h3><p>Новый макрос defineSlots можно использовать для объявления ожидаемых слотов и их свойств:</p><p>defineSlots() принимает только параметр типа, но не принимает аргументы рантайма.</p><p>Параметр типа должен быть литералом типа, где ключ свойства — это имя слота, а значение — функция слота.</p><p>Первый аргумент функции — props, тип которых будет использоваться для пропсов слота в шаблоне.</p><p>Значение defineSlots — это тот же объект слотов, который возвращается из useSlots.</p><h3>Текущие ограничения</h3><ol><li>Проверка слотов еще не реализована в volar/vue-tsc.</li><li>Тип возврата функции слота может быть любым, но в будущем он может использоваться для проверки содержимого слота.</li></ol><p>Существует также опция слотов для использования defineComponent. Оба API используются исключительно в качестве подсказок типа для IDE и vue-tsc.</p><h2>Экспериментальные функции</h2><h3>Деструктуризация реактивных пропсов</h3><p>Деструктура реактивных пропсов ранее была частью преобразования реактивности, которое теперь удалено. Сейчас она выделена в отдельную функцию.</p><p>Эта функция позволяет деструктурированным пропсам сохранять реактивность и предлагает более удобный способ объявления значений:</p><p>Эта функция является экспериментальной и требует явного согласия.</p><h3>defineModel</h3><p>Ранее, чтобы компонент поддерживал двустороннюю привязку к v-модели, ему необходимо было объявить свойство и создать событие update:propName, чтобы свойство обновлялось:</p><p>Версия 3.3 упрощает этот процесс с помощью макроса defineModel. Макрос автоматически объявляет свойство и возвращает ссылку:</p><p>Эта функция является экспериментальной и требует явного согласия.</p><h2>Другие примечательные особенности</h2><h3>defineOptions</h3><p>Новый макрос defineOptions позволяет объявлять параметры компонента прямо в &lt;script setup&gt;. При этом не нужен отдельный блок &lt;script&gt;:</p><h3>Лучшая поддержка Getter с toRef и toValue</h3><p>toRef улучшен для поддержки нормализации значений, геттеров и refs:</p><p>Вызов toRef может быть более эффективным, если геттеру нужно просто выполнить доступ к свойствам. Для этого не понадобится долгих и сложных вычислений.</p><p>Новый служебный метод toValue делает всё наоборот, нормализуя всё в значения:</p><p>toValue можно использовать в составных элементах вместо unref, чтобы компоненты принимали геттеры в качестве реактивных источников данных:</p><p>Разница между toRef и toValue такая же, как между ref и unref. Разница только в обработке функций-получателей.</p><h3>Импорт исходного кода JSX</h3><p>Сейчас типы Vue автоматически регистрируют глобальную типизацию JSX. Это может привести к конфликту при использовании других библиотек, которым нужно определять типы JSX. В частности, речь идёт о React.</p><p>Начиная с версии 3.3, Vue поддерживает указание типизаций JSX с помощью параметра TypeScript jsxImportSource.</p><h2>Улучшение инфраструктуры обслуживания</h2><p>Вот, что улучшили в выпуске 3.3:</p><ol><li>Сборки стали в 10 раз быстрее благодаря отделению проверки типов от сводной сборки и переходу от rollup-plugin-typescript2 к rollup-plugin-esbuild.</li><li>Ускорились тесты за счет перехода с Jest на Vitest.</li><li>Ускорилось создание типов за счет перехода от @microsoft/api-extractor к rollup-plugin-dts.</li><li>Комплексные регрессионные тесты с помощью ecosystem-ci позволяют выявлять регрессии в основных зависимостях перед выпуском.</li></ol><p>В этом посте рассмотрели основные изменения в версии 3.3. Ознакомиться с <a href="https://github.com/vuejs/core/blob/main/CHANGELOG.md#330-2023-05-08">полным списком обновлений можно на GitHub.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Обзор Vue Composition API. Реальность оказалась сложнее</title>
      <link>https://tproger.ru/articles/obzor-vue-composition-api-realnost-okazalas-slozhnee</link>
      <comments>https://tproger.ru/articles/obzor-vue-composition-api-realnost-okazalas-slozhnee?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Калиниченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/obzor-vue-composition-api-realnost-okazalas-slozhnee</guid>
      <description><![CDATA[<p>В рунете немало обзоров, посвященных Composition API. Зачастую авторы восхищены новым инструментом, но у него есть и минусы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/obzor-vue-composition-api-realnost-okazalas-slozhnee">Обзор Vue Composition API. Реальность оказалась сложнее</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 27 Feb 2023 09:34:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>В рунете немало статей, посвященных Composition API. Зачастую авторы с восхищением описывают свой опыт взаимодействия с новым инструментом, уделяя недостаткам и подводным камням в лучшем случае пару-тройку абзацев. Приведу несколько цитат:</p><ul><li>«Composition API – это мощнейшее решение, которое в полной мере разрешает проблемы Options API Vue 2 версии, а также предоставляет расширенные возможности в декларировании и управлении данными в фреймворке. Новый API позволяет облегчить реализацию сложных архитектурных решений в крупных и средних приложениях».</li><li>«Я очень взволнован этим новым API. Он убирает зуд, который у меня был в течение долгого времени, пытаясь применить принципы чистого кода в моих интерфейсных приложениях».</li><li>«Код, написанный с помощью нового API, лучше читается, что делает его более лёгким для понимания».</li><li>«Это, безусловно, самое ожидаемое изменение в Vue3. Оно должно помочь с организацией и возможностью многократного переиспользования кода компонентов».</li></ul><p>Вот оно, новое слово в компонентостроении, решение всех наболевших проблем, сейчас наконец заживём…</p><p>Однако как часто это бывает, реальность оказалась сложнее. Мы активно использовали Composition API более полутора лет в довольно крупном enterprise приложении и мне есть что вам об этом рассказать.</p><h2>Мы точно идем вперед? Или все новое это хорошо забытое старое</h2><p>Зайдём издалека, что вообще такое фреймворки и зачем они нам нужны? Отличный ответ на этот вопрос дал Илья Климов <a href="https://www.youtube.com/watch?v=4xyb_tA-uw0&amp;list=PLvTBThJr861yMBhpKafII3HZLAYujuNWw&amp;index=2">в рамках курса по Vue</a>:</p><p>Фреймворк инструктирует вас, как писать код.</p><p>Если обобщить, фреймворк задаёт формат работы разработчика, формирует правила игры, тем самым ограничивая его свободу, в обмен на автоматизацию.</p><p>До фреймворков разработчику предоставляли значительно больше возможностей влиять на систему. Однако зачастую дополнительная свобода приводила к увеличению проблем, о многих из которых мы в 2022 уже успели позабыть. Отчасти фреймворки появились как ответ на эту огромную неопределённость (<b>= чрезмерную свободу</b>) предыдущих более низкоуровневых решений (JQuery, Backbone, Vanila JS и т.д.). И Vue отлично справлялся с этой задачей, возможно даже лучше, чем конкуренты.</p><p>Чем же так плоха свобода в коде? Прежде всего тем, что ведёт к увеличению проектных знаний, а это, в свою очередь, мешает компании и проекту масштабироваться и развиваться. К примеру, чем больше проектных знаний, тем больше новому разработчику нужно времени на онбординг. Отдельно остро стоит вопрос качества этих знаний — повышается значимость решений отдельного человека, возрастает вероятность ошибок. В данном контексте cвобо­да действий — враг стандартизации и качества.</p><p>И с этой точки зрения Composition API — инструмент, увеличивающий свободу. Это движение против стандартизации, предложенной в Options API. Ниже приведу несколько примеров:</p><p>Код выше соответствует конвенциям и стайлгайду Vue, но, к сожалению, это не защищает нас от проблем: множество скрытых сайдэффектов, вложенность и сильная связность. Попробуем разобраться, что именно довело нас до жизни такой:</p><ul><li>Вложенность composable. Ограничений по вложенности composable нет, в документации также отсутствуют рекомендаций на этот счёт.</li><li>Хуки жизненного цикла компонента доступны всем вложенным composable. Фактически мы обращаемся к данным из другого уровня (из самого верхнего, уровня самого компонента) абстракции, нарушается принцип одного уровня абстракции.</li><li>Работа с внешними данными во вложенных composable.</li></ul><p>А когда это трио собирается вместе, получаем коктейль из сайдэффектов. Но на этом примеры не заканчиваются:</p><p>И вновь вложенность, вновь сложность кода возросла, вновь сайдэффекты цветут и пахнут. Что повлияло в данном случае?</p><ul><li>Вложенные composable.</li><li>SetupContext и возможность пробрасывать его на любую глубину.</li><li>Emit события из вложенной use-функции. Сайдэффект, оказывающий влияние на весь компонентСтоит также добавить, что переиспользование use-функций из примеров выше в других компонентах может привести к кратному увеличению негативных эффектов.</li></ul><p>Стоит также добавить, что переиспользование use-функций из примеров выше в других компонентах может привести к кратному увеличению негативных эффектов.</p><h2>Composition API подталкивает нас к созданию многофункциональных компонентов</h2><p>Многофункциональные компоненты нарушают несколько общепринятых принципов разработки компонентов:</p><ul><li>Single responsibility principle. Чем больше у компонента responsibilities (зон ответственности, функций), тем сложнее им управлять и его расширять. К примеру, если мы решим хранить все данные в одном месте, компонент будет становиться все больше и больше, что впоследствии может привести к потере контроля.</li><li>F.I.R.S.T. Следует стремиться создавать сфокусированные (Focused), независимые (Independent), переиспользуемыме (Reusable), небольшие (Small) и тестируемые (Testable) компоненты или сокращенно FIRST компоненты. Многофункциональные компоненты зачастую большие, не сфокусированные и их трудно тестировать.</li></ul><p>Сравним подходы в аспекте многофункциональных компонентов.</p><p>В Options API разрастающиеся опции намекали разработчику о том, что компонент следует декомпозировать. Чем больше функций выполнял компонент, чем толще становились опции, тем менее комфортно становилось с ним работать. Vue выполнял одну из своих важнейших задач — подталкивал разработчика к соблюдению стандартов (в данном случае к декомпозиции). Для нас проблемы начинались примерно с 500 строк — при достижении этой отметки мы сразу приступали к декомпозиции. Это правило позволило нам строить сложные интерфейсы из относительно небольших и простых компонентов-кирпичиков, каждый из которых имел 1–2 ответственности.</p><p>В Composition API разрастающийся setup намекает разработчику о том, что следует добавить новую use-функцию. То есть подталкивает нас к наделению компонента новыми responsibilities. Сколькими ответственностями можно наделить компонент перед тем, как он превратится в многофункциональный монстер-компонент? Точный ответ дать трудно, но по нашему опыту, сложность и связность компонента значимо возрастают начиная с 3–4 use-функций.</p><p>Пожалуй, стоит подкрепить вышесказанное примером:</p><p>Благодаря разделению кода на use функции, мы близки к тому чтобы заблудиться в трёх соснах! При этом соблюдены <a href="https://vuejs.org/guide/reusability/composables.html#conventions-and-best-practices">все конвенции из документации vue</a>. Скажу даже больше, нам никто не мешает добавить ещё одну фичу (в моей практике встречались компоненты с 5–6 фичами-use функциями), никаких соглашений этот шаг не нарушит. Трудно представить, насколько сильно может усложниться код при дальнейшем расширении компонента.</p><p>Безусловно, существуют кейсы, когда без многофункциональных компонентов не обойтись. В этом случае Composition API справится с упорядочиванием кода значительно лучше, чем Options API. Однако по моей оценке их немного (подробнее ниже), большинство проблем можно решить классической декомпозицией компонента.</p><h2>Component vs composable</h2><p>Как писал выше, Options API подталкивает нас к декомпозиции большого компонента на маленькие, в то время как Composition API предлагает создавать новые use функции.</p><p>Попытаемся сопоставить эти два подхода к декомпозиции. Удобнее будет рассматривать компоненты как абстракции в шаблоне, а use-функции – абстракции в логике. Позволю себе громкое заявление: абстракции в логике строить труднее, чем абстракции в шаблоне.</p><p>Хорошие абстракции строить сложно. Сразу возникает куча вопросов: На основании чего нам строить абстракции? По фичам? По задачам? Или по сущностям? Что есть сущность? Как отделить одну сущность от другой? Как сформировать <a href="https://ru.hexlet.io/courses/compound_data/lessons/barriers-of-abstraction/theory_unit">барьеры абстракции</a>?</p><p>При создании composable разработчику нужно самостоятельно найти ответы на эти вопросы. Для принятия правильных решений необходимы компетенции и серьёзный опыт, которыми обладает далеко не каждый кодер. По сути, необходимы навыки, используемые при построении js-библиотек. Если же их нет, то начинается импровизация (часто с неблагоприятным исходом). Так было и у нас</p><p>C компонентами тоже всё непросто, но есть одна важная подсказка — интерфейсы (как уже готовые, так и в виде макетов). Разработчик может использовать интерфейс как верхнеуровневую схему, базу для своего модуля. Костяк уже сформирован, нам остаётся выделить блоки-компоненты и выстроить между ними взаимодействие.</p><p>Любой разработчик в состоянии на макете отделить один блок от другого, часто удаётся даже прикинуть схему взаимодействия между ними.</p><p>Условно в таблице есть header, есть body, есть строка, несколько типов ячеек и т. д. и дерево компонентов будет строиться похожим образом. Кроме того, интерфейс подталкивает разработчика создавать компоненты, к которым существует визуальный референс.</p><p>К примеру, разработчик вряд ли выдумает новый тип ячейки или решит вдруг таблицу делить не по строкам, а по произвольным группам ячеек. Источник истины в виде интерфейса значительно снижает неопределённость и улучшает восприятие абстракций.</p><p>Конечно, этой подсказкой мы закрываем только часть из вопросов выше, но всё же это значительно лучше, чем ничего.</p><figure><img src="https://media.tproger.ru/uploads/2023/02/d71a8704-bd65-4a2f-982a-c5fa24ac75e3.png" alt="" /></figure><p>Отдельно стоит рассмотреть вопрос взаимодействия между абстракциями.</p><p>Правила взаимодействия между компонентами известны, они ограничены и задокументированы (как хорошие, так и плохие практики), довольно просты и прошли проверку временем. props и emits; слоты; сторы; provide/inject.</p><p>Правила взаимодействия между composable необходимо сформировать самостоятельно, ведь по сути, use-функции — это кастомные абстракции. При создании composable разработчику необходимо ответить на ряд вопросов:</p><ol><li>Можно ли менять стейт одного composable в другом composable? (В компонентах нельзя, для изменения стейта есть props и emits).</li><li>Как быть с вложенными composable? Насколько глубокой может быть вложенность? (Компоненты можно беспрепятственно вкладывать друг в друга и группировать без сильного увеличения сложности).</li><li>Как работать с данными из внешних источников? Какие сайдэффекты в composable допустимы? (Так как работать с сайдэффектами в компонентах приходится часто, то в большинстве проектов уже пришли к консенсусу по этому вопрос).</li><li>Как при добавлении нового composable не слишком сильно увеличить связность и сложность? (Добавить новый компонент в разметку проще. Следуем общим правилам и стараемся не плодить многофункциональные компоненты).</li><li>Какие функции будет брать на себя composable? (Для компонентов есть подсказка в виде интерфейсов) И чем больше use-функций, тем сложнее найти верные ответы.</li></ol><h2>Откуда корни растут?</h2><p>Evan You не скрывает, что при создании Composition API вдохновлялся React хуками. В документации даже есть подраздел <a href="https://vuejs.org/guide/extras/composition-api-faq.html#comparison-with-react-hooks">«Сравнение с React Hooks»</a>. За время существования хуков вышло несколько статей с критикой подхода. Обвиняют в том числе за чрезмерную свободу действий и, как следствие, спагетти-код.</p><h2>Наши правила работы с Composition API</h2><p>Для того чтобы избежать негативных последствий, описанных выше, мы в Yclients придерживаемся нескольких базовых правил работы с Composition API (перечень не является исчерпывающим и может быть расширен под ваш проект):</p><ul><li>Не рекомендуется использовать watch во вложенных use-функциях. Предпочтительнее watch в корне setup функции (чем очевиднее сайдэффекты, тем лучше).</li><li>Не рекомендуется эмитить события из вложенных use-функций. Предпочтительнее эмитить события в корне setup функции.</li><li>Настоятельно не рекомендуется мутировать аргументы use-функции напрямую. Только через сеттеры. readonly и shallowReadonly приветствуются.</li><li>C осторожностью работать с источниками внешних данных в use-функциям. Работу с данными извне рекомендуется вынести в отдельную абстракцию. Лучше всего взаимодействовать с этой абстракцией в корне setup функции (чем очевиднее сайдэффекты, тем лучше).</li><li>С осторожностью использовать хуки жизненного цикла компонента во вложенных use-функциях. Помнить о том, что хуки компонента во вложенных composable — это сайдэффект.</li><li>Не рекомендуется передавать setupContext в use-функции. Если всё же решили пойти на этот шаг, то лучше передавать только ту часть setupContext, которая необходима этой use-функции. Также настоятельно не рекомендуется использовать getCurrentInstance.</li><li>Всё взаимодействие между composable рекомендуется производить в корне setup функции.</li><li>Настоятельно рекомендуется избегать вложенности в composable. Чем меньше вложенность, тем лучше. Предпочитать композицию use-функции вложенности.</li></ul><p>И самое главное: д<b>екомпозиция через компоненты предпочтительнее декомпозиции через composable!</b></p><p>Если не получается решить проблему с помощью декомпозиции компонента, переходим к декомпозиции логики через composable</p><p>Не стоит воспринимать наши соглашения как абсолютную истину. Возможно, часть правил покажутся вам слишком строгими (а некоторые наоборот). Думаю многие из вас захотят расширить список своими конвенциями. Главная цель — поделиться нашим опытом решения проблем, описанных в предыдущих разделах, и предложить точку отсчёта для ваших соглашений.</p><h2>Так ли Composition API необходим?</h2><p>Поделюсь инсайдами с интервью на позицию frontend developer к нам в Yclients. Первая часть собеседования — беседа с кандидатом, целью которой является оценка общего кругозора разработчика. Одним из наиболее популярных топиков является как раз Composition API. Сначала я прошу кандидата поделиться его личным мнением и опытом использования. Чаще всего это восторг и пересказ всё тех же хвалебных статей. В ответ от меня следует вопрос: “Какие главные проблемы предыдущего подхода решает Composition API?”.</p><p>Большинство кандидаты в этот момент немного теряются.</p><p>Не стану вас томить и сразу перейду к ответу, который дал <a href="https://github.com/vuejs/rfcs/issues/55#issuecomment-504875870">Evan You</a> в <a href="https://github.com/vuejs/rfcs/issues/55#issuecomment-504875870">одном из обсуждений на GitHib</a>:</p><ul><li>Большие компоненты (длиной в сотни строк) инкапсулирующие несколько логических задач.</li><li>Потребность в переиспользовании логики между несколькими компонентами.</li></ul><p>И я с ним полностью согласен, в этих аспектах Composition API действительно показывает себя с лучшей стороны. А теперь зададимся вопросом, как часто мы сталкиваемся с проблемами выше? В нашей кодовой базе под эти критерии подходят лишь 10–15% от всех компонентов, что также соответствует опыту <a href="https://vuejsdevelopers.com/2020/02/17/vue-composition-api-when-to-use/">Anthony Gore</a>:</p><p>«Я просмотрел Vue 2 приложения, над которыми работал ранее (в основном небольшие), и обнаружил, что лишь 10–20% компонентов являлись многофункциональными или использовали миксины и могли бы выиграть от Composition API».</p><p>Стоит ли ради 10–20% кодовой базы переходить на новый подход? Не приведёт ли этот переход к ухудшению качества кода и усложнению логики (как это произошло в нашем случае)?</p><h2>Итоги</h2><p>Использовать Composition API можно и даже в некоторых случаях нужно, однако стоит помнить, что этот подход значительно более требователен к разработчику, нежели Options API. В неумелых руках этот инструмент способен принести больше вреда, чем пользы. Для снижения негативных последствий рекомендуется сформировать правила работы с Composition API. Кроме того, проблемы, для решения которых создавался Composition API, встречаются не так часто, как может показаться на первый взгляд.</p><p>И не бойтесь использовать Options API, <a href="https://vuejs.org/guide/extras/composition-api-faq.html#will-options-api-be-deprecated">он живее всех живых</a>:</p><p>–  Станет ли Options API deprecated?</p><p>–  Нет, мы не планируем этого делать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сравнение React и Vue: что общего и в чём разница по версии ChatGPT</title>
      <link>https://tproger.ru/articles/sravnenie-react-i-vue-chto-obshhego-i-v-chjom-raznica</link>
      <comments>https://tproger.ru/articles/sravnenie-react-i-vue-chto-obshhego-i-v-chjom-raznica?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/sravnenie-react-i-vue-chto-obshhego-i-v-chjom-raznica</guid>
      <description><![CDATA[<p>Сейчас на hh.ru открыты 4600 вакансий для разработчиков на React и Vue.js. Разбираемся, в чём разница между двумя популярными фреймворками.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/sravnenie-react-i-vue-chto-obshhego-i-v-chjom-raznica">Сравнение React и Vue: что общего и в чём разница по версии ChatGPT</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Jan 2023 11:50:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>На момент публикации на hh.ru опубликовано 3000 вакансий для React-разработчиков и 1600 вакансий для разработчиков на Vue.js.</p><p>Разбираемся, в чём же разница между двумя популярными фреймворками и что у них общего.</p><p>Примечание Статья написана нейросетью ChatGPT от OpenAI.</p><ol><li><a href="https://tproger.ru/#part1">Что такое React и Vue</a></li><li><a href="https://tproger.ru/#part2">Что общего между React и Vue</a></li><li><a href="https://tproger.ru/#part3">Какие отличительные черты у React</a></li><li><a href="https://tproger.ru/#part4">Какие отличительные черты у Vue</a></li><li><a href="https://tproger.ru/#part5">Сравнение React и Vue</a></li></ol><h2>Что такое React и Vue</h2><p>React и Vue — это JavaScript-фреймворки, которые используются для разработки веб-приложений.</p><p>React, разработанный Facebook, используется для создания компонентно-ориентированных приложений. Vue, написанный Эваном Яо, используется для создания простых и гибких приложений.</p><p>Оба фреймворка имеют активно развивающуюся сообщество и широко используются в промышленной разработке.</p><h2>Что общего между React и Vue</h2><ul><li>Они оба имеют компонентно-ориентированный подход, который позволяет разбивать приложение на меньшие, легко повторно используемые и тестируемые части.</li><li>Используют реактивную модель, которая автоматически обновляет представление при изменении данных модели.</li><li>Используют шаблоны в виде HTML-синтаксиса, что позволяет разработчикам легко визуализировать компоненты и более наглядно видеть их структуру.</li><li>Имеют активно развивающуюся сообщество и широко используются в промышленной разработке.</li></ul><h2>Какие отличительные черты у React</h2><p>React имеет следующие отличительные черты:</p><ol><li>Компонентно-ориентированный: React ориентирован на создание компонентов, которые можно легко повторно использовать и составлять в более сложные компоненты.</li><li>Реактивность: React использует реактивную модель, которая автоматически обновляет представление при изменении данных модели.</li><li>Высокая производительность: React использует алгоритм Virtual DOM, который минимизирует количество изменений, которые нужно внести в реальное DOM, что повышает производительность приложения.</li><li>Состояние: React использует концепцию состояния, которая позволяет хранить данные, которые изменяются в приложении, в одном месте и управлять ими через специальный механизм.</li><li>JSX: React использует JSX, который позволяет написать компоненты в HTML-подобном синтаксисе, вместо использования чистого JavaScript. Это позволяет разработчикам легче визуализировать компоненты и более наглядно видеть их структуру.</li></ol><p>Если вы решили обучиться React, используйте нашу <a href="https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta/">дорожную карту</a>.</p><h2>Какие отличительные черты у Vue</h2><p>Vue имеет следующие отличительные черты:</p><ol><li>Легкость изучения: Vue имеет простой и интуитивно понятный API, который быстро может быть изучен новичками.</li><li>Реактивность: Как и React, Vue также использует реактивную модель, которая автоматически обновляет представление при изменении данных модели.</li><li>Компонентная система: Vue имеет систему компонентов, которая позволяет разбивать приложение на меньшие, легко повторно используемые и тестируемые части.</li><li>Шаблоны: Vue использует шаблоны в виде HTML-синтаксиса, что позволяет разработчикам легко визуализировать компоненты и более наглядно видеть их структуру.</li><li>Плагины и расширения: Vue имеет богатую экосистему плагинов и расширений, которые можно использовать для расширения функциональности приложения и упрощения разработки.</li><li>Простота интеграции: Vue может использоваться как для создания полноценных приложений, так и для интеграции с существующими проектами, благодаря тому, что он может использоваться как на стороне клиента, так и на стороне сервера.</li></ol><p>Подробнее об отличительных чертах Vue можно прочитать <a href="https://tproger.ru/articles/kak-pravilno-vybrat-tehnologicheskij-stek-dlja-svoego-proekta/">здесь</a>.</p><h2>Сравнение React и Vue</h2><p>Хотя React и Vue имеют много общего между собой, их есть некоторые ключевые различия.</p><ol><li>Архитектура: React имеет более модульную архитектуру, где компоненты и состояние являются отдельными сущностями, в то время как Vue имеет более интегрированную архитектуру, где компоненты и состояние являются более связанными.</li><li>Возможности: React имеет более расширенные возможности для разработки более сложных и масштабируемых приложений, но Vue имеет более простой и интуитивно понятный API, что делает его более подходящим для новичков и менее сложных проектов.</li><li>Экосистема: React имеет более мощную и масштабную экосистему, с множеством инструментов и библиотек, которые могут быть использованы для разработки, в то время как Vue имеет более маленькую экосистему, но она более интегрирована и легко настраиваема.</li><li>Использование: React широко используется для разработки крупных и масштабных приложений, таких как веб-порталы и платформы, а Vue широко используется для создания менее сложных интерактивных веб-приложений, таких как корпоративные сайты и интерактивные веб-сайты.</li><li>Комьюнити: React разрабатывается и поддерживается компанией Facebook, имеет более крупное сообщество разработчиков и имеет более много инструментов и библиотек, которые могут быть использованы для разработки. Vue же разрабатывается и поддерживается сообществом.</li></ol>]]></content:encoded>
    </item>
  </channel>
</rss>