ngx-uploadx
Version:
Angular Resumable Upload Module
32 lines • 4.03 kB
JavaScript
const KiB = 1024;
/**
* Adaptive chunk size
*/
export class DynamicChunk {
/** Maximum chunk size in bytes */
static maxSize = Number.MAX_SAFE_INTEGER;
/** Minimum chunk size in bytes */
static minSize = 256 * KiB;
/** Initial chunk size in bytes */
static size = 4 * (256 * KiB);
static minChunkTime = 8;
static maxChunkTime = 24;
/**
* Scales the chunk size based on the throughput.
* If the elapsed time to upload a chunk is less than the min time, increase the chunk size.
* If the elapsed time is more than the max time, decrease the chunk size.
* Keeps the chunk size within the min and max limits.
* @param throughput - represents the upload rate in bytes/sec.
*/
static scale(throughput) {
const elapsedTime = DynamicChunk.size / throughput;
if (elapsedTime < DynamicChunk.minChunkTime) {
DynamicChunk.size = Math.min(DynamicChunk.maxSize, DynamicChunk.size * 2);
}
if (elapsedTime > DynamicChunk.maxChunkTime) {
DynamicChunk.size = Math.max(DynamicChunk.minSize, DynamicChunk.size / 2);
}
return DynamicChunk.size;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jaHVuay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWR4L2xpYi9keW5hbWljLWNodW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQjs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLGtDQUFrQztJQUNsQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUN6QyxrQ0FBa0M7SUFDbEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNCLGtDQUFrQztJQUNsQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN4QixNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUV6Qjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQWtCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ25ELElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QyxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBLaUIgPSAxMDI0O1xuLyoqXG4gKiBBZGFwdGl2ZSBjaHVuayBzaXplXG4gKi9cbmV4cG9ydCBjbGFzcyBEeW5hbWljQ2h1bmsge1xuICAvKiogTWF4aW11bSBjaHVuayBzaXplIGluIGJ5dGVzICovXG4gIHN0YXRpYyBtYXhTaXplID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gIC8qKiBNaW5pbXVtIGNodW5rIHNpemUgaW4gYnl0ZXMgKi9cbiAgc3RhdGljIG1pblNpemUgPSAyNTYgKiBLaUI7XG4gIC8qKiBJbml0aWFsIGNodW5rIHNpemUgaW4gYnl0ZXMgKi9cbiAgc3RhdGljIHNpemUgPSA0ICogKDI1NiAqIEtpQik7XG4gIHN0YXRpYyBtaW5DaHVua1RpbWUgPSA4O1xuICBzdGF0aWMgbWF4Q2h1bmtUaW1lID0gMjQ7XG5cbiAgLyoqXG4gICAqIFNjYWxlcyB0aGUgY2h1bmsgc2l6ZSBiYXNlZCBvbiB0aGUgdGhyb3VnaHB1dC5cbiAgICogSWYgdGhlIGVsYXBzZWQgdGltZSB0byB1cGxvYWQgYSBjaHVuayBpcyBsZXNzIHRoYW4gdGhlIG1pbiB0aW1lLCBpbmNyZWFzZSB0aGUgY2h1bmsgc2l6ZS5cbiAgICogSWYgdGhlIGVsYXBzZWQgdGltZSBpcyBtb3JlIHRoYW4gdGhlIG1heCB0aW1lLCBkZWNyZWFzZSB0aGUgY2h1bmsgc2l6ZS5cbiAgICogS2VlcHMgdGhlIGNodW5rIHNpemUgd2l0aGluIHRoZSBtaW4gYW5kIG1heCBsaW1pdHMuXG4gICAqIEBwYXJhbSB0aHJvdWdocHV0IC0gcmVwcmVzZW50cyB0aGUgdXBsb2FkIHJhdGUgaW4gYnl0ZXMvc2VjLlxuICAgKi9cbiAgc3RhdGljIHNjYWxlKHRocm91Z2hwdXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgZWxhcHNlZFRpbWUgPSBEeW5hbWljQ2h1bmsuc2l6ZSAvIHRocm91Z2hwdXQ7XG4gICAgaWYgKGVsYXBzZWRUaW1lIDwgRHluYW1pY0NodW5rLm1pbkNodW5rVGltZSkge1xuICAgICAgRHluYW1pY0NodW5rLnNpemUgPSBNYXRoLm1pbihEeW5hbWljQ2h1bmsubWF4U2l6ZSwgRHluYW1pY0NodW5rLnNpemUgKiAyKTtcbiAgICB9XG4gICAgaWYgKGVsYXBzZWRUaW1lID4gRHluYW1pY0NodW5rLm1heENodW5rVGltZSkge1xuICAgICAgRHluYW1pY0NodW5rLnNpemUgPSBNYXRoLm1heChEeW5hbWljQ2h1bmsubWluU2l6ZSwgRHluYW1pY0NodW5rLnNpemUgLyAyKTtcbiAgICB9XG4gICAgcmV0dXJuIER5bmFtaWNDaHVuay5zaXplO1xuICB9XG59XG4iXX0=