2011-05-25 77 views
0

我們剛從GWT移到Wicket 1.4。雖然總體上非常高興,但對於GWT變得簡單的某些事情,我們仍然有一些學習曲線。其中一件事就是資源緩存。Wicket:正確緩存CSS資源

如何配置我們應用程序的資源(特別是CSS),以便它們不會隨每個頁面請求一起下載?

我們發現某些頁面元素有些閃爍,因爲樣式不是立即應用的,大概是因爲每次都下載樣式表。我追蹤了我們的日誌,事實上,幾乎每個頁面請求都會看到樣式表的請求。

我們直接引用CSS在我們的HTML文件,像這樣:

<link href="/css/ag.screen.css" rel="stylesheet" type="text/css"> 
    <link href="/css/ag.base.css" rel="stylesheet" type="text/css"> 

我不知道它的問題,但我們的所有頁面都裝有IndexedParamUrlCodingStrategy,因爲我們需要他們兩個可收藏並具有特定的URL結構。

我試着實現StefanFußenegger在他的blog(即通過頭文件引用而不是直接在HTML中引用CSS)的建議,但這似乎沒有幫助(我試着用「curl -I 「)。

有沒有爲Wicket 1.4中的資源設置Cache-Control或Expiration標題的標準方式?這是值得轉移到Wicket 1.5嗎? (我很猶豫,因爲它尚未正式發佈)。

編輯:我剛剛給了1.5次另一個嘗試,但缺乏文檔在這一點上確實是一個障礙。 IndexedParamUrlCodingStrategy和相關的課程已經沒有了,移植指南幾乎沒有什麼可說的。

編輯2:我剛剛注意到一些非常奇怪的事情 - 當我通過直接輸入URL或單擊書籤頁鏈接(頁面引用的資源(CSS,圖像等))到達我的某個頁面時,似乎得到緩存(我看不到他們在我的日誌中的請求)。但是,如果我通過表單提交到達同一頁面,則所有資源都會再次下載。爲什麼表單提交會導致頁面上引用的資源被重新下載?

+0

只是好奇,是什麼讓你從GWT移動到Wicket? – 2011-05-26 00:00:43

+0

亞歷克斯 - 一長串事情。最近的一些(我的頭頂)是讓Facebook/Twitter按鈕工作,整合Adsense,試圖獲取谷歌索引的Ajax內容,以及爲新的GWT「編輯器」框架而努力的問題。事實證明,在「傳統」框架中編寫應用程序要簡單得多,然後根據需要爲交互式內容編寫小量的Javascript。多年來我一直是GWT的粉絲,所以這對我來說並不輕微。計劃很快寫一篇博客文章。 – 2011-05-26 03:38:40

+0

有趣。我使用Wicket幾年,但最終偏向GWT。 Wicket棒極了,但它並沒有像我希望的那樣獲得太多的認可 - 這意味着很難讓人們熟悉它。無論如何,我希望在編寫它時看到您的博客條目。請讓我知道。謝謝。 – 2011-05-26 04:59:11

回答

1

既然你要搬到Wicket,我建議你使用1.5RC4.2。看看關於這個RC的錯誤報告,我認爲下一個可能是1.5.0Final。 關於緩存,請參閱此wiki頁面:https://cwiki.apache.org/WICKET/caching-in-wicket-15.html。 它約爲1.5,但它也說明了與1.4有什麼不同。

+0

在發佈我的問題之前,我實際上給了1.5RC4一個簡短的嘗試。但是看到他們如何在代碼庫中移動了很多東西(我的IDE中只有紅色波浪線),我不想承諾,直到我確信塵埃落定。如果他們接近決賽,我會再投入一次。謝謝。 – 2011-05-26 15:49:24

+0

剛剛嘗試過1.5,並且由於缺乏文檔而受到阻礙,特別是在安裝頁面方面。我們使用具有非常特定結構的可加入書籤的網址,並且我無法弄清楚如何在沒有文檔的情況下在1.5版本中完成這項工作。 – 2011-05-27 11:31:46

+0

我發現了與可收藏的網址相同的問題。輸出現在使用查詢參數?name1 = value1&name2 = value2而不是1.4.x form/name1/value1/name2/value2。我們有數百個網站使用1.4'目錄'樣式結構託管了許多鏈接到其中的頁面。更改爲查詢參數結構會破壞網絡上的很多現有鏈接。 – Volksman 2011-09-21 01:04:08

1

我和你有同樣的需求,我需要緩存資源客戶端。

現在我被困在1.4.x下,我找到了適合我的解決方案。 我使用偉大的圖書館斯特凡Fußenegger寫道,他提供here。實現非常簡單,我在生產模式中使用StaticResourceVersionProvider。到目前爲止我沒有問題(現在我的客戶堅如磐石)。

如果您需要關於如何使用此解決方案的詳細信息,請不要猶豫。

+0

甜。看起來我沒有深入Stefan的網站。現在給它一個鏡頭。謝謝。 – 2011-05-29 12:37:50

0

要管理非Wicket資源的標頭,可以使用在web.xml中的WicketFilter之前列出的普通Servlet過濾器。只需檢查請求Url,並且文件擴展名是.css/.js/...,那麼只需在響應中設置緩存標頭即可。 關於** Wicket 1.5中的UrlCodingStrategies閱讀http://wicketinaction.com/2011/07/wicket-1-5-request-mapper/和接下來的兩篇文章。我希望它對你更清楚。