# #node.js #google-cloud-storage #firebase-storage
Вопрос:
Я пытаюсь проверить наличие списка файлов в хранилище Firebase. Количество файлов может быть от 1 до N (N может вырасти до 1000/10000 секунд).
У меня есть Promise.all
код, выполняющий все обещания, подобные этому:
const filePaths = [// 10000 of paths here];
const checkExistence = async (path) => bucket.file(path).exists();
const fileStatuses = await Promise.all(filePaths.map(checkExistence);
Я отметил, что чем дольше filePaths
это происходит, тем больше времени Promise.all
требуется для решения.
Я наивно предполагал, что это разрешится за самое долгое время вызова, но это не так. Я думал, что что-то связано со слишком большим количеством одновременных вызовов, поэтому я попробовал пакетную обработку, но это не улучшает общую производительность скрипта.
Текущее время ожидания может составлять около 90/180 секунд.
Может кто-нибудь объяснить мне, почему? Какое наиболее эффективное (самое быстрое) решение для ожидания тысяч асинхронных запросов?
Спасибо за вашу помощь,
Комментарии:
1. Вероятно, не существует бесконечных ресурсов. Если вы выполняете много-много вызовов, они будут обрабатываться пулом потоков или чем-то в этом роде, вместо того, чтобы пытаться запустить сервер. Это, скорее всего, будет как на вашем конце, так и на сервере, которому вы звоните — серверам, как правило, не нравится, когда их обрабатывают тысячами и тысячами звонков. Наконец, возможно также некоторое регулирование. В целом, я бы не удивился, если бы несколько тысяч звонков заняли некоторое время.
2. Спасибо за ваш ответ. Текущее время колеблется от 90 секунд до 180 секунд, это то, что мы ожидали бы?
3. Зависит от того, что отправляет запросы на вашем конце и что обрабатывает их на другом конце, и есть ли какие-либо ограничения скорости, и если да, то что (например, более поздние вызовы занимают больше времени). Я просто не могу назвать вам конкретные цифры, но 90-180 секунд кажутся правдоподобными для многих звонков.