需要对 Docpad 持久性进行解释

2024-02-28

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


DocPad 被定位为下一代 Web 架构。这张思维导图展示了为什么我们如此完美地称呼它:

DocPad 架构愿景 http://d.pr/i/jmmZ+ https://github.com/bevry/docpad/issues/543

工作流程是这样的:

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

从这个意义上说,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(使用前将#替换为@)

需要对 Docpad 持久性进行解释 的相关文章

随机推荐

  • 是否可以让空的 RequestParam 值使用 defaultValue?

    如果我有一个类似于以下内容的请求映射 RequestMapping value test method RequestMethod POST ResponseBody public void test RequestParam value
  • Java 中的无符号短整型

    我怎样才能声明unsigned shortJava 中的值 你不能 真的 Java 没有任何无符号数据类型 除了char 诚然你could use char 这是一个 16 位无符号类型 但在我看来这将是可怕的 因为char显然适用于文本
  • Python QuTiP 中的集成未成功

    我一直在尝试使用 QuTiP 来求解量子力学矩阵微分方程 Lindblad 方程 这是代码 from qutip import from matplotlib import import numpy as np hamiltonian np
  • 用其他语言编写 JavaScript

    我有一些不会说英语的客户 他们希望我用另一种语言为他们编写 JavaScript 浏览器可以理解其他语言吗 还是我仅限于非英语注释 navigateur nomApp indice Microsoft 代替 navigator appNam
  • 当没有按钮时,如何防止 fetch 请求重新加载 Javascript 页面?

    首先我要说的是 有无数的线程描述了涉及按钮的问题 通常 只需对传入的事件调用 event preventDefault 即可解决该问题 但是 如果在发生超出用户控制范围的事件 例如 经过一定量的帧后 后调用 post 请求 该怎么办 mak
  • 在 pandas/matplotlib 中获取散点图的 Colorbar 实例

    如何获取 pandas DataFrame plot 创建的绘图的内部创建的颜色条实例 以下是生成彩色散点图的示例 import matplotlib pyplot as plt import pandas as pd import num
  • 尺寸改变时宽度不改变

    我已经这样做很多年了 但现在它不起作用了 private void Form1 Deactivate object sender EventArgs e this Size new Size 30 29 txt Visible false
  • 有基础活动课程好吗?

    拥有好不好BaseActivity类 它将作为所有其他活动的超级类 我需要这个来为活动提供一些通用的实现 基础活动 public class BaseActivity extends Activity All Common implemen
  • 在 C# 中移动 Form2 时移动 Form1

    我有两种形式 Form2正在被打开Form1 像这样 Form2 ShowDialog StartPosition of Form2配置为centerParent 我需要固定位置Form2在 Form1 的中心 这样当我移动时Form2 F
  • 如何为 SSL 握手配置 CFStream(或 NSStream)?

    我正在使用 CFStream NSStream 建立 http 连接 我希望能够检测到 SSL 握手在三种情况下失败 情况A 服务器不可信 情况 B 服务器受信任 但要求提供客户端证书 情况 C 服务器不受信任 它要求客户端证书 今天 我没
  • Yeoman 无法识别全球安装的发电机

    I ran sudo npm install g generator flask它被保存了 我能够通过运行来确认npm list g 然后我跑yo flask 我以为这会起作用 但收到一条错误消息 Error flask You don t
  • Oracle在Java中的RETURNING INTO用法(JDBC、Prepared Statement)

    我正在使用 JDBC 执行 Oracle 语句 如下所示 INSERT INTO MYTABLE MYDATA VALUES RETURNING MY CALCULATED DATA INTO MYTABLE s def makes MY
  • Intellij 完成贡献者

    我正在为 intellij 开发一个插件 我想向基于 xsd 的 xml 编辑器添加自定义建议 到目前为止 我可以从 xsd 文件中获取所需的建议 我已经实现了 xml 的完成贡献者 如下所示 import com intellij cod
  • 将两个元素对齐在同一行

    我正在尝试对齐两个不同的 p 同一行上的元素 我让它工作了 但它完全弄乱了我的标志 他们俩 p p 元素是您在徽标两侧看到的 TEST 对齐的代码是这样的 HTML代码 p div class container div align cen
  • php 解析错误不会显示

    我正在运行 ubuntu 10 04 nginx php fpm 5 4 如果我设置display errors On在 php ini 中 所有错误都会被打印 如果相反 我将其设置为关闭 然后使用 ini set display erro
  • ggplotly 上的主标题和 legend.position 问题

    我在如何在 ggplotly 中定位主标题和图例时遇到问题 我希望我的主标题位于图表顶部并左对齐 我还希望我的图例位于图表的底部中心 这是我的代码 library ggplot2 library dplyr library tidyr li
  • 如何更改bookdown中的图形标题格式

    使用 bookdown 单个文档 时 图会自动编号为 图 1 图标题文本 在化学中 惯例是将主要数字标记为 图1 图标题的文本 对于支持信息文件 图S1 图标题的文本 另外 在文本中的图形参考中 我们需要 如图 1 所示 所以参考文本不应该
  • Windows8 中的首选字体大小需要计算器吗?

    在查看一些官方 Windows8 Metro 材料时 我看到了这行 xaml
  • Ken Burns 效果与 nivo 滑块

    有没有人设置一个尼沃滑块 http nivo dev7studios com 平移每个图像 又名肯伯恩斯效应 http en wikipedia org wiki Ken Burns effect 我正在尝试实现它 但有点棘手 事实上 我的
  • 需要对 Docpad 持久性进行解释

    我对 Docpad 中数据持久化背后的架构感到非常困惑 从博客和论坛中 我了解到内存中 和 或输出目录 用于生成的内容 但Docpad的卖点之一是 完全基于文件 从表面上看 将其托管在 Heroku 或任何临时文件系统上似乎不合逻辑 谁能给