Ohhnews

分类导航

$ cd ..
InfoQ Java原文

利用Quarkus构建静态网站:Roq框架解析

#quarkus#roq#静态网站生成#java#web开发

访谈录音

Olimpiu Pop:大家好。我是 InfoQ 编辑 Olimpiu Pop。坐在我对面的是 Andy,他是 Roq 的开发者和发起人。Roq 算是一种将 Markdown 语言发布到网上的新方式,对吧?但在开始之前,Andy,你能先自我介绍一下,并告诉我们 Roq 到底是什么吗?

Andy Damevin:当然。我是 Andy Damevin,一名全栈开发者。我热爱 Java,热爱用户界面(UI)。最重要的是,我喜欢让一切流程变得精简。我喜欢易于使用的工具。我在 Quarkus 团队工作了九年。如果你还不了解 Quarkus,它是一个 Java 框架,目前非常出名。我已经为 Quarkus 开发了很多工具。

年轻开发者为什么也会爱上 Java [01:25]

Olimpiu Pop:那么 Quarkus 和 Roq 之间有什么联系呢?毕竟我们今天是为了讨论 Roq 而来的,对吧?

Andy Damevin:是的。Roq 是一个静态网站生成器,它允许在 Quarkus 的支持下创建静态网站,但你并不需要了解 Quarkus 或 Java。它只是利用了 Quarkus 的强大能力来完成任务。

Olimpiu Pop:说得很好。但在我们深入探讨为什么要构建另一个静态网站生成器——因为这通常是其他技术领域的产物,而不是 Java 的——我必须提到你说过“我喜欢 Java”。对于那些不认识 Andy 的人来说,他非常年轻,却依然钟情于 Java。这就是为什么我想看看,在你加入 Quarkus 团队的九年里,Java 作为一门语言在开发层面上发生了怎样的变化,以及现在上手它有多容易?

Andy Damevin:我觉得这里有两个问题。第一个是关于 Java 为什么再次变得“酷”了;另一个是为什么要为 Roq 使用 Java。我认为这是两个完全不同的问题。而且你还问了为什么要再做一个静态网站生成器。

Olimpiu Pop:好的,我们可以逐一讨论。但我现在很好奇,因为长期以来,每当人们提到 Java,就会说它“慢”。Java 就是慢,这几乎成了一种竞赛。然后每个人都在解释其他生态系统有多么美妙。但现在这些声音越来越小了。我认为在过去几周里,我组织了至少两次聚会,有很多年轻人——也就是刚毕业的学生——正在从事 Java 相关工作并对此进行研究。那种感觉真是太棒了,Java 终于走出了阴霾。所以 Java 目前处境不错。回到你提到的问题:为什么要再做一个静态网站生成器?

Andy Damevin:那么为什么要再次选择 Java?老实说,我曾经有一段时间开始接触 Go 语言,当时我认为 Java 在未来不会有太大作为。但 Quarkus 确实改变了游戏规则。不仅仅是 Quarkus 本身,而是它带来了 Java 缺失的“原生速度”。我一直很爱 Java。相比 Go,我更喜欢用 Java 编码,因为它赋予了代码非常好的格式。一切都很整洁,有测试,组织得井井有条。这就是我喜欢 Java 的原因。我认为要构建真正出色的基础设施和强大的应用程序,Java 是完美的解决方案。但问题是,人们正在远离它,转向 Go 之类的语言,主要是因为它们可以编译成二进制文件。而以前的 Java 做不到这一点。JVM 曾是个问题,但现在情况又好转了,因为当你发现 Java 也可以生成二进制文件时,你就会重新回归 JVM。你可以追求速度,同时又能利用 JVM 在运行时的优化能力,这是纯原生开发所做不到的。我认为这让 Java 再次变得酷了起来。更不用说 Java 随着新 JDK 的发布所取得的演进。综合来看,我认为它在未来大有可为。

Olimpiu Pop:是的,但社区已经喊了至少 15 年“Java 快要死了”。在我看来,这个生态系统一直在不断壮大。如果你回望过去,你会发现它在不同技术世代之间有着显著的差异。最初有 EJB(企业级 Java Bean),那简直是一场灾难。然后是 Spring 试图解决问题,再后来是 POJO(普通老式 Java 对象)。现在我们可以称之为“复兴”——我们有了第三代构建应用程序的方式,那就是 Quarkus,也许还可以把 Micronaut 归为同一类。这种看待它的视角完全不同,它是快速的。

为什么用 Java 编写另一个静态网站生成器 [06:00]

