静态站点生成器变得越来越流行,如果我的预测正确的话,2016年将是其使用量爆发的一年。下面解释一下我们所说的“静态站点生成器”到底是什么。
什么是静态站点?
回想一下你建立的第一个站点。很多开发者都是通过创建一系列独立的 HTML 文件开始的。每一个都会包含一些资源,如 CSS、图片,或许还有一些 JS。你可能会直接在文件系统中直接打开这些文件,而不需要使用WEB 服务器。就是这么简单。
当你的站点变得越来越复杂的时候,麻烦就来了。考虑下导航:在每个页面中它可能都是一样的,但当增加一个新的页面时,就需要更新其他所有的页面。甚至当图片或CSS的文件结构发生变化时,也会产生很多麻烦。你可能会考虑服务器端的引入或者PHP,但一个更方便的选择是使用内容管理系统(CMS)。
什么是内容管理系统?
内容管理系统通常会提供管理控制面板–它允许作者将编写的内容存储到后端的数据库。当用户请求一个网址的时候,CMS 需要:检测需要请求哪一页
从数据库请求相应的数据
加载 HTML 模版(通常是在文件系统中)
使用模版渲染内容
把格式化的 HTML 内容返回给用户浏览器
这些几乎是在瞬间完成的。模版可能会包含一些代码,根据导航层级结构生成菜单。大约有超过四分之一的人会选择使用 PHP/MySQL 驱动的 WordPress 来管理他们的站点。
不幸的是,CMS 也会产生一些问题:你需要遵循 CMS 的工作方式,想添加自定义文本或者组件可能不是很方便
服务器需要做更多的工作,可能会影响到性能
可能还有其他问题,如软件升级或者数据库故障,都会使你的站点 Down 掉
什么是静态站点生成器?
静态站点生成器是介于手工编码的静态站点和 CMS 之间,同时保留两者优点的折中解决方案。本质上,你会使用类似 CMS 模版的概念生成静态 HTML 站点。内容可能会是从数据库中提取的,但通常情况下,会使用 Markdown 文件。
站点生成可以是在你的开发机器或临时服务器上进行。之后产生的 HTML 文件被部署到 WEB 服务器上。用户将永远不会知道其中的差别。
一个相关的概念是 “Headless” 或 “Decoupled” CMS。它们使用一些接口如 WordPress 来管理内容,但允许其他系统通过 REST API 来获取数据。因此,静态站点生成器可以使用内部服务器上的 WordPress 中提取数据生成静态站点。产生的静态站点可以上传到 WEB 服务器–但安装的 WordPress 应该永远都不能被外部访问到。
一些流行的静态站点生成器包括:Jekyll、Pelican、Hugo 以及 Metalsmith,可以访问 StaticGen 查看更多。下面说说使用静态站点生成器的一些好处。
1. 方便灵活
CMS 通常会限制你的选择,因为它们依赖于特定的数据库。如果你想在页面上添加一个 Twitter 小工具,你通常就需要一个插件、或者短代码、或者一些自定义的函数。
在静态站点,你可以直接把它插入到文件、或使用partial/snippet。基本没有任何限制,因为你不需要受 CMS 强加的那些束缚。
2. 更好的性能
大多数的 CMS 提供内置或依靠插件的缓存系统以确保生成页面,当需要的时候重用。虽然管理、验证、重新生成页面需要开销,但这还是有效果的。
而静态站点是预缓存、永不过期的页面。在部署之前还可以压缩文件以确保最小化加载。静态站点始终要比使用相似模版的 CMS 驱动的站点性能更好。
3. 更少的服务器端依赖
典型的 WordPress 安装需求:一个合适的操作系统,如 Ubuntu 或 CentOS
一个 Web 服务器,如 Apache 或 NGINX
PHP 和相关扩展,以及 Web 服务器配置
MySQL
WordPress 应用
一些必要的插件
主题/模版代码
这些依赖都必须安装和管理。WordPress 相比其他应用需要更少的依赖,但任何一个地方的更新都可能引起混乱。
静态站点是轻量级的,可以托管在任何可以返回 HTML 的服务器上。不需要其他的安装、管理和更新。
4. 更高的可靠性
CMS 系统很复杂,有很多故障点,不管运行多长时间的 WordPress 都可能遇到过 “Failed to establish a database connection” 的错误。流量的突增等不可预见的 CMS 问题,都可能导致数据库崩溃或者连接受限。
静态站点服务器很少出现这种情况,因为它只需返回 HTML 文件。虽然仍有肯能出现服务器崩溃,但它可以接受更多的并发请求。
5. 卓越的安全性
别人攻击你的网站可能会有多种原因。流量劫持、流氓广告、链接、未经用户授权的恶意软件托管等。
CMS 为攻击开启了大门。最明显的是登录界面:用户密码的安全性是最弱的。要知道,任何其他运行在服务器端的页面都有潜在的安全漏洞–例如,通过联系表单向你发送垃圾邮件。
静态网站很少,或者没有服务器端的功能。你无法通过脚本或者数据库漏洞来访问它。有人仍可能通过 FTP 或 SSH 访问,但他们会尽力做更多其他的破坏,而不是破坏网页或者上传文件。通过 git status 或者文件夹检测就可以快速找出问题。这比修改密码、修复站点然后重新生成它们要简单的多。
6. 客户端控制注意事项
你可能需要花费数周的时间来制作具有吸引力的主题。但使用 CMS 并不容易,并且它为内容编辑器提供了强大的功能。你可以锁定一些功能,如安装插件,但这并不能阻止其他人更改字体、添加怪异的颜色、使用很差的排版或者布局。
静态站点可以使用 Markdown 文件,这限制了用户的选择,他们会犯更少的错误,不会产生影响页面的情况。有些人可能会想念 CMS 的管理面板,但你可以:使用现有的 CMS,并在生成前清理数据,或者
提供更简单的工作流,如在 StackEdit 中编辑 Dropbox 文件。
7. 版本控制和测试
数据库数据是很容易丢失的。CMS 允许用户随意的添加、删除、修改内容。清空整个站点也只需要几步点击。你可以备份数据,但即使是定期这么做,仍会丢失一部分数据。
静态站点是安全的,假如你使用 Markdown 文件和 Git 之类的版本控制系统。旧的文件会被保留,并且修改可以很快的撤销。测试变得更加容易,因为网站可以在任何地方生成并预览–即使是在你自己的电脑上。
这就是使用静态站点的好处,对吗?