guess
让机器学习自动预测用户下一步,预取页面资源,消除网页跳转延迟
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让机器学习自动预测用户下一步,预取页面资源,消除网页跳转延迟
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2018年,Google Angular 核心贡献者 Minko Gechev 在博客中写下了一个疑问:为什么大多数网站不能像 Netflix 那样,在你点开一部电影之前就提前加载好内容?
这个问题促成了 Guess.js 的诞生。它试图用机器学习的方式,让每一个普通网站都能预测用户下一步想访问哪个页面,并提前把对应的资源加载好——就像 Netflix 推荐电影一样,只不过推荐的是你可能想看的网页。
传统的预加载方案需要开发者手动阅读 Google Analytics 数据、自己训练模型、编写预测代码。Guess.js 把这个过程压缩成了三个插件:
guess-ga:连接 Google Analytics API,自动提取用户的访问路径数据,理解哪些页面之间跳转最频繁。guess-parser:解析你的代码,找到所有路由声明(目前支持 Angular、React、Preact),建立一个完整的路由图谱。guess-webpack:整合前两者的输出,生成预测模型,在用户点击链接之前就悄悄预取下一个页面的 JavaScript 资源包。用大白话说:Guess.js 知道你网站上 A→B 的跳转概率是 80%,所以当用户在 A 页面悬停到 B 的链接上时,浏览器已经在后台下载 B 的代码了——等用户真的点下去,页面几乎是瞬间呈现的。
Google 官方数据显示,当时只有 5% 的 Chrome 页面使用了 <link rel=prefetch>,Guess.js 正是为了把这个数字提高而生的。
Guess.js 提供两种预测策略,开发者可以根据需要选择:
页面级预测:预测下一个最可能访问的页面,直接预渲染整个页面内容。适合内容型网站(博客、文档站)。
资源包级预测:预测最可能访问的 N 个页面,根据当前网络状况动态调整预取数量(3G 下预取 1 个,WiFi 下预取 3 个),在带宽和体验之间找到平衡。这是最常用的模式。
guess-js/guess/
├── packages/
│ ├── guess-webpack/ # Webpack 插件(核心,0.4.22)
│ ├── guess-ga/ # Google Analytics 数据拉取(0.4.20)
│ ├── guess-parser/ # 多框架路由解析(0.4.22)
│ └── common/ # 共享工具
└── experiments/
└── guess-static-sites/ # 静态站点的独立集成方案
技术栈:
这不是一个"下载就能跑"的工具。你需要:
GuessPlugin作者 Minko Gechev 在多场国际前端大会(JSConf EU、NgConf)上演示过集成过程,官方文档也提供了详细的 Step-by-step 指南。但对于没有 webpack 使用经验的开发者,仍有学习曲线。
Guess.js 在 GitHub 上有 7100+ stars,但相对它的实用价值,知名度远低于它的"前辈"工具。这可能是因为:
尽管如此,它的路由解析框架和预测模型思路,在今天仍然是构建智能预加载功能的重要参考。
Guess.js 代表了"前端性能优化"从规则驱动向数据驱动转变的趋势。它证明了:即使不引入复杂的推荐系统,仅仅用历史访问数据做简单的概率预测,就能显著改善用户体验。随着 Core Web Vitals 成为 SEO 排名因素,这类工具的价值正在重新被审视。
维护者备注:项目目前处于维护模式,核心思路仍有效,但建议关注 Next.js 13+ 的 built-in 预加载和 Nuxt 的 Route Middleware 作为更现代的替代方案。