Next.js自定义HTTPS服务器加载缓慢问题求助
问题分析与解决方案
核心问题:自定义服务器未正确使用生产构建产物
从你的运行日志能看到,服务器启动后仍在实时编译页面(wait - compiling...),这说明Next.js正处于开发模式而非生产模式——开发模式会实时编译代码,这是生产环境页面加载缓慢的主要原因。
解决步骤:
强制启用生产环境模式
你的代码通过process.env.NODE_ENV !== 'production'判断运行模式,但启动服务器时可能未设置该环境变量。修改启动命令为:NODE_ENV=production sudo node server也可以在服务器全局配置中固定
NODE_ENV=production(比如写入/etc/profile或服务配置文件),避免每次手动设置。验证构建产物有效性
执行next build后,项目根目录会生成.next文件夹,生产模式下Next.js会直接读取该文件夹的预编译产物,启动时不会出现compiling类日志。如果仍有编译日志,检查:.next文件夹是否存在且完整- 运行
node server的终端是否处于项目根目录(确保程序能读取到.next)
硬件限制排查
如果确认已处于生产模式但加载仍慢,再排查DigitalOcean VPS的硬件资源:
- 用
htop命令查看CPU、内存使用率,高峰时段若CPU跑满或内存不足(比如基础款512MB内存),会导致页面渲染卡顿。 - 若硬件资源不足,可升级VPS配置(建议1GB内存起步),或优化页面SSR逻辑(减少服务器端计算量)。
其他优化建议
改用Nginx反向代理处理HTTPS
原生https.createServer仅支持HTTP/1.1,HTTP/2能大幅提升加载速度。建议用Nginx配置SSL证书并启用HTTP/2,反向代理到Next.js的本地HTTP服务器:- 让Next.js服务器监听本地端口(比如3000),移除自定义HTTPS逻辑
- Nginx配置转发规则,将外部HTTPS请求转发到3000端口
配置静态资源缓存
对Next.js生成的静态资源(.next/static目录下的文件)设置长期缓存头,减少重复请求。可在自定义服务器中添加逻辑:// 在handle(req, res)前添加 if (req.url.startsWith('/_next/static/')) { res.setHeader('Cache-Control', 'public, max-age=31536000, immutable'); }优化页面资源
- 使用Next.js的
Image组件自动压缩、懒加载图片 - 移除不必要的第三方脚本,或延迟加载非核心脚本
- 确认SWC压缩在生产模式下正常生效(你的日志已显示启用)
- 使用Next.js的
内容的提问来源于stack exchange,提问作者joeymalvinni
相关产品推荐
相关产品推荐

