我很难理解为什么在医生里 --据说有一个自定义服务器会禁用https://nextjs.org/docs/advanced-features/automatic-static-optimization。
在决定使用自定义服务器之前,请记住,只有当Next.js的集成路由器不能满足您的应用要求时,才应该使用它。自定义服务器将删除重要的性能优化,如无服务器功能和自动静态优化。
我的理解是,由于它,在构建阶段 (next build
)期间将自动生成一个HTML (对于符合条件的页面),然后在以后的请求中提供该文件。
我试过的
getServerSideProps
或getInitialProps
的静态页面,应该在构建阶段进行预呈现。console.log()
,以了解组件何时呈现:也就是说,如果它在每个请求的服务器上呈现,或者仅在客户端上呈现。静态页面组件代码:
export default function Static() {
console.log("The static page component is being rendered.")
return <div>Hello from static page!</div>
}
自定义服务器代码:
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服务的,因此使用了自动静态优化。
问题
next build
期间运行),在我的测试中,它是如何工作的:生成HTML文件并为该静态页面路由的所有请求提供服务?next build
步骤中已经生成的文件并像内置服务器那样为它们提供服务呢?谢谢!
发布于 2022-04-24 21:33:58
您是正确的,静态自动优化在让nextjs处理请求时确实与自定义服务器一起工作。警告可能是指当您实际使用自定义服务器处理页面请求时,而不是仅仅将它们传递给nextjs。
以下是一段引语来自next.js的合著者:
总之,我们建议不要添加自定义服务器,不要让您使用Vercel,而是要确保我们可以从端到端优化整个堆栈。自动静态优化总是存在的,但是如果您使用的是自定义服务器,就会有一些缺点,比如不能重新映射路由,这可能会导致应用程序中的错误,因此我们不推荐它。
https://stackoverflow.com/questions/71987976
复制相似问题