мы запускаем Next.js в Docker.
При локальном построении образа и использовании производственной серверной части TTFB практически равен нулю, но при развертывании этого образа в некоторых случаях TTFB может достигать 30 секунд.
Производственные серверы - это горячие серверы, которые не нужно раскручивать.
Я провел четыре теста для измерения TTFB по одному и тому же маршруту с тем же рабочим бэкэндом.
- Локально в производственном режиме с докером
- Локально в производственном режиме с
yarn build && yarn start
- Локально в режиме разработки с
yarn run dev
- На производстве
При тестировании производственного режима как в докере, так и вне его 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",
},