需要解释Docpad持久性

时间:2013-08-02 12:17:44

标签: node.js docpad

我对Docpad中数据持久化背后的架构非常困惑。从博客和论坛,我知道内存(和/或目录)用于生成的内容。但Docpad的一个卖点是“完全基于文件”。从它的声音,它在Heroku或任何短暂的文件系统上托管它似乎不合逻辑。任何人都可以给出一些解释/澄清吗?

2 个答案:

答案 0 :(得分:7)

DocPad是下一代网络架构的基础。这个思维导图展示了我们称之为完美的原因:

DocPad Architecture Vision http://d.pr/i/jmmZ+

工作流程如下:

  1. 导入器可以从任何来源获取数据,无论是本地文件系统,还是tumblr或mongo数据库。
  2. 将这些内容注入DocPad内存数据库
  3. 在生成时,DocPad将呈现需要呈现的内容,并将静态内容输出到out目录中
  4. 动态文档(在每个请求上重新呈现的文档)和动态能力(服务器扩展)现在能够利用内存数据库并执行高级酷的东西,如文件上传,联系表单,搜索页面,等等< / LI>

    从这个意义上讲,DocPad是下一代Web架构,具有静态站点生成功能以及动态站点生成功能。 DocPad与传统Web架构的区别在于,传统的Web架构会考虑内容并模板化各自的存在,而DocPad认为它们是相同的,并且只是由它们的扩展分开。传统的Web体系结构在默认情况下也是动态的,静态站点生成通过缓存完成,而不是默认情况下静态的其他方式。

    由于这种负载在内存数据库中的所有情况,我们正在遭受一些在生成和后代期间的性能增长的痛苦。 Discussion here.然而,没有任何东西无法用足够的时间和资源来解决。无论如何,由于静态特性(更快的请求)以及异步特性(更快的代),DocPad仍将比传统的Web架构更快。

    就如何处理文件上传而言:

    • 如果您正在使用DocPad进行静态网站,您可以在其他地方使用后端API服务器进行上传,并将数据作为单页应用程序样式加载到DocPad中。

      < / LI>
    • 如果您使用DocPad进行动态网站,您可以在像Heroku这样的服务器上托管DocPad,并扩展服务器以处理文件上传到目标,如Amazon S3,Dropbox或MongoDB等。然后,您可以选择通过templateData作为链接公开文件,或者将文件作为文件注入DocPad内存数据库。您选择哪一个是您是否只想引用上传或将其视为DocPad Universe中的头等公民(它获取自己的URL和页面)。

    对于动态网站,我会说我真的采用静态网站+单页面应用程序方法。您可以获得诸如响应式设计,离线支持,非常快速的用户体验等优势,无论使用哪种Web架构,您都无法通过动态站点方法来完成它。

答案 1 :(得分:1)

好吧,我不能完全理解本杰明的优秀解释,但如果你想要一个TLDR解释:

docpad用于(最大用例)生成STATIC网站,a-la github页面或20世纪90年代的旧网站。您可以随意编写页面(Jade,eco,coffeescript等),它将编译页面并输出HTML文件。把它想象成“编译一次服务器永远”的事情。

另一方面,如果您想在自己的网站上使用动态内容,则需要使用Nodej从其他网站提取动态数据,或者动态生成。

至于你对Heroku的短暂文件系统的关注,(我不确切知道它是如何工作的)你可以使用亚马逊的S3进行存储。查看this