静态还是动态?

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

Kev Quirk 的一篇简短观点文章:为什么我不使用静态网站生成器。Kev 使用 WordPress

想在iPad 上写博客?我可以。想在手机上写?没问题。在我不常使用的机器上写?只要有浏览器,都不是问题。

首先,值得了解的是,使用 WordPress 并不意味着你无法使用静态网站生成器。WordPress 具有一个API,这为在构建过程中调用该 API 并以此方式构建网站打开了大门。 Gatsby 就是这么做的,有一个插件可以导出静态网站,而像Frontity这样的项目则模糊了界限。

但我同意 Kev 在此处的推理。出于他所有以及其他 1000 个原因,运行 WordPress 网站是一个完全可以接受且通常很明智的选择。我认为它在稳健性和功能完备性方面具有优势。需要电子商务功能?它就在那里。需要表单?有很多很棒的插件。需要增强 CMS 的工作方式?您可以控制内容类型及其内容。需要身份验证?这是核心功能。希望获得很棒的编辑体验?Gutenberg 非常棒。

一次又一次地,我用 WordPress 快速有效地构建我想要构建的东西,这让我感到高效和强大。但我不希望专门针对 WordPress 来说明这一点;对于任何“经典”CMS 来说,这都是正确的。Craft CMS 具有一个开箱即用的 GraphQL API。我们刚刚发布了关于Drupal + Jamstack 网络研讨会的信息。

在相对较新的静态网站领域,一件小事最终可能变成一段研究和实施的旅程,就像你是地球上唯一第三个这样做的人一样。

说了这么多……

我对静态网站生成器和Jamstack 世界的看法如何?它们很棒。

我认为用这种方式构建网站有很多值得称道的地方。数据和前端的解耦非常聪明。安全性极佳。DX,加上部署预览和基于 Git 的一切,都非常棒。一开始获得的速度令人惊叹(从 CDN 提供 HTML 是一项壮举)。

就像经典的服务器端 CMS 不会阻止你构建静态网站一样,使用静态网站构建也不会阻止你进行动态操作——甚至是非常花哨的动态操作。Josh Comeau 有一篇很棒的新文章深入探讨了这一点。他构建了一个花哨的小应用,在浏览器中使用 React 进行了大量操作,但这并不意味着他仍然不能静态地提供大量内容。他称之为“思维方式的转变”,指的是你可能认为你需要数据库调用,但真的需要吗?数据库调用是否可能已经发生并生成了静态文件?如果没有,那么仍然可以部分生成,最后一部分通过动态方式获取。

我迫不及待地想要看到一个世界,在这个世界里,我们开始真正看到两全其美。我们尽可能多地使用静态方式,我们通过 API 获取无法以静态方式获取的内容,并且在整个过程中不会牺牲最佳工具。

何时选择静态网站……

  • 如果可以,你应该考虑它,因为它的速度和安全性无与伦比。
  • 如果你正在处理一个 Greenfield 项目。
  • 如果你的项目构建自可访问的 API 并使用这些 API,你可以在构建过程中调用该 API,以及在初始 HTML 加载后使用它。
  • 如果某个静态网站生成器看起来非常适合你正在做的事情。
  • 如果成本分析表明它更便宜。
  • 如果某些功能(如构建预览)对工作流程非常有帮助。

何时选择服务器端软件……

  • 如果你需要经典 CMS(例如 WordPress)的功能,并且从那里转向静态的的技术债务过高。
  • 如果你已经深度参与了一个服务器渲染项目(Ruby on Rails、Python 等),并且没有遇到任何现有问题。
  • 如果你的团队在该方面拥有最多的专业知识。
  • 如果成本分析表明它更便宜。
  • 如果想要构建的内容周围没有好的静态解决方案(例如论坛软件)。
  • 如果你遇到极端情况,例如数百万个 URL,并且静态构建时间过长。

避免静态网站的错误理由……

  • 你需要使用服务器来做一些事情。(为什么?你仍然可以在服务器上调用 API,无论是在构建时还是在运行时。)
  • 你需要身份验证。(为什么?Jamstack 可以使用 JWT 等完美地实现身份验证。)
  • 你甚至还没有考虑过以 Jamstack 方式做事。

选择服务器端软件的错误理由……

  • 你甚至还没有考虑过以 Jamstack 方式做事。
  • 因为你认为使用舒适/现有/经典/成熟/受支持的工具会让你无法构建任何静态内容。
  • SEO 之类的东西。(如果有的话,静态渲染的内容应该表现得更好。但如果转向静态意味着转向像产品数据这样的客户端调用,这是可以理解的。)