完成時間預估器

根據吞吐速率推算長時間任務的剩餘時間和完成時刻。輸入總量、已完成量和處理速度,立即得到剩餘耗時與預計完成時間點。

這個任務還要跑多久? 填入總量、已完成量和當前速率,工具會算出剩餘耗時、總耗時,並給出具體的完成時刻。

進度 0%
剩餘時間
總耗時
預計完成

怎樣估算完成時間才不會騙自己

算式很簡單,假設才是難點

ETA 本質上就是一次除法:剩餘工作量除以速率。還剩 40000 行、每分鐘處理 500 行,就是 80 分鐘。這個工具幫你完成這次除法,把結果換算成易讀的單位,再加到開始時間上,直接給出鐘錶上的時刻,省去你心算加法的麻煩。

真正麻煩的不是除法,而是這次除法預設「你測到的速率會一直保持到結束」,而這個假設錯的次數往往多於對的次數。批次匯入會隨著索引增大而變慢;下載會在 TCP 慢啟動結束後加速;批處理任務可能突然遇到一段異常大的記錄。ETA 是對當下的投影,不是對未來的預言——在把這個數字寫進進度彙報之前,最好先把這句話說清楚。

認真選擇速率的測量視窗

因為估算結果完全繼承你餵給它的速率,所以「測量視窗」是這個頁面上影響最大的輸入。取最近十秒的速率,靈敏但抖動劇烈:每看一次都會得到不同的 ETA。取整個執行期的平均速率,穩定但遲鈍:任務早就卡住了,它還在報一個樂觀的數字。

短任務用全程平均值即可。以小時計的任務,用幾分鐘的滾動視窗通常最平衡:足夠新以察覺變慢,又足夠長以忽略偶發抖動。如果兩種演算法給出的結果差距很大,這個差距本身就是有用的訊號——說明速率正在變化,此時誠實的答案是一個區間,而不是一個精確時刻。

剩餘時間要和總耗時一起看

工具同時給出總耗時和剩餘時間,兩者放在一起比單看任何一個都更有資訊量。如果任務只完成了 5%,而總耗時顯示十一個小時,那麼無論剩餘時間是多少,你都可以立刻判斷:這不是一個應該盯著看的任務。它也提供了一次合理性校驗——如果推算出的總耗時和上週同樣的任務差得離譜,要麼速率測錯了,要麼確實發生了變化,兩種情況都值得在任務跑完之前查清楚。

顯示進度百分比也是同樣的道理。任務剛開始、完成量還很小時,速率估計建立在極少的樣本上,ETA 幾乎沒有意義。看著百分比往上爬,你才知道這個估算什麼時候才積累了足夠的資料、值得拿出來引用。

全部計算在瀏覽器本地用原生 JavaScript 完成,不依賴第三方庫,不上傳資料,不做追蹤。

常見問題

剩餘時間是怎麼算出來的?
先把你輸入的速率折算成「每秒多少單位」,再用剩餘量除以它。其餘所有結果——易讀時長、完成時刻、百分比——都由這一個數字推導而來。
為什麼只顯示兩個單位?
因為「3 天 4 小時」比「3 天 4 小時 12 分 7 秒」更好用。在那個量級上分和秒都是噪音,工具是直接省略較小單位而不是四捨五入,所以沒有隱藏任何資訊。
能用在非資料類的任務上嗎?
可以。單位由你定義:行數、檔案、公里、頁數、工單都行。工具從不假設單位的含義,只要有可計數的總量和可測量的速率就能用。
執行過程中速率變了怎麼辦?
重新填一遍當前數值即可。工具不儲存歷史輸入,更新完成量和實測速率後就會基於任務當前的真實狀態給出全新的推算。
完成時間考慮時區嗎?
完成時間按瀏覽器所在時區、用你的區域格式渲染。開始時間欄位同樣是本地鐘錶時間,兩者互相一致。
資料會上傳到伺服器嗎?
不會。所有數值都留在頁面裡,整個計算只是瀏覽器裡的幾次算術運算,沒有任何需要上傳的內容。