Облачные функции Firebase http + Typescript asyn c import + Express. js для максимальной производительности при холодном запуске - PullRequest
0 голосов
/ 06 августа 2020

Я использую в своем проекте http-функции firebase, и они работают абсолютно хорошо. Когда я попытался повысить производительность, я наткнулся на статью г-на @DougStevenson в среднем на об улучшении производительности холодного запуска за счет лучшей организации облачных функций и использования машинописных скриптов asyn c импорта исходного файла .

Обычный способ написания http-вызовов с использованием express js

const app = express();
app.use(cors({origin: true}));
app.use(express.json());
app.post('/placeOrder',  async (request: any, response: any) => {
    //something
});

//export this constant in index.ts
export const order = functions
    .region('asia-east2')
    .https
    .onRequest(app);

Предложение @DougStevenson по улучшению производительности холодного запуска

Index.ts

export const httpFn = functions.https.onRequest(async (request, response) => {
    await (await import('./fn/httpFn')).myFun(request, response)
})

Исходный файл

import * as functions from 'firebase-functions'

import * as admin from 'firebase-admin'
admin.initializeApp()

export const myFun = async ( request: functions.https.Request
, response: functions.Response): Promise<void> => {

    const snapshot = await getDocument()
    const data = snapshot.data()
    response.send(data)
}

Оба работают абсолютно хорошо. Но когда я попытался использовать тот же подход с Express. js, используя http post и get call, асинхронно загрузив исходный файл, я не смог это сделать, и я не могу найти похожие примеры в моем поиске.

Я пробовал

Index.ts

export const userOrder = functions.https.onRequest(async (request, response) => {
    await (await import('./order')).default(request, response)
});

order.ts

const express = require('express');

const app = express();
app.use(express.json());

app.get('/getOrder', async (request: any, response: any) => {
    response.status(200).send('It works!');
});
app.post('/createOrder', async (req: any, res: any) => {
    //something
});

export default app;

Но этот не работает, и я хотел бы чтобы узнать, как использовать импорт asyn c в Typescript для развертывания express js конечных точек в облачных функциях.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...