静态网站生成器 (SSG) 在过去十年中日益流行。本文探讨了静态网站提供的开发者友好型构建流程、更轻松的部署、改进的性能和更好的安全性如何使您的网站受益。首先,让我们明确“静态网站生成器”一词的含义……
关键要点
什么是静态网站?
回想一下您构建的第一个网站。大多数开发人员首先创建一系列包含在单个 HTML 文件中的页面。每个页面都会调用资源,例如图像、CSS,以及一些 JavaScript 代码。您可能会直接从文件系统启动这些文件,而无需 Web 服务器。那时一切都很简单。但随着网站规模越来越大、越来越复杂,困难也随之而来。考虑一下导航:它在每个文件中可能都相似,但是添加新页面需要更新其他所有页面。甚至对 CSS 和图像的引用也会随着文件夹结构的演变而变得笨拙。您可能已经考虑过服务器端包含或 PHP 等选项,但更简单的选项可能是内容管理系统 (CMS)……
什么是内容管理系统?
CMS 通常提供管理控制面板。这些面板允许作者编写存储在后端数据库中的内容。当访问者请求 URL 时,CMS 会:1. 确定需要哪个页面;2. 从数据库请求相应的内容;3. 加载 HTML 模板(通常来自文件系统);4. 在模板中呈现内容;5. 将格式化的 HTML 页面返回给访问者的浏览器。
这几乎是瞬间完成的。模板可以包含根据导航层次结构生成菜单的代码。一切都很顺利,超过十分之四的人选择使用基于 PHP/MySQL 的开源 WordPress CMS 来管理他们的网站。不幸的是,CMS 带来了一系列不同的问题:- 您需要遵守 CMS 的工作方式。添加自定义文本或组件可能会很麻烦;- 服务器的工作量更大,性能可能会受到影响;- 存在其他故障点。软件升级或数据库故障可能会导致您的网站宕机。
什么是静态网站生成器?
SSG 是使用手动编码的静态网站和完整 CMS 之间的折衷方案,同时保留了这两者的优点。从本质上讲,您可以使用类似 CMS 的概念(例如模板)生成基于静态 HTML 页面的网站。内容可以从数据库、Markdown 文件、API 或任何实用的存储位置提取。站点生成可以在您的开发机器、暂存服务器上进行,或者使用服务在将更改推送到代码存储库时进行构建。然后,生成的 HTML 文件和其他资源将部署到实时 Web 服务器。术语“静态”并不意味着“不变”。SSG 构建页面一次,而 CMS 在每次请求时构建页面。最终结果是相同的,用户永远不会知道其中的区别。相关的概念是“无头”或“解耦”CMS。这些系统使用 WordPress 等界面来处理内容管理,但允许其他系统通过 REST API 或 GraphQL API 访问数据。因此,诸如 Eleventy 之类的 SSG 可以使用从内部服务器提取的 WordPress 页面内容来构建静态网站。生成的 HTML 文件可以上传到 Web 服务器,但 WordPress 安装永远不需要从组织外部公开访问。术语 Jamstack(JavaScript、API 和标记)也用于与静态站点相关的方面。它指的是框架、无服务器函数和相关工具的兴起,这些工具生成静态文件,但允许创建更复杂的交互性。流行的静态网站生成器包括 Jekyll、Eleventy、Gatsby、Hugo 和 Metalsmith。大多数语言都提供 SSG(请参阅 StaticGen 获取更多信息)。诸如 Next.js 之类的框架会在可能的情况下静态呈现页面,但也允许开发人员在必要时运行服务器端代码。让我们来研究一下使用 SSG 的好处……
1. 灵活性
CMS 通常会限制您的选项,因为它们与具有特定字段的数据库绑定。如果您想向某些页面添加 Twitter 小部件,通常需要一个插件、一个简码或一些自定义功能。在静态站点中,小部件可以简单地直接插入文件或使用部分/片段。限制很少,因为您不受 CMS 强加的限制。
2. 更好的性能
大多数 CMS 应用程序都提供内置的或插件驱动的缓存系统,以确保尽可能生成和重用页面。这是有效的,尽管管理、验证和重新生成缓存页面的开销仍然存在。静态站点可以创建永远不需要过期的预缓存页面。文件也可以在部署之前进行缩小,以确保最小的负载,并可以通过全球内容分发网络 (CDN) 轻松部署。静态站点的性能始终优于使用类似模板的 CMS 驱动的版本。
3. 更少的服务器端依赖性
典型的 WordPress 安装需要:- 适用的操作系统,例如 Ubuntu 或 CentOS;- Web 服务器,例如 Apache 或 NGINX;- 带有相关扩展和 Web 服务器配置的 PHP;- MySQL;- WordPress 应用程序;- 任何必要的插件;- 主题/模板代码。
必须安装和管理这些依赖项。WordPress 比其他一些应用程序需要更少的精力,但单个更新仍然可能导致混乱。静态网站生成器可能需要同样多的依赖项,但它们可以在开发人员的 PC 上运行,不会部署到生产服务器。SSG 生成客户端 HTML 文件和相关资源,这些资源可以托管在任何 Web 服务器上。无需安装、管理或维护其他任何内容。
4. 提高可靠性
CMS 很复杂,有很多活动部件和故障点。运行 WordPress 站点一段时间后,您几乎肯定会遇到可怕的“无法建立数据库连接”错误。意外的 CMS 问题可能源于突然的流量激增,这会使服务器过载、数据库崩溃或限制活动连接。提供静态站点的工作量较小。在许多情况下,服务器只需要返回平面文件,因此根据流量需求进行扩展变得很简单。仍然有可能使 Web 服务器崩溃或使 API 过载,但这需要相当多的并发请求。
5. 卓越的安全性
有人可能想要攻击您的网站的原因有很多。流量劫持、恶意广告、链接、真实性欺骗和恶意软件托管都允许未经授权的用户获得金钱和/或赞誉。CMS 打开了许多攻击媒介。最明显的是登录屏幕:它仅与最弱的用户密码一样安全。请注意,任何运行服务器端代码的页面也提供了潜在的漏洞——例如通过您的联系表单发送垃圾邮件。可能并不明显有人获得了访问权限;最糟糕的罪魁祸首想要保持隐藏。静态站点可能几乎不需要服务器端功能。一些风险仍然存在,但它们很少像以前那样成问题:- 某人可以通过 SSH 或 FTP 访问服务器并篡改页面或上传文件。但是,通常可以轻松检查更改(可能使用 git status),擦除整个站点,然后再次重新生成它;- 静态站点调用的 API 在浏览器中公开,并且可以像任何服务器端代码一样被利用——例如表单电子邮件程序。良好的安全实践、CORS 和 CSP 将有所帮助。
6. 客户端控制注意事项
您可以花费数周时间为客户端构建一个有吸引力的 CMS 主题,让客户端在移交后的几分钟内就破坏他们的网站!使用 CMS 不一定容易,并且它为内容编辑器提供了相当大的权力。您可以锁定诸如插件安装之类的权限,但这并不能阻止某人更改字体、引入冲突的颜色、添加劣质照片或破坏布局。静态站点可以根据您的选择而变得有限或灵活。如果您使用 Markdown 或类似的平面文件,编辑器就不太可能犯错或对页面样式产生不利影响。有些人会错过 CMS 内容管理面板,但是您可以:1. 使用他们现有的 CMS,并在生成之前清理数据;或 2. 提供更简单的流程,例如在 StackEdit 或 Hackmd.io 中编辑基于 Git 的文件。
7. 版本控制和测试
数据库数据是易变的。CMS 允许用户随时添加、删除或更改内容。擦除整个站点只需点击几下。您可以备份数据库,但即使定期执行此操作,您仍然可能会丢失一些数据。静态站点通常更安全。内容可以存储在:- 平面文件:然后可以使用 Git 或类似系统对其进行版本控制。旧内容将被保留,并且可以快速撤消更改;- 私有数据库:仅在生成站点时才需要数据,因此无需将其公开在公共服务器上。
测试也变得更容易,因为站点可以在任何地方生成和预览——甚至在客户端的 PC 上。付出更多努力,您可以实施部署系统,以远程构建站点,并在将新内容推送到存储库、审查和批准后更新实时服务器。所以在静态站点世界里,一切都很美好。是吗?请阅读我的后续文章《不使用静态网站生成器的 7 个理由》。有关使用静态网站生成器构建站点的实际演示,请参阅:- 如何使用 Metalsmith 创建静态站点;- Eleventy 入门;- 如何将 WordPress 用作 Eleventy 的无头 CMS
静态网站生成器的常见问题解答 (FAQ)
静态网站生成器提供多种优势。首先,它们提供增强的安全性,因为它们无需数据库,从而降低了攻击风险。其次,它们提供改进的性能。由于站点是预先构建的,因此它们的加载速度更快,从而提供更好的用户体验。第三,它们具有成本效益。托管静态站点的成本通常低于动态站点。最后,它们为内容提供版本控制,允许您跟踪更改并在需要时恢复到以前的版本。
静态网站生成器通过预先构建网站的所有页面来提高网站性能。这意味着当用户请求页面时,可以立即提供服务,而无需任何服务器端处理。这大大减少了网站的加载时间,从而提供更快、更流畅的用户体验。
是的,您可以将静态网站生成器用于大型网站。但是,随着站点规模的增长,构建时间可能会增加。这是因为生成器必须预先构建每个页面。尽管如此,性能优势通常超过更长的构建时间,尤其是在内容不经常更改的站点中。
静态站点通常比动态站点更安全。这是因为它们不依赖于数据库或服务器端处理,而这些是攻击的常见目标。但是,与任何网站一样,静态站点并非不受所有类型攻击的影响,因此务必遵循 Web 安全性的最佳实践。
要使用静态网站生成器,您通常需要具备一些 HTML、CSS 和 JavaScript 知识。某些生成器还需要了解特定编程语言,例如 Ruby 或 Python。此外,您可能需要熟悉使用命令行和版本控制系统,例如 Git。
是的,您可以将静态网站生成器与无头 CMS 一起使用。这允许您在 CMS 中管理内容,然后使用生成器构建您的站点。这可能是一个强大的组合,提供 CMS 的优势以及静态站点的性能和安全优势。
选择合适的静态网站生成器取决于您的特定需求和技能。请考虑诸如其构建的语言、其使用的模板系统、其构建速度、社区支持及其与您正在使用的其他工具的兼容性等因素。
是的,您可以将静态网站生成器用于电子商务。但是,由于静态站点没有内置后端,因此您需要使用第三方服务来处理购物车功能和支付处理等方面。
一些流行的静态网站生成器包括 Jekyll、Hugo、Next.js、Gatsby 和 Hexo。每个都有其自身的优缺点,因此选择最适合您需求的生成器非常重要。
虽然静态网站生成器最适合静态内容,但它们可以在第三方服务的帮助下处理动态内容。例如,您可以使用 API 来提取动态数据,或使用 Disqus 等服务进行评论或使用 Formspree 等服务进行表单。
以上是使用静态站点生成器的7个理由的详细内容。更多信息请关注PHP中文网其他相关文章!