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,才能赢得下一个十年。

项目地址:github.com/videojs/video.js