Netlify 很好用(Episode 1.1):如何减少 50% 构建时间并提升搜索速度

用 Zola 和 Algolia 改进 scoop.airbrain.app 构建和搜索效率

Netlify build time
之前文章中提到我自己搭了个页面 Scoop Buckets Search 用来搜索软件包,主要结合了 Gatsby 和 GitHub Actions 拿数据搭静态页面,然后部署在 Netlify 上。有两个问题值得注意:

所以呢,就想针对这两点优化一下。其实标题党了😂,因为减少构建时间的手段非常直白:换个快速的静态网站生成器。

用 Zola 构建网站

之前有过 Hugo 和 Zola 构建网站的经历,极快的构建速度让我印象深刻,而且需要的依赖也很少。这次就选择用 Zola 构建。Zola 的类 Jinja2 模版系统 - Tera 用起来简单,从 Gatsby 的模版迁移过来很方便,基本上直接挪过来就能用。

Netlify 也支持 Zola,因此整个构建 workflow 可以和 Gatsby 的保持一致,就是喜欢这种省心的。弄完简单测试了一下,不带搜索的页面 build 时间下降到了 30s。

页面内搜索要如何集成?

对之前的 JavaScript 搜索库并不满意,因此准备换个其他高效的实现。

使用 algolia 的问题是需要在构建网站时更新 Buckets 数据索引。一开始我准备用 Netlify 提供的 Serverless Function,构想是在构建网站的时候 trigger serverless functions 获取 Buckets 数据并更新 algolia 上的索引。后来想偷懒使用 atmoic-algolia 等 npm 包,在 serverless function 里搞包管理实在折腾,同时又发现了简单的方法,于是就再次放弃了 serverless function (为什么是再次)。

简单的方法就是利用 package.json 在里面注入复杂构建命令就可以:更改 Netlify 的 build command 为 npm run build,整个构建过程是

graph LR; * --> A[zola build] --> B([public]) --> C[Netlify publish] D[node buckets_data.js] --> B B --> E[atmoic-algolia]

虽然最后还是为了自己省心用了 npm 的包管理,但并不是用 JavaScript 的一套构建网站,所以相对于之前还是省了不少构建时间 – 差不多 50s。

具体实现可以移步:

Scoop Buckets Search: https://scoop.airbrain.app/

GitHub Repo: https://github.com/yibum/scoop-buckets-web-netlify

PUBLISHED AT:

Apr 11, 2020

comments powered by Disqus