Проблемы с изменением размера изображения с помощью Firebase Cloud Function - PullRequest
0 голосов
/ 06 ноября 2018

Я использую Firebase с моим проектом React и пытаюсь изменить размеры изображений, когда они загружаются пользователем. Облачная функция, которую я использую, прекрасно работает, но ее выполнение занимает более 8-10 секунд, и я чувствую, что это не должно занимать так много времени. Я использую библиотеку sharp для изменения размера изображений и «Spark» (бесплатный) план Firebase. Есть мысли о том, как я могу улучшить производительность? Вот моя облачная функция:

const functions = require('firebase-functions');
const {Storage} = require('@google-cloud/storage');
const sharp = require('sharp');
const os = require('os');
const path = require('path');

const projectId = 'my-project-id';

const storage = new Storage({
    projectId: projectId
});

exports.resizeImage = functions.storage.object('images').onFinalize(event => {
    const {bucket, name, contentType, resourceState} = event;

    if (!contentType.startsWith('image/') || resourceState == 'not_exists') {
        console.log('This is not an image.');
        return {};
    }
    if (path.basename(name).startsWith('resized_')){
        console.log('Image already processed');
        return {};
    }

    const destinationBucket = storage.bucket(bucket);
    const workingDir = path.join(os.tmpdir());
    const tempFilePath = path.join(workingDir, path.basename(name));
    const metadata = {contentType: contentType};

    return destinationBucket.file(name).download({
        destination: tempFilePath
    })
    .then(() => {
        const newFilePath = path.join(workingDir, 'resized_' + path.basename(name));
        sharp(tempFilePath)
        .resize({width: 600})
        .toFile(newFilePath)
        .then( () => {
            return destinationBucket.upload(newFilePath, {destination: 'images/resized_' + path.basename(name)});
        })
        .catch( err => console.log(err))
    })
})
...