Video.js 十年后重写,体积锐减 88%
Web 视频播放领域的老牌开源项目 Video.js 最近搞了个大新闻——创始人在离开项目 16 年后回归,带领团队完成了彻底的重写,新版本体积直接砍掉了 88%。
从 200KB 到 25KB
Video.js 8.x 版本的核心体积约为 200KB(gzip 后),对于现代 Web 应用来说已经算是轻量化选手。但在 v10 版本中,这个数字被压缩到了 25KB——比很多静态资源(比如一张小图)还小。
怎么做到的?
- 移除遗留代码:彻底抛弃了 IE 时代的老旧兼容逻辑
- 模块化重构:从单体架构转向可插拔的组件系统
- Tree-shaking 优化:只打包实际使用的功能
- 原生 ESM 优先:告别 UMD 包袱
React 时代的答案
新版 Video.js 最令人惊喜的变化是推出了官方 React 绑定。
import { createPlayer } from '@videojs/react';
import { VideoSkin, Video, videoFeatures } from '@videojs/react/video';
const Player = createPlayer({ features: videoFeatures });
export function VideoPlayer() {
return (
<Player.Provider>
<VideoSkin poster="thumbnail.webp">
<Video src="video.mp4" playsInline />
</VideoSkin>
</Player.Provider>
);
}
这种组合式的 API 设计显然受到了现代 UI 框架的影响。你可以按需引入功能,而不是一股脑加载整个播放器。
为什么要重写?
Video.js 诞生于 2010 年,那时候 HTML5 Video 还只是个草案,Flash 才是视频播放的主流。为了填平浏览器之间的鸿沟,Video.js 积累了大量 polyfill 和 hack。
16 年后,Web 标准早已成熟:
- HLS 和 DASH 原生支持越来越完善
- Media Source Extensions (MSE) 成为标配
- 移动端浏览器对视频播放的处理也更加统一
继续背着历史包袱前进,只会拖累项目的演进速度。
对开发者的意义
对于新项目:v10 是一个极具吸引力的选择——轻量、现代、无历史包袱。
对于存量项目:迁移需要时间,但官方提供了详细的升级指南。考虑到性能收益,这笔投入是值得的。
对于生态:更小的体积意味着更快的加载速度,这对移动端用户体验尤其重要。
写在最后
开源项目的生命周期往往比商业软件更长。Video.js 这次重写证明了一点:有时候,勇于打破 backward compatibility,才能赢得下一个十年。