我对 Docpad 中数据持久化背后的架构感到非常困惑。从博客和论坛中,我了解到内存中(和/或输出目录)用于生成的内容。但Docpad的卖点之一是“完全基于文件”。从表面上看,将其托管在 Heroku 或任何临时文件系统上似乎不合逻辑。谁能给出一些解释/澄清?
DocPad 被定位为下一代 Web 架构。这张思维导图展示了为什么我们如此完美地称呼它:
DocPad 架构愿景 http://d.pr/i/jmmZ+ https://github.com/bevry/docpad/issues/543
工作流程是这样的:
- 导入器从任何来源引入数据,无论是本地文件系统、tumblr 还是 mongo 数据库。
- 这些被注入到 DocPad 内存数据库中
- 在生成时,DocPad会渲染需要渲染的内容,并将静态内容输出到out目录中
- 动态文档(根据每个请求重新呈现的文档)和动态功能(服务器扩展)现在能够利用内存数据库并执行高级的酷功能,例如文件上传、联系表单、搜索页面等
从这个意义上说,DocPad 是下一代 Web 架构,具有静态站点生成能力,以及动态站点生成能力。 DocPad 与传统 Web 架构的区别在于,传统 Web 架构将内容和模板视为不同的存在,而 DocPad 认为它们是相同的,只是通过扩展名分开。传统的 Web 架构默认情况下也是动态的,通过缓存完成静态站点生成,而不是相反默认情况下是静态的。
由于这种将所有内容加载到内存数据库的情况,我们在生成期间和生成后的性能方面遇到了一些成长的烦恼。在此讨论。 https://github.com/bevry/docpad/issues/529然而,只要有足够的时间和资源,没有什么是不能解决的。不管怎样,由于静态特性(更快的请求)和异步特性(更快的生成),DocPad 仍然比传统的 Web 架构更快。
至于如何处理文件上传:
如果您使用 DocPad 制作静态网站,您将在其他地方拥有一个后端 API 服务器,您也可以进行上传并将数据作为单页应用程序样式加载到 DocPad 中。
如果您使用 DocPad 制作动态网站,则可以将 DocPad 托管在 Heroku 等服务器上,并扩展该服务器以处理文件上传到 Amazon S3、Dropbox 等目的地或 MongoDB 等的情况。然后,您可以选择通过 templateData 将文件作为链接公开,或将文件作为文件注入到 DocPad 内存数据库中。您选择哪一个取决于您是否只想引用上传内容或将其视为 DocPad 宇宙中的一等公民(它有自己的 URL 和页面)。
对于动态网站,我想说我确实采用静态网站+单页应用程序方法。您可以获得诸如响应式设计、离线支持、真正快速的用户体验等好处,如果不这样做,您将很难使用动态网站方法来实现它,无论您在哪种 Web 架构上构建它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)