6

我们在 Docker 中运行 Next.js。

在本地构建映像并使用生产后端时,TTFB 几乎为零,但是当我们部署此映像时,在某些情况下,TTFB 可以达到 30 秒。

生产服务器是不需要启动的暖服务器。

我进行了四次测试,以针对具有相同生产后端的相同路线测量 TTFB。

  1. 使用 docker 在本地处于生产模式
  2. 在本地以生产模式使用yarn build && yarn start
  3. 在本地以开发模式使用yarn run dev
  4. 生产中

在 docker 内外测试生产模式时,TTFB 接近于零。

在开发模式下进行本地测试时,TTFB 几乎与生产模式相同。

我已经 SSH 进入生产环境并确认没有安装开发包,所以我认为我们不可能在开发模式下运行。

我希望生产 TTFB 更接近我们在当地的体验。

什么可能导致本地和生产之间的差异?

Dockerfile

FROM node:10.13.0-alpine

WORKDIR /app

EXPOSE 8080

CMD [ "yarn", "start" ]

COPY . .

RUN yarn install

RUN yarn build

server.js 片段

const express = require('express');
const next = require('next');
const cookieParser = require('cookie-parser');
const jwtDecode = require('jwt-decode');
const { join } = require('path');
const admin = require('firebase-admin');

// serviceAccount used for local development
// https://firebase.google.com/docs/admin/setup
const path = require('path');
const { fetchNewToken } = require('./src/services/Firebase');

let serviceAccount;
const dev = process.env.NODE_ENV !== 'production';
if (dev) {
  serviceAccount = require('./credentials/serviceAccountKey.json')
}
admin.initializeApp({
  credential: dev ? admin.credential.cert(serviceAccount) : admin.credential.applicationDefault(),
});

const app = next({ dev });

package.json 片段

  "scripts": {
    "start": "NODE_ENV=production node server.js",
    "build": "next build",
    "dev": "NODE_ENV=development node server.js",
  },
4

0 回答 0