【问题标题】:Need explanation for Docpad persistence需要解释 Docpad 持久性
【发布时间】:2013-08-08 22:00:44
【问题描述】:

我对如何在 Docpad 中持久保存数据的架构感到非常困惑。从博客和论坛中,我了解到内存(和/或输出目录)用于生成的内容。但 Docpad 的卖点之一是“完全基于文件”。从它的声音来看,将它托管在 Heroku 或任何临时文件系统上似乎不合逻辑。谁能给出一些解释/澄清?

【问题讨论】:

  • 您将它托管在像 Heroku 这样的服务器或其他支持 Node.js 的服务器上的原因是您的网站中有动态数据。 DocPad 可以是完全静态的,另一方面也可以是完全动态的。或者它可以是他们两个。但是,如果您网站上的任何内容都是动态的,或者您需要不时重新生成您的网站,那么您需要一个支持 Node.js 的服务器。这是否回答你的问题?如果是的话,那么我可以把它放在一个答案中。 :)
  • 感谢您的回答。我忘了提到文件上传。 Docpad 如何在 Heroku 的临时文件系统中处理它?临时文件系统不会永久写入任何内容。抱歉,我仍然对 Docpad 网站上的“完全基于文件”感到有些困惑。
  • 您可能想先了解什么是静态网站。这就是 DocPad,一个静态网站 generator。它会生成一个静态网站,您可以将其部署在任何地方。基本上内容不会改变,总是以相同的方式提供服务,这使得它成为一种更快的网站服务方式,因为没有服务器端逻辑。 “完全基于文件”的想法意味着服务器中没有数据库。
  • 再次感谢。我认为 Docpad 正在遭受“身份危机”。它是一个 Web 应用程序框架还是仅仅是一个面向非程序员的网站生成器?如果这是关于提供静态内容(实际上没有什么是静态的:(),那么精简“设计师和开发人员”的吸引力是什么?我对开发人员的印象是编写后端逻辑代码的人??在我的第一个实验中,Docpad 是很重。我可以看到它很快就会受到一些性能问题的影响。

标签: node.js docpad


【解决方案1】:

DocPad 被定位为下一代 Web 架构。这个思维导图展示了为什么我们称之为完美:

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

工作流程是这样的:

  1. 进口商从任何来源引入数据,无论是本地文件系统、tumblr 还是 mongo 数据库。
  2. 这些被注入到 DocPad 内存数据库中
  3. 在生成时,DocPad 将渲染需要渲染的内容,并将静态内容输出到 out 目录中
  4. 动态文档(在每个请求上重新呈现的文档)和动态功能(服务器扩展)现在能够利用内存数据库并执行高级的很酷的东西,例如文件上传、联系表格、搜索页面等等

从这个意义上说,DocPad 是具有静态站点生成能力和动态站点生成能力的下一代 Web 架构。 DocPad 与传统 Web 架构的不同之处在于,传统 Web 架构将内容和模板视为独立的存在,而 DocPad 认为它们相同,只是通过扩展名分开。传统的 Web 架构在默认情况下也是动态的,静态站点生成是通过缓存完成的,而不是默认情况下是静态的。

由于在内存数据库情况下加载所有内容,我们在生成期间和生成后的性能方面遇到了一些增长的痛苦。 Discussion here. 但是,没有什么是无法用足够的时间和资源解决的。尽管如此,由于静态特性(更快的请求)和异步特性(更快的生成),DocPad 仍然会比您的传统 Web 架构更快。

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

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

    1234563 .然后,您可以选择通过 templateData 作为链接公开文件,或将文件作为文件注入 DocPad 内存数据库。您选择哪一个是您是否只想引用上传或将其视为 DocPad 世界中的一等公民(它拥有自己的 URL 和页面)。

对于动态网站,我想说我真的很喜欢静态网站+单页应用的方式。您可以获得响应式设计、离线支持、真正快速的 UX 等好处,如果不这样做,无论您在哪种 Web 架构上构建它,您都很难通过动态网站方法来完成它。

【讨论】:

    【解决方案2】:

    好吧,我无法结束 Benjamin 的出色解释,但如果您想要 TLDR 解释:

    docpad 用于(最大用例)生成静态网站、a-la github 页面或 1990 年代的旧网站。你可以用任何你喜欢的方式(Jade、eco、coffeescript 等)编写你的页面,它会编译页面并输出 HTML 文件。将其视为“永远编译一次服务器”的事情。

    另一方面,如果您想在您的网站上提供动态内容,您可能希望使用 Nodejs 从其他网站中提取动态数据,或即时生成这些数据。 p>

    至于您对 Heroku 的临时文件系统的担忧,(我不知道具体是如何工作的)您可以使用 Amazon 的 S3 进行存储。查看this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2010-12-17
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多