简化网站创建流程:Golang,Markdown,Tailwind,Alpine.js,Templ – 受启发于Nuxt Content

简化网站创建流程:Golang、Markdown、Tailwind、Alpine.js、Templ - 受 Nuxt Content 启发

创建一个“简单”的网站应当是直截了当的。所谓“简单”网页,指的是具有三至五个子页面、一个联系表单、也许还有一些文章或博客帖子等的“典型”网站。通常,这类网站可能数天、数周甚至数月都不会有变化。那么,该如何应对这种典型情况呢?

WordPress是常见的网站构建工具之一。 被视为解决这类情况的首选方案。虽然有些情况下WordPress非常适用,对于很少更新且只包含少量子页面和几篇文章的网站,为什么要考虑使用数据库来存储页面内容呢?当我看到只有几页内容的简单网站,创建于一年前,这让我想起奥运会上的游泳池救生员,他们在那里以防止世界上最优秀的游泳运动员溺水。内容从未改变,为什么还要使用数据库呢?

然而,这篇文章并不是讨论这个问题。它是关于让简单的网页开发再次变得简单。我已经使用Nuxt一段时间了,并且对它很喜欢。我喜欢编写Vue,也很欣赏Nuxt提供的许多功能,比如自动路由。我还喜欢内容概念,即根据文件和文件夹在内容目录中的位置将它们映射到URL。我希望网站开发能够快速进行 — 无论是开发时间还是用户页面加载时间。 寻求简单,没有不必要的功能或复杂的底层流程,这些会妨碍调试并占用开发时间。简而言之,我希望它简单快速。

在我的基于Nuxt的网站上进行一些开发后(我想看看它在railway.app (opens new window)上的表现如何),我注意到开发网站的RAM和CPU使用率相当高,尽管每天只有我访问几次。我相信这可以优化,但与同一railway.app帐户上运行的一些Golang应用相比,最繁忙的Golang服务只使用了我的Nuxt网站资源的约10%(在进行了一些测试后,估计这个项目对我来说在railway.app上的托管成本仅约为Nuxt项目的1%)。这个Golang服务经常ping其他网站以检查它们的状态和响应时间,读写数据库,生成web套接字消息,总体上非常繁忙。

这个观察让我考虑了我最欣赏Nuxt的是什么。 side caching

在这个内容特性中。虽然Nuxt和Vue非常适合创建交互式网络应用程序,但这不是重点。

我决定在Golang环境中探索这种情况,并编写了一个非常简单的网络应用程序。它读取URI并检查与该URI匹配的内容目录中的文件(带有.md或.html扩展名)或文件夹匹配。如果有文件夹匹配,它会查找一个索引markdown或HTML文件进行渲染。

我还尝试了Go的内置http.ServeMux、Templ模板引擎和Goldmark markdown渲染。在创建了一些markdown和HTML文件并对其进行测试后,我在Google Lighthouse上获得了100分的完美性能得分。这个结果符合我的期望和目标。在添加Tailwind CSS和Alpine.js之后,我现在正在评估这种方法的可扩展性和灵活性。

桌面版Lighthouse结果-在railway.app上运行,没有任何服务器端缓存

移动版Lighthouse结果-在railway.app上运行,没有任何服务器端缓存 我意识到实现这一目标还有其他许多途径,比如使用Hugo、Jekyll、Astro、Nuxt的静态站点生成器等等。这只是另一种方法。

如果您感兴趣,可以查看演示网站 (opens new window)存储库 (opens new window)