Weird Next.js TTFB выпуск - PullRequest
       49

Weird Next.js TTFB выпуск

0 голосов
/ 04 декабря 2018

мы запускаем Next.js в Docker.

При локальном построении образа и использовании производственной серверной части TTFB практически равен нулю, но при развертывании этого образа в некоторых случаях TTFB может достигать 30 секунд.

Производственные серверы - это горячие серверы, которые не нужно раскручивать.

Я провел четыре теста для измерения TTFB по одному и тому же маршруту с тем же рабочим бэкэндом.

  1. Локально в производственном режиме с докером
  2. Локально в производственном режиме с yarn build && yarn start
  3. Локально в режиме разработки с yarn run dev
  4. На производстве

При тестировании производственного режима как в докере, так и вне его 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",
  },
...