Как сделать загрузку быстрее в angular 7? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь ускорить загрузку. Поэтому я попробовал другое решение, как с BackEnd, так и с Front-End. Это:

1) Я загрузил tar-файл (уже сжатый)

2) Я попытался загрузить фрагмент (последовательно), если ответ будет успешным, следующий API будет запущен. На внутренней стороне в том же файле будет добавлен контент.

3) Я пробовал загрузить фрагмент, но параллельно, за один раз, я делаю 50 запросов на загрузку содержимого фрагмента (я знаю, что браузер одновременно обрабатывает только 6 запросов). Со стороны серверной части мы сохраняем все файлы фрагментов отдельно, после получения последнего запроса, добавляя все эти фрагменты в один файл.

Но заметьте, я не вижу большой разницы во всех этих случаях.

Ниже приведен мой служебный файл

export class largeGeneUpload {

    chromosomeFile: any;
    options: any;
    chunkSize = 1200000;
    activeConnections = 0;
    threadsQuantity = 50;

    totalChunkCount = 0;
    chunksPosition = 0;
    failedChunks = [];


    sendNext() {
        if (this.activeConnections >= this.threadsQuantity) {
            return;
        }

        if (this.chunksPosition === this.totalChunkCount) {
            console.log('all chunks are done');
            return;
        }

        const i = this.chunksPosition;
        const url = 'gene/human';
        const chunkIndex = i;
        const start = chunkIndex * this.chunkSize;
        const end = Math.min(start + this.chunkSize, this.chromosomeFile.size);
        const currentchunkSize = this.chunkSize * i;
        const chunkData = this.chromosomeFile.webkitSlice ? this.chromosomeFile.webkitSlice(start, end) : this.chromosomeFile.slice(start, end);
        const fd = new FormData();
        const binar = new File([chunkData], this.chromosomeFile.upload.filename);
        console.log(binar);
        fd.append('file', binar);
        fd.append('dzuuid', this.chromosomeFile.upload.uuid);
        fd.append('dzchunkindex', chunkIndex.toString());
        fd.append('dztotalfilesize', this.chromosomeFile.upload.total);
        fd.append('dzchunksize', this.chunkSize.toString());
        fd.append('dztotalchunkcount', this.chromosomeFile.upload.totalChunkCount);
        fd.append('isCancel', 'false');
        fd.append('dzchunkbyteoffset', currentchunkSize.toString());

        this.chunksPosition += 1;
        this.activeConnections += 1;
        this.apiDataService.uploadChunk(url, fd)
            .then(() => {
                this.activeConnections -= 1;
                this.sendNext();
            })
            .catch((error) => {
                this.activeConnections -= 1;
                console.log('error here');
                // chunksQueue.push(chunkId);
            });

        this.sendNext();
    }


    uploadChunk(resrc: string, item) {
        return new Promise((resolve, reject) => {
            this._http.post(this.baseApiUrl + resrc, item, {
                headers: this.headers,
                withCredentials: true
            }).subscribe(r => {
                console.log(r);
                resolve();
            }, err => {
                console.log('err', err);
                reject();
            });
        });
}

Но дело в том, что если я загружу тот же файл на диск Google, это не займет много времени.

Давайте рассмотрим, У меня есть файл размером 700 МБ, чтобы загрузить его на диск Google, потребовалось 3 минуты. Но для загрузки того же файла размером 700 МБ с моим кодом Angular на наш внутренний сервер потребовалось 7 минут, чтобы завершить sh его.

Как повысить производительность загрузки файлов? *

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Это может быть вызвано множеством переменных, но, судя по вашей истории, это не имеет ничего общего с вашим внешним кодом. Разделение на куски не поможет, потому что у браузеров есть собственный оптимизированный алгоритм загрузки файлов. Скорее всего, виноват ваш внутренний сервер или соединение вашего клиента с сервером.

Вы говорите, что диск Google работает быстро, но вы также должны знать, что у Google очень широко распространенная глобальная инфраструктура с первоклассной облачные серверы. Если вы используете, например, фиксированного хостинг-провайдера за 2 евро в месяц, вы не можете рассчитывать на такую ​​же вычислительную мощность и мощность сети, как у Google.

0 голосов
/ 17 июня 2020

простите, ответ кажется глупым, но это зависит от инфраструктуры вашего хостинга

...