首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Next.js自定义服务器禁用自动静态优化?

为什么Next.js自定义服务器禁用自动静态优化?
EN

Stack Overflow用户
提问于 2022-04-24 11:32:46
回答 1查看 948关注 0票数 3

我很难理解为什么在医生里 --据说有一个自定义服务器会禁用https://nextjs.org/docs/advanced-features/automatic-static-optimization

在决定使用自定义服务器之前,请记住,只有当Next.js的集成路由器不能满足您的应用要求时,才应该使用它。自定义服务器将删除重要的性能优化,如无服务器功能和自动静态优化

我的理解是,由于它,在构建阶段 (next build)期间将自动生成一个HTML (对于符合条件的页面),然后在以后的请求中提供该文件。

我试过的

  • 由于自动静态优化,我已经创建了一个没有getServerSidePropsgetInitialProps的静态页面,应该在构建阶段进行预呈现。
  • 我向functional组件添加了一个console.log(),以了解组件何时呈现:也就是说,如果它在每个请求的服务器上呈现,或者仅在客户端上呈现。

静态页面组件代码:

代码语言:javascript
运行
复制
export default function Static() {
  console.log("The static page component is being rendered.")

  return <div>Hello from static page!</div>
}
  • 我已经创建了一个自定义服务器,允许所有请求都由nextjs处理程序处理。

自定义服务器代码:

代码语言:javascript
运行
复制
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  const server = express()

  server.all('*', (req, res) => {
    return handle(req, res)
  })
})
  • 测试了使用内置服务器next start和我上面提到的自定义服务器服务该应用程序。

结果

在运行next build之后,在这两种情况下,都会为静态页面生成相应的HTML文件。当访问静态页面路由时,在这两种情况下,记录的消息只出现在浏览器的控制台中,而不出现在节点的控制台中。当通过curl请求静态路由并分析响应时,我可以看到<div>Hello from static page!</div>的存在。由此,我推断出它实际上是为预先呈现的HTML服务的,因此使用了自动静态优化。

问题

  1. docs指出,自定义服务器将禁用自动静态优化(据我理解,在构建步骤next build期间运行),在我的测试中,它是如何工作的:生成HTML文件并为该静态页面路由的所有请求提供服务?
  2. 如果自定义服务器真的禁用了自动静态优化,那么是什么阻止自定义服务器中的nextjs处理程序使用next build步骤中已经生成的文件并像内置服务器那样为它们提供服务呢?
  3. 我是否误解了自动静态优化到底在做什么?还是别的什么?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-04-24 21:33:58

您是正确的,静态自动优化在让nextjs处理请求时确实与自定义服务器一起工作。警告可能是指当您实际使用自定义服务器处理页面请求时,而不是仅仅将它们传递给nextjs。

以下是一段引语来自next.js的合著者:

总之,我们建议不要添加自定义服务器,不要让您使用Vercel,而是要确保我们可以从端到端优化整个堆栈。自动静态优化总是存在的,但是如果您使用的是自定义服务器,就会有一些缺点,比如不能重新映射路由,这可能会导致应用程序中的错误,因此我们不推荐它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71987976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档