2010-12-10 61 views
9

magento中是否有任何文件將輸出所有的html?Magento:縮小HTML輸出?

我想縮小所有html輸出。

+1

這個問題問得好,+1,但你怎麼想壓縮HTML ? – 2010-12-10 15:32:40

回答

4

你總是可以使用ob函數來獲取index.php中的輸出,然後根據你需要的內容來做。但我懷疑它是否會像激活gzip或deflate一樣促進您的網站

+0

你不應該編輯'index.php'。 – Simon 2017-08-23 13:11:57

+0

@Simon說你必須爲此編輯index.php,儘管只要你是代碼所有者,你就可以做任何你想做的事情,並承擔任何編輯 – 2017-09-12 11:36:21

+0

Err ...這正是你的答案建議。不,恕我直言,你不應該編輯核心。永遠不能。 – Simon 2017-09-12 13:21:57

2

也許mod_pagespeed從谷歌?這會爲你透明地做到這一點。 +1爲gzip和deflate任何一種方式。

+0

mod_pagespeed是爲了這種情況。但它仍然在執行每個請求。 – clockworkgeek 2010-12-10 16:32:28

+0

這是非常真實的,我喜歡利用整頁緩存作爲節省時間的想法。你對HTML通縮對mod_pagespeed花了多少時間有了一個想法嗎?我對這個問題的重要性沒有意義。 – 2010-12-10 22:39:54

+0

由於它是本地代碼,它必須比腳本版本更快。當然還有其他的緩存選項,mod_disk_cache和mod_mem_cache,儘管我不確定它們是在mod_pagespeed之後實例化的,還是可以使用反向代理。這些緩存選項通常需要Expire和Vary頭文件,Magento沒有設置它們,因此它們的用處可能會受到限制。基本上我不知道,只有一個調試配置文件工具可以告訴你。 – clockworkgeek 2010-12-10 23:31:09

5

理想情況下,您希望在輸出緩存之前執行縮小操作,以避免頻繁執行縮小操作。我能想到的最好的地方是通過重寫Mage_Page_Block_Html並添加以下功能到你的新類:

protected function _toHtml() 
{ 
    $html = parent::_toHtml(); 
    // MINIFY CONTENTS OF $html HERE 
    return $html; 
} 

這種方式,執行整個頁面的動作一次,返回值然後可以通過Magento的在緩存這是通常的方式。它不是單獨在每個塊上執行,這可能效率較低。

19

Magento使用響應對象來發送所有輸出。

將所有輸出添加到此對象,然後調用其sendResponse方法。

如果你想改變輸出,設置一個偵聽器http_response_send_before事件

<!-- in your module's config.xml --> 
<http_response_send_before> 
    <observers> 
     <unique_name> 
      <type>singleton</type> 
      <class>group/observer</class> 
      <method>alterOutput</method> 
     </unique_name> 
    </observers> 
</http_response_send_before> 

然後在你的觀察,你可能會和定身

class Packagename_Modulename_Model_Observer 
{ 
    public function alterOutput($observer) 
    { 
     $response = $observer->getResponse();  
     $html  = $response->getBody();   
     //modify html here   
     $response->setBody($html); 
    } 
} 

如果你有興趣,此事件稱爲sendResponse以下類別的方法

app/code/core/Mage/Core/Controller/Response/Http.php 

和輸出本身

lib/Zend/Controller/Response/Abstract.php 
+0

像往常一樣優秀的答案 – 2010-12-11 10:37:27

+0

我已經使用上面的代碼,但它似乎不工作與整個頁面緩存:( – 2013-12-18 11:03:55