2013-06-24 48 views
0

我正在web.py,postgres和redis之上建立一個網站。在我的應用程序的一些視圖中,有一些用戶特定的信息。例如,如果用戶登錄,頂部欄上的鏈接將與非登錄用戶的視圖或諸如「welcome $ username」之類的內容不同。我可以通過渲染每個頁面來響應每個請求來實現它。除了用戶指定的信息外,某些視圖的其他部分完全相同。所以我想緩存呈現的頁面。我已經提出了一些實現方法,但我不知道要使用哪種方法,因爲我自己有點學習Web開發,所以我想知道專業Web開發人員是如何處理這個問題的。如何呈現和緩存用戶特定的頁面?

這裏是我的方法:

  • 保存一些數據在餅乾和寫一段javascript腳本來操縱HTML DOM頁面到達用戶的瀏覽器之後。這樣,在我的應用程序的某些視圖中,所有用戶都可以得到完全相同的頁面,但存儲在Cookie中的數據不同,然後使用javascript呈現的頁面不同,但我認爲爲每個用戶呈現並緩存每個版本的某些頁面這不是一個好主意......
  • 渲染並緩存部分頁面,並在請求進入時構建頁面。我使用web.py的Templetor渲染頁面。現在有一個基本的站點範圍模板可以作爲包裝器。如果我使用這種構造方法,而不是使用基本模板,則可能需要渲染和連接頁面的不同部分。然後爲每個用戶緩存適當的片段。

我該怎麼辦?有更好的解決方案嗎?對不起,我的可怕的英語寫作技巧:( 希望它可以表達我想要問的任何幫助將不勝感激,謝謝提前謝謝你。!d

編輯:代碼包含用戶特定信息是這樣

<nav> 
    <div class="wrapper"> 
    <div class="primary"> 
     <ul class="nav"> 
     <li><span>Home</span></li> 
     <li><span>About</span></li> 
     <li><span>Contact</span></li> 
     </ul> 
    </div> 

    <div class="secondary"> 
     $if session.logged_in: 
      <span>Welcome, $session.username</span> 
      <a href="/new">new post</a> 
      <a href="/logout">logout</a> 
     $else: 
      <a href="/register">register</a> 
      <a href="/login">login</a> 
    </div> 
    </div> 
</nav> 

我使用會話現在,這意味着我不能只是一個緩存版本爲每一位用戶。如何stackoverflow.com實現這一點?我看到最上面一欄的信息是不同的,當我沒有登錄,並確定我知道每個用戶的觀點是不同的...

+0

你的意思是渲染後在服務器端_caching_ HTML頁面? –

+0

@Febien是的!究竟。在redis中緩存呈現的頁面 – wcd0

+1

您可以查看[Varnish](https://www.varnish-cache.org/)。 –

回答

0

事實證明,大多數網站只緩存數據而不是最終的html文件。這更容易管理,實施起來更靈活。儘管每個請求仍然需要呈現頁面,但是可以減少數據庫的負載。至於沒有登錄的用戶,應用程序可以選擇緩存最終的HTML頁面。我一直在考慮緩存最終的html文件。我真是一個白癡......

+0

那麼,你是如何做到這一點在web.py?你能用你發現的東西來更新你的答案嗎? – Tae

相關問題