Автоматическая статическая оптимизация
Next.js автоматически определяет, что страница является статической (может быть предварительно рендерирована), если у неё нет блокирующих требований к данным. Это определение основано на отсутствии getServerSideProps и getInitialProps на странице.
Эта функция позволяет Next.js генерировать гибридные приложения, содержащие как страницы, рендер которых выполняется на сервере, так и статически сгенерированные страницы.
Статически сгенерированные страницы всё ещё интерактивны: Next.js будет выполнять гидрацию вашего приложения на стороне клиента, чтобы обеспечить полную интерактивность.
Одним из основных преимуществ этой функции является то, что оптимизированные страницы не требуют вычислений на стороне сервера и могут мгновенно транслироваться конечному пользователю с нескольких расположений CDN. В результате пользователи получают чрезвычайно быстрое время загрузки.
Как это работает
Если getServerSideProps или getInitialProps присутствуют на странице, Next.js переключится на рендер страницы по запросу (что означает рендер на стороне сервера).
Если это не так, Next.js автоматически оптимизирует вашу страницу статически, предварительно рендерив её в статический HTML.
Во время предварительной рендеризации объект маршрутизатора query будет пустым, так как у нас нет информации query для предоставления на этом этапе. После гидрации Next.js запустит обновление вашего приложения, чтобы предоставить параметры маршрута в объекте query.
Случаи, когда запрос будет обновлён после гидрации, вызвав другой рендер:
- Страница является динамическим маршрутом.
- Страница имеет значения запроса в URL.
- Перенаправления настроены в вашем
next.config.jsтак как они могут иметь параметры, которые необходимо разобрать и предоставить вquery.
Чтобы определить, полностью ли обновлён запрос и готов к использованию, можно использовать поле isReady в next/router.
Важно знать: Параметры, добавленные с помощью динамических маршрутов на страницу, использующую
getStaticProps, всегда будут доступны внутри объектаquery.
next build будет генерировать файлы .html для статически оптимизированных страниц. Например, результатом для страницы pages/about.js будет:
.next/server/pages/about.html
И если вы добавите getServerSideProps на страницу, она будет JavaScript, как это:
.next/server/pages/about.js
Ограничения
- Если у вас есть настраиваемое
AppсgetInitialProps, эта оптимизация будет отключена на страницах без статической генерации. - Если у вас есть настраиваемый
DocumentсgetInitialProps, убедитесь, что вы проверили, определён лиctx.req, прежде чем предполагать, что страница рендерится на сервере.ctx.reqбудетundefinedдля страниц, которые предварительно рендерились. - Избегайте использования значения
asPathвnext/routerв дереве рендеринга до тех пор, пока поле маршрутизатораisReadyне будетtrue. Статически оптимизированные страницы знаютasPathтолько на клиенте, а не на сервере, поэтому использование его в качестве свойства может привести к ошибкам несовпадения. Примерactive-class-nameдемонстрирует один способ использованияasPathв качестве свойства.
© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/pages/building-your-application/rendering/automatic-static-optimization