進度條本質是已下載位元組數 / 總位元組數 的百分比可視化。
totalSize = getFileSize(url);
downloaded = 0;
startThreads(url, totalSize, (chunkSize) => {
downloaded += chunkSize;
});
// UI 線程
timer.schedule(() => {
percent = downloaded / totalSize;
progressBar.width = percent * maxWidth;
label.text = percent.toFixed(1) + "%";
}, 200);
迅雷還會從其他已下載用戶(節點)獲取數據,邏輯相同,只是數據源更多,`totalSize` 不變,`downloaded` 增長更快。