nodejs express проблема производительности API - PullRequest
0 голосов
/ 16 апреля 2020

Я сделал Api с express и некоторыми вещами из базы данных.

  • Мой маршрутизатор динамически создается из отдельных файлов, а затем импортируется и используется в express

При первом запуске с первым запросом к API (не имеет значения какая конечная точка), пробег всегда длинный, можно получить до 10 секунд. Я предполагаю, что это потому, что он генерирует роутер на первом запуске? Есть ли способ загрузить его полностью сразу?

После нескольких других запросов к API, это намного быстрее. около 100-200мс. Но если я оставлю это неиспользованным и использую это снова после менуэта или двух, это снова медленно. Я думал, что это запросы к базе данных, но у меня есть несколько действительно простых и быстрых. Используя knex, я могу рассчитать время ожидания, и это кажется достаточно быстрым. Также я не создаю консольные журналы, так как знаю, что это тоже может замедлить.

Кроме того, я на самом деле использую сервер http узла, а затем использую express внутри него. Это все из-за этой структуры? или проблема может быть где-то еще?

мой главный сервер. js

import app from './createExpressApp'

const server = require('http').createServer()
server.on('request', app)

...

мой createExpressApp. js

import router from './app/routes/'

...

app.use('/api/v1',router)
.set('etag', false) //disable caching
.use((req, res, next) => {
    // disable caching
    res.set('Cache-Control', 'no-store, no-cache, must-revalidate, private')
    next()
  })

...

и мой индекс маршрутизатора. js

import { sync } from 'glob'
import { Router } from 'express'


var router = sync('**/*.js', { cwd: `${__dirname}/` })
  .map((filename) => require(`./${filename}`).default)
  .filter((router) => Object.getPrototypeOf(router) === Router)
  .reduce(
    (rootRouter, router) =>
      rootRouter.use(router),
    Router({ mergeParams: true })
  )
export default router

...