UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【JavaScript】Promiseを返す関数の同時実行を制御する

Cloudinaryにアップロードしている画像がキャッシュされていないことがわかった

これによりLCPが低い原因になっている

そこで、リクエストを事前にしてキャッシュさせるキャッシュウォームアップを行いたい

キャッシュウォーマー(クローラー)をJavaScriptで作ることを考えたときに、送りすぎて攻撃とみなされないように同時に実行するリクエスト数を制御する必要がある

そこで、p-limitライブラリを導入する

github.com

使い方

const pLimit = require('p-limit');

const limit = pLimit(3);

const input = [
    limit(() => fetchSomething('foo')),
    limit(() => fetchSomething('bar')),
    limit(() => doSomething())
];

(async () => {
    // Only one promise is run at once
    const result = await Promise.all(input);
    console.log(result);
})();

これでpLimit(3)で同時実行を3つに制限しつつする実行するようにできる