欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

使用静态站点生成器的 7 个理由

静态站点生成器变得越来越流行,如果我的预测正确的话,2016年将是其使用量爆发的一年。下面解释一下我们所说的“静态站点生成器”到底是什么。

   

static-stie-generators    

什么是静态站点?

回想一下你建立的第一个站点。很多开发者都是通过创建一系列独立的 HTML 文件开始的。每一个都会包含一些资源,如 CSS、图片,或许还有一些 JS。你可能会直接在文件系统中直接打开这些文件,而不需要使用WEB 服务器。就是这么简单。

当你的站点变得越来越复杂的时候,麻烦就来了。考虑下导航:在每个页面中它可能都是一样的,但当增加一个新的页面时,就需要更新其他所有的页面。甚至当图片或CSS的文件结构发生变化时,也会产生很多麻烦。你可能会考虑服务器端的引入或者PHP,但一个更方便的选择是使用内容管理系统(CMS)。

什么是内容管理系统?

内容管理系统通常会提供管理控制面板–它允许作者将编写的内容存储到后端的数据库。当用户请求一个网址的时候,CMS 需要:

  1. 检测需要请求哪一页

  2. 从数据库请求相应的数据

  3. 加载 HTML 模版(通常是在文件系统中)

  4. 使用模版渲染内容

  5. 把格式化的 HTML 内容返回给用户浏览器

这些几乎是在瞬间完成的。模版可能会包含一些代码,根据导航层级结构生成菜单。大约有超过四分之一的人会选择使用 PHP/MySQL 驱动的 WordPress 来管理他们的站点。

不幸的是,CMS 也会产生一些问题:

  • 你需要遵循 CMS 的工作方式,想添加自定义文本或者组件可能不是很方便

  • 服务器需要做更多的工作,可能会影响到性能

  • 可能还有其他问题,如软件升级或者数据库故障,都会使你的站点 Down 掉

什么是静态站点生成器?

静态站点生成器是介于手工编码的静态站点和 CMS 之间,同时保留两者优点的折中解决方案。本质上,你会使用类似 CMS 模版的概念生成静态 HTML 站点。内容可能会是从数据库中提取的,但通常情况下,会使用 Markdown 文件。

站点生成可以是在你的开发机器或临时服务器上进行。之后产生的 HTML 文件被部署到 WEB 服务器上。用户将永远不会知道其中的差别。

一个相关的概念是 “Headless” 或 “Decoupled” CMS。它们使用一些接口如 WordPress 来管理内容,但允许其他系统通过 REST API 来获取数据。因此,静态站点生成器可以使用内部服务器上的 WordPress 中提取数据生成静态站点。产生的静态站点可以上传到 WEB 服务器–但安装的 WordPress 应该永远都不能被外部访问到。

一些流行的静态站点生成器包括:JekyllPelicanHugo 以及 Metalsmith,可以访问 StaticGen 查看更多。下面说说使用静态站点生成器的一些好处。

推荐阅读:《Katana – 支持 Markdown 语法的 PHP 静态站点/博客生成器

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 之类的版本控制系统。旧的文件会被保留,并且修改可以很快的撤销。测试变得更加容易,因为网站可以在任何地方生成并预览–即使是在你自己的电脑上。

这就是使用静态站点的好处,对吗?

via:sitepoint.com,由 Specs 翻译,发布在 https://9iphp.com/未经允许,禁止转载



本文共 8 个回复

  • themebetter 2016/03/17 10:09                        

    安全性会更好吗

    回复
                           
    • Specs  2016/03/17 11:37                            

      @ themebetter 相对来说更好吧

      回复
                                 
  • Ray 2016/03/17 13:27                        

    Github Pages 把百度蜘蛛屏蔽了,推荐用 Coding Pages

    回复
                           
    • Specs  2016/03/17 16:53                            

      @ Ray Coding 的好像是新出的吧

      回复
                                 
  • 轻微生活 2016/03/21 10:23                        

    静态网站不是会更容易被整站复制吗?怎么还更安全了,不解 :wink:                        

    回复
                           
    • Specs  2016/03/22 10:51                            

      @ 轻微生活 复制的这方面的话,静态和动态都一样吧~ 动态更容易被攻击,数据库啊服务器啊什么的

      回复
                                 
  • itfanr 2016/03/23 20:53                        

    你还在用WordPress,嘿嘿。

    回复
                           
    • Specs  2016/03/23 21:26                            

      @ itfanr 用很久了,就不想换了~~

      回复
                                 

发表评论

来自  https://9iphp.com/web/php/7-reasons-use-static-site-generator.html

普通分类: