動態

詳情 返回 返回

為什麼下載小電影時,進度總是卡在99%? - 動態 詳情

你是小阿巴,深夜獨自一人,正在下載一部《藝術與動作》的學習資料。

眼看着進度條已經到了 99%,你激動地搓着小手,心想:馬上就能欣賞大師的作品了!

結果半小時過去了,進度條死死卡在 99%。

你懷疑是網絡問題,狂按路由器重啓鍵,發現網頁秒開、網速飛快;也試過重新下載,但是仍然死死卡在 99%,紋絲不動、穩如泰山。

你絕望地仰天長嘯:不,為什麼!

這時,你面前出現一位程序員,正是下片無數的魚皮:愚蠢的小阿巴,想知道真相麼?給我兩個圓圓的東西,我就告訴你 2 個不為人知的秘密。

於是,你從褲襠中掏出 2 個圓圓的硬幣 🪙,交給了他。

本文對應視頻版:https://bilibili.com/video/BV1aCWizAEe5

 

一、產品經理的欺騙

魚皮:你看到的進度條,其實是假的!

你震驚了:什麼?!假的?

魚皮:沒錯,很多產品經理會要求程序員製作 虛假進度條

舉個例子,假設有兩個下載軟件,完成時間都是 100 秒。A 軟件的進度條只用 10 秒就顯示了 99%,最後 1% 花了 90 秒;B 軟件老老實實勻速加載,10 秒才顯示了 10%,你會覺得哪個更快?

你脱口而出:當然是 A 了!

魚皮笑道:這就對了,雖然實際速度一樣,但 A 給人的感覺就是更快,也更容易讓人留下來等待,這就是產品經理的詭計。

你恍然大悟:所以前面 99% 都是假象,只是為了安慰我?

魚皮:沒錯,這也是利用了人的心理,相比於一片空白的等待,哪怕是個假進度條,也能讓用户焦慮感大大降低。這也是我們平時開發網站的經典技巧,甚至會在進度條上加點小動畫,讓等待變得有趣起來。

你感嘆道:可惡啊,原來我一直被套路了!

魚皮:不過除了你看到的產品策略,背後可能還有更硬核的技術原因。

 

二、背後的技術原理

魚皮:你知道迅雷這種下載工具是怎麼工作的嗎?

你搖了搖頭。

魚皮:它們用的是 P2P 協議,簡單説就是 “人人為我,我為人人”。你下載文件時,不是從一個服務器下載,而是從成千上萬個下載過這個文件的用户那裏,同時下載 不同的文件小塊。

 

下載完成後,拼接小塊成為完整文件。

 

你有些驚訝:那豈不是很快就能下載完?為什麼還會卡在 99% 呢?

魚皮:正是因為數據來源太多太雜,如果某個用户網速超慢或者中途掉線,最後就有可能一直卡住,等待最慢的塊;而且如果因為網絡不穩定,導致傳輸過程中數據損壞了怎麼辦?

 

你:對哦,我怎麼發現這種情況呢?

魚皮:這時就需要 塊校驗。每個數據塊都有一個獨特的 “指紋”,叫做哈希值。收到每個塊後、以及 全部塊下載完成時(進度 99%),軟件會檢查每一塊數據的哈希值,和原始的哈希值對比。如果某個塊的哈希值對不上,軟件會直接丟棄這個塊,然後嘗試從其他用户重新下載。

 

但如果這個塊的來源已經離線了,或者數據本身就有問題,那你就只能死磕在 99% 了……

 

你恍然大悟:原來如此,最後 1% 不是在下載,而是在驗證和合並文件小塊!

魚皮:沒錯,所以 進度條不是恆定速率的,可別小瞧這 1%!

你撓了撓頭:那有什麼解決辦法嗎?

魚皮:當然有了,優秀的產品會給用户明確的反饋,比如顯示 “正在校驗文件”,讓用户知道程序沒有卡死,只是在認真幹活。這樣用户心裏有數,就不會那麼焦慮了。

 

你若有所思,然後抄起桌上的鍵盤一把朝魚皮的臉上砸去:我 ** 問的是這個麼?!

 

結果你發現,剛剛的一切竟然都只是你的幻覺。

唉,下次看到進度條 99% 彆着急,早點休息別熬夜,保護好自己的身體才是正事哦~

 

更多編程學習資源

  • Java前端程序員必做項目實戰教程+畢設網站

  • 程序員免費編程學習交流社區(自學必備)

  • 程序員保姆級求職寫簡歷指南(找工作必備)

  • 程序員免費面試刷題網站工具(找工作必備)

  • 最新Java零基礎入門學習路線 + Java教程

  • 最新Python零基礎入門學習路線 + Python教程

  • 最新前端零基礎入門學習路線 + 前端教程

  • 最新數據結構和算法零基礎入門學習路線 + 算法教程

  • 最新C++零基礎入門學習路線、C++教程

  • 最新數據庫零基礎入門學習路線 + 數據庫教程

  • 最新Redis零基礎入門學習路線 + Redis教程

  • 最新計算機基礎入門學習路線 + 計算機基礎教程

  • 最新小程序入門學習路線 + 小程序開發教程

  • 最新SQL零基礎入門學習路線 + SQL教程

  • 最新Linux零基礎入門學習路線 + Linux教程

  • 最新Git/GitHub零基礎入門學習路線 + Git教程

  • 最新操作系統零基礎入門學習路線 + 操作系統教程

  • 最新計算機網絡零基礎入門學習路線 + 計算機網絡教程

  • 最新設計模式零基礎入門學習路線 + 設計模式教程

  • 最新軟件工程零基礎入門學習路線 + 軟件工程教程

Add a new 評論

Some HTML is okay.