PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Релиз NextJS 11

    Релиз NextJS 11

    Аватар автора Релиз NextJS 11

    Антон Ларичев

    Иконка календаря30 сентября 2022

    Недавно состоялся релиз NextJS 11, поэтому давайте рассмотрим как положительные, так и отрицательные стороны этого релиза. Вначале скажу, что NextJS на текущий момент уже стал стандартом разработки сайтов, для которых необходим Server Side Rendering и статичная генерация страниц, опережая Gatsby.

    Несмотря на зрелость фреймворка, точки роста ещё есть, что и показал это релиз. Что добавили:

    • Поддержка eslint из коробки
    • Улучшение производительности
    • Новый компонент Script
    • Улучшение компонента Image
    • Дефолтный webpack 5
    • Пару дополнительных фич

    Поддержка eslint

    С одной стороны это никогда не было проблемой подключить и настроить под себя eslint, с другой стороны те, кто это обычно этого не делают, получают линтинг из коробки. Это хорошо, так как позволяет быстрее разворачивать новые проекты. Но в реальности, когда тебе нужен новый сайт на NextJS быстрее оказывается скопировать предыдущий проект, удалить ненужное и обновить зависимости.

    Ведь когда ты разворачиваешь с нуля, тебе нужно:

    • Настроить TypeScript.
    • Настроить _app и метрики.
    • Сделать свой _document для корректного указания языка документа.
    • Удалить ненужное из стартового проекта.
    • Настроить подключение svg как компонентов.
    • И так далее...

    Потому я надеюсь что eslint будет первым шагом к правильному стартовому шаблону, где тебя не нужно будет сразу все править руками.

    Улучшение производительности

    Это изменение несомненно полезное. Заявленные 40% прироста скорости в режиме dev, действительно ощущаются, особенно при работе с большими страницами. А если сравнить с NextJS 7 с которого я начал знакомство с ним - сейчас это реально удобный в работе фреймворк.

    Новый компонент Script

    Благодаря новому компоненту:

    <Script
      src="https://other.domain/my.js"
      strategy="beforeInteractive"
    /> 
    

    мы получим возможность управлять тем, в каком приоритете скрипты будут загружены. Это позволит вам оптимизировать время загрузки страниц, отложив на потом ненужные тяжелые скрипты. Мы можем передать один из 3х стратегий в свойство strategy:

    • beforeInteractive если скрипт вам нужно загрузить и исполнить перед тем, как страница становится интерактивной. Они будут в исходном HTML, который прилетит на клиент и исполнятся до вашего JS. Использовать надо осторожно, так как они будут увеличивать скорость загрузки.
    • afterInteractive будет выполняться как только страница станет интерактивной. Подходит для Яндекс метрики и прочих счетчиков. Это дефолтное поведение, если стратегия не указана.
    • lazyOnLoad как только Next нечего будет делать после отработки всех скриптов по стратегиям выше он будет получать и исполнять скрипты с этой стратегией. Чаты, звонилки, выстреливающие в лицо окна при уходе переходят сюда.

    Так же мы теперь можем подписаться на загрузку скрипта и выполнить функцию, переданную в props onLoad.

    Важно: теперь дефолтный способ загрузки скриптов defer, а не async, так что если есть у вас на сайте скрипты, которым важно оставить старое поведение, используйте Script со стратегией beforeInteractive.

    Улучшение компонента Image

    С одной стороны они действительно упростили работу:

    • Больше не нужно задавать размеры для локальных изображений, NextJS определит их автоматически.
    • Можно добавить для локальных изображений placeholder, который возводит показать легковесный blur исходного изображения, пока основная картинка не загрузилась.
    • Для не локальных изображений можно указать data:image в качестве placeholder.

    Это сразу даёт из коробки правильную работу с картинками. С другой - не сделали внятную работу с SVG, как компонентами и сломали их типизацию.

    Если посмотреть на их новые типы в next-env.d.ts:

    declare module '*.svg' {
      /**
       * Use `any` to avoid conflicts with
       * `@svgr/webpack` plugin or
       * `babel-plugin-inline-react-svg` plugin.
       */
      const content: any
    
      export default content
    }
    

    Всё. Все ваши svg - просто any. Чтобы переопределить это поведение, вам нужно выкинуть из типов изображения svg и написать своё:

    declare module "*.svg" {
        const content: React.FunctionComponent<React.SVGAttributes<SVGAElement>>;
        export default content;
    }
    

    Поэтому или вы живете с any для svg или ломаете типы внутри NextJS, что может плохо сказаться на обновлениях. Как добавить типизацию.

    В tsconfig.json

    "include": [
            "next-env-custom.d.ts",
            "images.d.ts",
            "**/*.ts",
            "**/*.tsx"
    ],
    

    Где next-env-custom.d.ts это обрезанная версия типов next:

    /// <reference types="next" />
    /// <reference types="next/types/global" />
    

    А в images.d.ts - доработанные типы с svg, описанные выше.

    Дефолтный webpack 5

    Тут одни плюсы, но надо мигрировать, если у вас модифицированный конфиг, например с SVG.

    Webpack 4

    module.exports = {
        webpack(config) {
            config.module.rules.push({
                test: /\.svg$/,
                issuer: {
                    test: /\.(js|ts)x?$/,
                },
                use: ['@svgr/webpack'],
            });
    
            return config;
        },
    };
    

    Webpack 5

    module.exports = {
        webpack(config, options) {
            config.module.rules.push({
                loader: '@svgr/webpack',
                options: {
                    prettier: false,
                    svgo: true,
                    svgoConfig: {
                        plugins: [{ removeViewBox: false }],
                    },
                    titleProp: true,
                },
                test: /\.svg$/,
            });
            return config;
        },
    };
    

    Пару дополнительных фич

    Тут детально останавливаться не буду, так как сам не тестировал:

    • Миграция Create React App на NextJS с помощью @next/codemod.
    • Next.js Live - совместная работа над проектом Next, если вы используете Vecel, как вашего хостера. Понятная фича для продажи хостинга от Vercel. В дальнейшем они обещают перевести его в open source.

    Итог

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

    Иконка глаза2 146

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее

    Похожие статьи

    Картинка поста Управление распределенной системой на Framework Foton
    Иконка аватараКонстантин
    Иконка календаря19 октября 2026
    распределенная системаframework FotonseniorИконка уровня senior

    Управление распределенной системой на Framework Foton

    Создание своего типа запроса на Framework Foton для формирования и управления распределенной системой

    Иконка чипа0
    Иконка глаза17
    Иконка комментариев0
    Картинка поста Сколько стоит Claude Code в 2026: расход в день и в месяц
    Иконка аватараАнтон
    Иконка календаря19 октября 2026
    Claude CodeAnthropicAI-инструментыjuniorИконка уровня junior

    Сколько стоит Claude Code в 2026: расход в день и в месяц

    По данным Anthropic, в компаниях Claude Code в среднем обходится примерно в $13 на разработчика за рабочий день и в $150–250 за месяц по ценам API, а у 90% пользователей расход не превышает $30 в день. У одиночного разработчика день обычно выходит дешевле, но точная сумма зависит от трёх вещей: какая модель стоит по умолчанию, сколько контекста агент таскает за собой и сколько дней в месяц вы с ним работаете. Ниже — из чего складывается счёт, как прикинуть свой расход по прайсу, как посмотреть фактический и как пользоваться Claude Code из России с оплатой в рублях через AI для кода от PurpleSchool.

    Иконка чипа0
    Иконка глаза76
    Иконка комментариев0
    Картинка поста Как войти в Codex из России: ChatGPT или API-ключ
    Иконка аватараАнтон
    Иконка календаря18 октября 2026
    AI-инструментыapiразработкаjuniorИконка уровня junior

    Как войти в Codex из России: ChatGPT или API-ключ

    В Codex есть два штатных способа входа: через аккаунт ChatGPT (`codex login`) и по API-ключу OpenAI (`codex login --with-api-key`). Из России оба закрыты: OpenAI не поддерживает Россию, регистрация из неподдерживаемой страны отклоняется, а ключ API нужно оплачивать зарубежной картой. Но входить в Codex не обязательно. Если указать в `~/.codex/config.toml` свой модельный провайдер с ключом из переменной окружения, Codex работает без аккаунта OpenAI вообще. Такой ключ с оплатой в рублях даёт AI для кода от PurpleSchool.

    Иконка чипа0
    Иконка глаза184
    Иконка комментариев0
    Иконка чипа0