特别让我欣赏的是 Quarkus 从诞生之初就考虑到的“开发者愉悦感(Developer Joy)”。这是开发者领域出现的一个新指标。在此之前,人们谈论的是性能、模式,然后突然出现了一个全新的维度。这很好。这种理念在基于 Quarkus 开发 Roq 的过程中起到作用了吗?

Andy Damevin:关于 Roq,这纯属巧合。因为我不认为 Quarkus 最初是构建静态网站生成器的最佳场所或最佳系统。这并非显而易见。当我构建它时,我想:“好吧,也许它比我最初开始时想的更有意义。”我开始做它是因为它很容易实现,只是 Quarkus 之上的一个小部件。然后我发现,Quarkus 拥有我们需要的一切。静态网站生成器只是 Quarkus 庞大功能中的一小部分。我不认为还有其他静态网站生成器能拥有如此现成的基础设施。

Olimpiu Pop:所以 Roq 实际上是 Quarkus 的一个扩展。换句话说,你拥有的是一个能够生成静态网站的 Quarkus 引擎,对吧?

Andy Damevin:是的。

Olimpiu Pop:这在某些情况下可能说得通,但它会不会太重了?如果我只是想要一个简单的网站……比如一堆 Markdown 文件,我想建一个博客、发布页面之类的。我真的需要 Quarkus 这么强大的工具在背后支撑吗?

Andy Damevin:在回答这个问题时,你需要考虑替代方案。如果你将它与替代方案进行对比,你会发现 Roq 是一个非常好的选择。因为最终,Quarkus 并不会让它变得沉重,它带来了极好的开发者体验。如果你想撰写内容,它的体验也非常棒。所以综合来看,我认为它是个很好的候选者。

Roq 的内部结构 [08:23]

Olimpiu Pop:幕后到底是什么样的?我该如何看待它?我们有 Quarkus,我们知道它启动迅速,并且由于团队围绕响应式流(Reactive Streams)构建的内部机制,它处理数据的速度非常快。那么,构建静态网站还需要什么?请描述一下它的架构。Roq 带来了什么,或者说你必须整合什么?

Andy Damevin:这是个好问题。Roq 是如何工作的?如果你仔细看,Quarkus 有构建时(Build-time)和运行时(Runtime)两个截然不同的部分。这是 Quarkus 的一大特色。我所说的一切并不会让 Roq 变得更复杂,你不需要了解这些就能使用它。但我改变了想法:当你构建静态网站时,你想生成所有静态页面。在 Quarkus 中,你有构建时,但我想,为什么要局限于构建时?我们完全可以像处理任何正常的 Quarkus 应用程序一样,在运行时进行处理,然后生成一个“快照”。你只需将 Quarkus 应用程序中的所有内容作为文件导出即可。这就是 Roq 的工作方式。它只是启动一个 Quarkus 应用程序,因为它非常轻量,所以速度非常快,并把所有内容转储为静态文件。这就是它的独特之处。在开发过程中,我们甚至不需要生成任何东西,我们只需使用 Quarkus 服务器,它会按需渲染。因此,你默认拥有“实时重载(Live Reload)”,当你真的需要构建时,我们再把一切转储为文件。

将现有博客迁移到 Roq [10:55]

Olimpiu Pop:让我们举个例子。假设有一个每年 12 月发布的 Java 节日日历(Advent Calendar),我们有文章等等。现在大概有 13 到 15 年的文章了。它们可能存储在 WordPress 的数据库里。如果我们要将其迁移到 Roq,以证明我们已经进入了 Java 生态系统,我们需要采取哪些步骤?

Andy Damevin:WordPress 的特殊之处在于,我不认为它是一个静态网站生成器。它更像是一个内容管理系统(CMS),据我所知,它是在运行时通过 PHP 进行渲染的。

Olimpiu Pop:是的,那是一个宏大的话题。让我们简化一下。我们需要生成文章,因为静态网站生成器一方面更安全,另一方面也更容易被索引。如果我理解正确,Roq 是使用 Markdown 文件的,对吧?

Andy Damevin:是的,Markdown。

Olimpiu Pop:有很多这样的文件。

Andy Damevin:是的,你可以使用 Markdown 或 AsciiDoc。

Olimpiu Pop:好的。Markdown 更加简单。AsciiDoctor 则更为复杂,如果你有更复杂的结构需求,它非常强大。GitHub 让 Markdown 变得非常流行。那么,我们需要把这些内容整理好,对吧?

Andy Damevin:是的。

Olimpiu Pop:那么网站的样式呢?模板之类的东西在 Roq 中是如何完成的?

