UNPKG

ngx-uploadx

Version:
32 lines 4.03 kB
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=