2011-06-23 57 views
2

我剛剛完成了一個drupal項目,並且正在經歷網站的優化階段。我已經在性能下檢查了緩存塊和CSS和JS聚合以獲得更好的加載時間。但我注意到,當我運行一個頁面速度測試或Yslow的一切通過,但利用瀏覽器緩存。看起來到期日沒有設置在所有的圖像和CSS文件。我的問題是,我必須編輯.htaccess文件還是需要將未緩存的圖像和css文件放入特定文件夾?Drupal 7.0緩存問題!

任何幫助表示讚賞,提前

回答

2

非常感謝您可以將Apache配置來設置特定的到期/緩存控制標題,方便圖像/ CSS/JS使用mod_expiresmod_headers文件。

下面是幾個例子(一般的例子 - 分析和應用到你的系統之前,參閱手冊):

<FilesMatch "\.(html|htm|js|css)$"> 
    FileETag None 
    <IfModule mod_headers.c> 
     Header unset ETag 
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
     Header set Pragma "no-cache" 
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
    </IfModule> 
</FilesMatch> 

緩存與兩個指定mod_expires mod_headers中+

# Turn on Expires and set default to 0 
ExpiresActive On 
ExpiresDefault A0 

# Set up caching on media files for 1 year (forever?) 
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> 
    ExpiresDefault A29030400 
    Header append Cache-Control "public" 
</FilesMatch> 

# Set up caching on media files for 1 week 
<FilesMatch "\.(gif|jpg|jpeg|png|swf)$"> 
    ExpiresDefault A604800 
    Header append Cache-Control "public" 
</FilesMatch> 

# Set up 2 Hour caching on commonly updated files 
<FilesMatch "\.(xml|txt|html|js|css)$"> 
    ExpiresDefault A7200 
    Header append Cache-Control "proxy-revalidate" 
</FilesMatch> 

# Force no caching for dynamic files 
<FilesMatch "\.(php|cgi|pl|htm)$"> 
    ExpiresActive Off 
    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" 
    Header set Pragma "no-cache" 
</FilesMatch> 
+0

感謝人:

sudo apache2ctl -M 

如果沒有,只是通過激活它ot爲您的答覆,我已經嘗試了上面提到的所有設置,但我仍然在頁面速度上獲得相同的分數!我不知道我做錯了什麼?這裏是鏈接到我的網站,如果你想看看你自己。 http://backbone-design.com/順便說一下,我使用的網頁速度可以在這裏找到:http://pagespeed.googlelabs.com/很多在此先感謝 – Nino2armando

+0

@Nino使用FireBug的「網」面板或類似的工具(如果您使用其他瀏覽器)並檢查實際的響應標題。如果他們不像你設置的那樣,那麼你必須挖掘你的web服務器配置(或者你的代碼,如果image/css/js是動態生成/服務的),看看有什麼可能會覆蓋這些設置。 – LazyOne

+0

@Nino你的頭文件中肯定沒有用於圖像和css文件的'Expire'&'Cache-Control'頭文件。你必須檢查你的方面爲什麼上面提到的配置文件指令不起作用。 2可能的事情:1).htaccess文件沒有被解析或者該部分從未被執行2)其他東西覆蓋了那些標籤。 – LazyOne

0

我有同樣的問題很長一段時間,我只是找到了訣竅!

尋找在位於Drupal的根庫的.htaccess之後,有這樣的情況: <IfModule mod_expires.c> ... </IfModule>

因爲Apache的expires_module只是不是我的服務器上啓用,檢查是否expires_module存在於不執行位於內部的代碼列表中返回:

sudo a2enmod expires 
sudo a2enmod headers 
sudo service apache2 restart