API 在 SvelteKit(Pusher、Vercel)中表现缓慢

问题描述 投票:0回答:1

这里指的API就是Pusher。 (您不需要了解有关 Pusher 的任何信息。)
以下是加载 Pusher 的方法:

const pusher = new Pusher({
    appId: [id],
    key: [key],
    secret: [secret],
    cluster: "ap3",
    useTLS: true
});

由于这需要密钥,出于安全目的,我从

+server.ts
加载它。

// server.ts

import type { RequestHandler } from "./$types";
import Pusher from 'pusher';


export const POST:RequestHandler = async ({ request }) => {
    const pusher = new Pusher({
        appId: [id],
        key: [key],
        secret: [secret],
        cluster: "ap3",
        useTLS: true
    });

    const req = await request.json();
    const res = await pusher.trigger("chat", "message", req);

    return new Response((JSON.stringify({"result": res})), {
        headers:{
            'Content-Type': 'application/json'
        }
    })
}

使用此代码将在每次 POST 到服务器时重新加载 Pusher。
然而,考虑到 Pusher 是一个用于构建实时的 API,这非常慢。 每次通话大约耗时 1 秒。

使用“npm run dev”运行时可以立即运行,但只有使用 Vercel 部署时才这么慢。
我认为这个问题是由打开服务器所需的时间引起的,因为 Vercel 在不使用服务器时将其关闭。

如果预加载 Pusher,然后直接在

pusher.trigger
中使用
+page.svelte
,不是会更快吗?但密钥还是不能泄露。

有没有办法只加载一次 API,而不是每次调用服务器时加载?

serverless vercel sveltekit pusher
1个回答
0
投票

确保您的功能区域与您的 DB/API 服务器所在的位置相同。 (这是在 vercel 项目的设置中。)

我之前有 1-2 秒,但现在平均为 150 毫秒(比我的本地开发更快、更一致) 我的问题是我的 supabase 区域是新加坡,但我的 vercel 功能区域默认是美国

© www.soinside.com 2019 - 2024. All rights reserved.