2013-08-02 34 views
4

我對數據如何在Docpad中持久存在的架構感到困惑。從博客和論壇中,我知道內存中(和/或out目錄)用於生成內容。但Docpad的賣點之一是「完全基於文件」。從它的聲音來看,將它託管在Heroku或任何短暫的文件系統似乎並不合邏輯。任何人都可以提供一些解釋/澄清?Docpad持久性需要說明

+0

您將其託管在Heroku等服務器或其他支持Node.js的其他服務器上的原因是您的網站中存在動態數據。 DocPad可以是完全靜態的,另一方面它可以是完全動態的。或者它可以是他們兩個。但是,如果您網站上的任何內容都是動態的,或者您需要不時重新生成網站,那麼您需要一臺支持Node.js的服務器。這是否回答你的問題?如果是的話,我可以把它放在答案中。 :) – greduan

+0

感謝您的答案。我忘了提及文件上傳。 Docpad如何在Heroku的臨時文件系統中處理它?臨時文件系統不會永久寫入任何內容。抱歉,我仍然對Docpad網站上的「完全基於文件的」感到困惑。 – 1001b

+0

您可能想要了解什麼是靜態網站。 DocPad就是這樣一個靜態網站*生成器*。它生成一個靜態網站,您可以在任何地方部署。基本上內容不會改變,它始終以相同的方式提供服務,這使得它成爲服務網站的更快方式,因爲沒有服務器端邏輯。 「完全基於文件」的想法意味着服務器中沒有數據庫正在進行。 – greduan

回答

7

DocPad被定位爲下一代Web架構。這種思維導圖展示了爲什麼我們完美地叫它:

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

的工作流程是,像這樣:

  1. 進口商在把數據從任何來源,無論是本地文件系統,或tumblr,或者mongo數據庫。
  2. 這些獲得注入DocPad內存數據庫
  3. 在生成時,DocPad然後將渲染需要渲染什麼,輸出靜態內容進入了目錄
  4. 動態的文檔(文檔,重新呈現在每個請求)和動態能力(服務器擴展)現在都能夠利用內存數據庫並執行高級酷東西,如文件上傳,聯繫表單,搜索頁等等

從這個意義上說,DocPad是一個具有靜態站點生成能力的下一代Web架構,以及動態站點生成能力。 DocPad與傳統網絡體系結構的區別在於,傳統的網絡體系結構考慮了內容和模板,DocPad認爲它們是相同的,並且通過擴展將它們分開。傳統的Web架構在默認情況下也是動態的,靜態網站生成是通過緩存完成的,而不是默認靜態的其他方式。

由於這一負載的內存數據庫的一切情況,我們正在遭受一些在成長和後代的表現與成長的痛苦。 Discussion here.但是沒有什麼東西不能用足夠的時間和資源來解決。無論如何,由於靜態性質(更快的請求)以及異步性質(更快的世代),DocPad仍然會比傳統Web體系結構更快。

在你將如何處理文件上傳方面:

  • 如果你正在做DocPad靜態網站,你將有一個後端API服務器在其他地方,你會做上傳過並加載數據放入DocPad中作爲單頁面應用程序樣式。

  • 如果您正在使用DocPad製作一個動態網站,您可以在Heroku等服務器上託管DocPad,並擴展服務器以處理文件上傳到諸如Amazon S3,Dropbox或MongoDB之類的目的地。然後,您可以選擇通過templateData作爲鏈接公開文件,或者將文件作爲文件注入DocPad內存數據庫。您選擇的是您是否想引用上傳文件或將其作爲DocPad Universe中的頭等公民(它獲得它自己的URL和頁面)。

對於動態網站,我會說我真的用靜態網站+單頁面應用程序的方法。您可以獲得諸如響應式設計,離線支持,非常快速的用戶體驗(UX)等好處,但無論您使用哪種Web體系結構,您都可以通過動態網站方法來完成它。

1

好了,我不能頂掉本傑明出色的交代,但如果你想有一個TLDR交代:

docpad用於(最大使用情況)生成靜態網站,一拉GitHub的頁面或舊90年代的網站。你可以用自己喜歡的方式編寫你的頁面(Jade,eco,coffeescript等),它將編譯頁面並輸出HTML文件。把它想象成「永遠編譯一次服務器」的東西。另一方面,如果您想在您的網站上使用動態內容,您希望使用Nodejs從其他網站獲取動態數據,或者動態生成動態數據。

至於你對Heroku的臨時文件系統的擔憂,(我不知道確切的工作原理),你可以使用Amazon的S3進行存儲。檢出this