Andy Damevin:如果你想从 WordPress 迁移到 Roq,考虑到你可以轻松地将 HTML 转换为 Markdown 或 AsciiDoc,你需要把数据库里的内容转出来。你不需要非得手动写 Markdown,有很多编辑器可以像 Word 一样操作,然后自动转换成 Markdown。当你有了所有的 Markdown,只需按照一定结构放入文件系统,而不是数据库中。然后你需要模板来定义页面的外观。关于样式,你只需使用一个名为 web-bundler 的 Quarkus 扩展。它会自动处理所有的 JavaScript 和样式,将它们打包为生产就绪状态,无需任何额外配置。

Roq 需要多少资源?[14:36]

Olimpiu Pop:资源占用情况如何?如果是一个现成的应用,不需要进行任何调整,我应该预期多大的资源消耗?是很大吗?还是表现尚可?我能在树莓派(Raspberry Pi)上运行它吗?

Andy Damevin:作为开发者,你会使用 Quarkus 来开发网站基底。作为作者,你可以使用 Quarkus 和文件系统来编辑内容。我们正在 UI 中构建一个 CMS。因此,作为作者,你可以像在 WordPress 上一样进行“所见即所得”的编辑。最后是生成部分,你会得到所有可以运行在任何静态服务器上的页面,比如 Nginx 或 Apache。所以,它在树莓派上完全可以运行。

Olimpiu Pop:那么对于非程序员来说友好吗?仅仅告诉他们“写一个 Markdown 文件并丢进去”就够了吗?

Andy Damevin:是的,我们已经有非 Java 友好的用户在使用它了,反馈比其他工具(如 Jekyll 或 Hugo)要好。它非常容易使用,而且很快会变得更简单。目前你需要安装 JDK,这可能会让一些人感到负担。我们正在制作一个小包装器,让任何人无需安装任何东西就能开始写作,我认为这很酷。我不认为有其他静态网站生成器能做到这一点。

Roq 的未来改进 [16:54]

Olimpiu Pop:你提到的这种“自举(Bootstrap)”方式,是不是就像 Gradle Wrapper 那样,我只需要下载并运行它即可?

Andy Damevin:是的。

Olimpiu Pop:我该如何获取它?通过下载还是 Homebrew 安装?

Andy Damevin:目前还在规划中。我们正致力于让整个过程尽可能精简。虽然还有些缺失的部分,但我们希望实现它。即使是运行一个二进制文件对某些作者来说也可能很困难。我们希望未来只需启动一个极其轻量的 Quarkus 应用,在浏览器中完成所有操作。

Olimpiu Pop:祝你们好运。Andy,除了我问的这些,关于 Roq 我们还应该知道什么?

Andy Damevin:我一直在开发 Quarkus 的 web-bundler 扩展。V2 版本将开箱即用支持 Tailwind。我知道很多人希望使用 Tailwind 或类似的 UI 框架来设计网站,这对静态网站生成器非常重要。我们还在考虑在两个地方引入 AI:一是 CMS 后台,它可以自动为你添加标签、猜测标题、撰写部分文章或提供写作建议。二是考虑到 AI 的未来,我们需要确保内容对 AI 友好。我们正在确保 Roq 能够自动生成 AI 消费所需的元数据和语义图,从而让内容更易于被 AI 抓取和理解。

Olimpiu Pop:最后一个问题,这可能更适合管理者而非开发者。IBM/Red Hat 生态系统有很多变动。Quarkus 的未来在哪里?是在 IBM 还是 Red Hat?关于授权协议的变更,你有何看法?

Andy Damevin:我可能不是回答这个问题的最佳人选。但我可以说的是,Quarkus 已经转向了 Commonhaus 基金会,这是最重要的一点。这意味着它完全开源,并由一个开源组织领导。

Olimpiu Pop:好的。所以 Quarkus 的命运与 Openhaus 基金会绑定在一起,这使它能够继续留在开源生态系统中,由该组织管理,对吧?

Andy Damevin:正是如此。这并不意味着 Red Hat 和 IBM 会停止支持它,他们依然在基于它构建项目,这意味着他们未来仍会依赖它。

Olimpiu Pop:太棒了。感谢你的时间和分享。

Andy Damevin:谢谢你,Olimpiu。

关于作者

Andy Damevin 是一位拥有深厚学术背景的软件开发者,毕业于法国格勒诺布尔国立综合理工学院(INPG)的计算机科学与网络专业,以及瑞典皇家理工学院(KTH)的软件开发与计算机安全专业。他专注于软件架构、安全和面向对象编程,特别注重代码质量和最佳实践。Andy 在 Java 和 JavaScript 生态系统以及多种编程语言和技术方面拥有丰富的经验。他热衷于创新,持续学习新技术,致力于交付满足客户需求的高质量产品。