2010-12-10 5 views
9

すべてのhtmlが出力されるマゼンタのファイルはありますか?Magento:HTML出力を縮小しますか?

すべてのhtml出力を縮小したいと思います。

+1

良い質問、+1が、どのようにあなたがHTMLを縮小化したいです? –

答えて

4

いつでもob関数を使用してindex.phpの出力を取得し、必要なときにコンテンツを処理できます。あなたのサイトをgzipやデフラグを可能にする程度に向上させるかどうかは疑問です

+0

'index.php'は編集しないでください。 – Simon

+0

@Simon誰かが、あなたがコード所有者であり編集を担当していれば何でもできますが、index.phpを編集しなければならないと言っています –

+0

Err ...これはまさにあなたの答えは示唆している。そして、いいえ、あなたは決してコアを編集してはいけません。決してこれまでにない。 – Simon

2

Googleのmod_pagespeedですか?それはあなたのためにそれを透過的に行います。 gzipの場合は+1、いずれの場合も収縮します。

+0

この種の状況のた​​めにmod_pagespeedが作成されました。しかし、それは依然としてすべての要求に対して実行されています。 – clockworkgeek

+0

これは非常に真実です。私は、全面的なキャッシュをタイムセーバーとして利用するというアイデアが気に入っています。 HTMLデフレーションがmod_pagespeedにどれくらいの時間を要するかについて考えていますか?私はこれがどれほど重要な問題であるかについての感覚を持っていません。 –

+0

ネイティブコードなので、スクリプト版よりも高速でなければなりません。他のキャッシングオプション、mod_disk_cacheとmod_mem_cacheがありますが、mod_pagespeedの後にインスタンス化されているかどうか、またはリバースプロキシを使用できるかどうかはわかりません。キャッシュオプションのこれらの種類は、一般的に、Magentoが設定しないExpiresおよびVaryヘッダーを必要とするため、その有用性が制限される可能性があります。基本的にはわかりませんが、デバッグ用のプロファイルツールだけがあなたに伝えることができます。 – clockworkgeek

5

出力がキャッシュされる前に縮小を実行して、あまり頻繁に実行しないようにするのが理想的です。

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

それはページ全体のために一度アクションを実行します。この方法で、返される値は、その後にMagentoのでキャッシュされることがあります。私は考えることができる最高の場所はMage_Page_Block_Htmlをオーバーライドして、新しいクラスに次の関数を追加することですそれは通常の方法です。個々のブロックでは効率的でない可能性があります。

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 

出力自体はたぶん、ここに来て、誰かがこのMagentoの拡張が参考に見つけるかもしれない

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

いつものようにすばらしい答え –

+0

私は上記のコードを使用しましたが、フルページのキャッシュではうまくいかないようです。 –

関連する問題