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

更多编程学习资源

相关推荐
郑州光合科技余经理1 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖1 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
论迹复利5 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin5 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
宸津-代码粉碎机6 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
2601_963749107 小时前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh7 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
源码宝7 小时前
SpringBoot+Vue2 诊所门诊管理系统,完整前后端源码,可直接部署上线
java·源码·his系统·门诊系统·程序代码·诊所系统·门诊his
yychen_java7 小时前
九:Text-to-SQL 智能数据查询与 Human-in-the-Loop 人机协作
java·人工智能·架构
lhldsg9 小时前
智慧场馆解决方案小程序开发实战:从架构设计到部署指南
java·小程序·uni-app