Netlify 很好用(Episode 1):搭个页面搜索 Scoop Buckets

用 Netlify 和 Github Actions 搭个页面搜索 Scoop Buckets

Scoop Search Screenshot
之前文章中提到我自己搭了个页面 Scoop Buckets Search 用来搜索软件包,希望比终端快一些,比 GitHub 搜索直观一些。 这篇文章啰嗦一下,将说明一下如何结合 GatsbyGitHub Actions 拿数据搭静态页面,然后部署在 Netlify 上。Netlify 确实很好用。

Scoop 自带的搜索会搜索默认的 Main Bucket。有些时候,我要找的软件不在其中,我就会去 Extra Bucket 找找看。大家呢又在 GitHub 维护着好几个不同的 Buckets,如此反复在不同 Buckets 中寻找软件既不直观也很折腾。 于是我就想整合不同 Buckets 的软件列表到一个页面上搜索。粗暴的方法就是把数据扔进数据库,搞个搜索界面。但是这样太折腾,也没必要。要是能定时抓取 Buckets 的数据,放进静态页面,整个页面内搜索就好了。想了一下应该挺简单,可以搭一个(事实上我东搞搞西弄弄,这玩意也折腾了一整天)。

在哪里部署页面?

终于要点题了吗?😂

我的构想是弄一个简单的静态页面,包含搜索和结果展示。部署静态页面的方法也非常多:

Netlify 我自己比较熟悉,这次就部署在 Netlify 图省事。每次有更新就 push 到 GitHub,Netlify 可以利用 Hooks 自动构建部署页面。

如何构建页面?

一个静态单页面,直接手写也应该不难。考虑到之后的更新维护,我决定还是用静态网站框架来搭页面。 现在流行而且相对成熟的静态框架也很多 Hugo,Gatsby,Hexo 等等。Gatsby 的数据流模式和插件系统很有意思,虽然我之前没用过,这次还是由于好奇心的驱使决定用 Gatsby。

数据要放哪里呢?首先不弄数据库,也不想持久化到文件(也挺麻烦的)。 考虑到数据就是简单的软件罗列信息,数据量很小,那么存到页面状态可能是个不错的方案。 这样就涉及到获取数据的频率的问题:一个是每次打开页面的时候获取数据。这样的好处是能获取实时的数据,但是缺点就比较多了,数据获取速度问题,还可能要为搜索建索引。 另一个是定时获取数据并构建页面,然后发布。事实上 Buckets 数据更新并不频繁,定时获取数据没什么损失。

这次就是利用 Gatsby 的数据流模式,在构建页面的时候获取 Buckets 列表数据。不过后来发现 Gatsby 也有些问题,一个问题就是 build 的效率。在 Netlify 平均一次从 Build 到 Deploy 要 1 分 30 秒左右(可能更多的是 npm 包管理的问题)。我用 Hugo 或者 Zola 建的多页面向来都是几秒以内就搞定。以后有空试试看能不能替换成 Hugo 或者 Zola 生成页面,希望能节省下不少 Netlify Build Minutes。

如何定时抓取 Buckets 数据?

对于如何定时获取数据和构建页面,

Netlify 虽然提供了 Serverless Functions 的,但是我还是嫌麻烦。恰好去年搞这个网页的时候,GitHub 推出了 Actions 的功能,可以写好配置文件像 cron 那样执行。这就简单了,写好配置文件,扔上去就可以。

具体实现可以移步:

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

GitHub Repo

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

PUBLISHED AT:

Mar 17, 2020

comments powered by Disqus