我对Docpad中数据持久化背后的架构非常困惑。从博客和论坛,我知道内存(和/或目录)用于生成的内容。但Docpad的一个卖点是“完全基于文件”。从它的声音,它在Heroku或任何短暂的文件系统上托管它似乎不合逻辑。任何人都可以给出一些解释/澄清吗?
答案 0 :(得分:7)
DocPad是下一代网络架构的基础。这个思维导图展示了我们称之为完美的原因:
DocPad Architecture Vision http://d.pr/i/jmmZ+
工作流程如下:
从这个意义上讲,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