为什么下载小电影时,进度总是卡在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% 别着急,早点休息别熬夜,保护好自己的身体才是正事哦~

更多编程学习资源

相关推荐
kyriewen6 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
海的透彻6 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat6 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
李剑一6 小时前
他是数字世界的开创者,41岁走完了被亏欠的天才人生,拯救千万人,却被祖国定罪
程序员
后台模板学习7 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one7 小时前
算法--构造
java·数据结构·算法
SL_staff7 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff8 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko78 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.9 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测