我对如何在 Docpad 中持久保存数据的架构感到非常困惑。从博客和论坛中,我了解到内存(和/或输出目录)用于生成的内容。但 Docpad 的卖点之一是“完全基于文件”。从它的声音来看,将它托管在 Heroku 或任何临时文件系统上似乎不合逻辑。谁能给出一些解释/澄清?
2 回答
DocPad 被定位为下一代网络架构。这个思维导图展示了为什么我们称之为完美:
DocPad 架构愿景 http://d.pr/i/jmmZ+
工作流程是这样的:
- 进口商从任何来源引入数据,无论是本地文件系统、tumblr 还是 mongo 数据库。
- 这些被注入到 DocPad 内存数据库中
- 在生成时,DocPad 将渲染需要渲染的内容,并将静态内容输出到 out 目录
- 动态文档(在每个请求上重新呈现的文档)和动态功能(服务器扩展)现在能够利用内存数据库并执行高级的很酷的东西,比如文件上传、联系表格、搜索页面等等
从这个意义上说,DocPad 是具有静态站点生成能力和动态站点生成能力的下一代 Web 架构。DocPad 与传统 Web 架构的不同之处在于,传统 Web 架构将内容和模板视为独立的存在,而 DocPad 认为它们相同,只是通过扩展名分开。传统的 Web 架构默认也是动态的,静态站点生成是通过缓存完成的,而不是默认情况下是静态的。
由于在内存数据库情况下加载所有内容,我们在生成和生成后的性能方面遇到了一些增长的痛苦。在这里讨论。但是,没有什么是无法用足够的时间和资源解决的。尽管如此,由于静态特性(更快的请求)和异步特性(更快的生成),DocPad 仍然会比您的传统 Web 架构更快。
关于如何处理文件上传:
如果您正在使用 DocPad 做一个静态网站,您将在其他地方有一个后端 API 服务器,您也可以进行上传并将数据作为单页应用程序样式加载到 DocPad 中。
如果您正在使用 DocPad 做一个动态网站,您可以在 Heroku 之类的服务器上托管 DocPad,并扩展该服务器以处理文件上传到 Amazon S3、Dropbox 等目的地或 MongoDB 等。然后,您可以选择通过 templateData 作为链接公开文件,或将文件作为文件注入 DocPad 内存数据库。您选择哪一个是您是否只想引用上传或将其视为 DocPad 世界中的一等公民(它拥有自己的 URL 和页面)。
对于动态站点,我想说我真的很喜欢静态站点+单页应用程序的方法。您可以获得响应式设计、离线支持、真正快速的 UX 等好处,如果不这样做,无论您在哪种 Web 架构上构建它,您都很难通过动态站点方法来完成它。
好吧,我不能结束本杰明的出色解释,但如果你想要一个 TLDR 解释:
docpad 用于(最大用例)生成静态网站、a-la github 页面或 1990 年代的旧网站。你可以用任何你喜欢的方式(Jade、eco、coffeescript 等)编写你的页面,它会编译页面并输出 HTML 文件。将其视为“永远编译一次服务器”的事情。
另一方面,如果您想在您的站点上使用动态内容,您希望使用 Nodejs 从其他站点提取动态数据,或动态生成它。
至于您对 Heroku 的临时文件系统的担忧,(我不知道具体是如何工作的)您可以使用 Amazon 的 S3 进行存储。看看这个