2010-12-10 12 views

Respuesta

4

siempre puede usar las funciones ob para obtener la salida en index.php y luego haga con el contenido lo que necesite. pero dudo si aumentará tu sitio tanto como habilitar gzip o desinflar

+0

No debe editar 'index.php'. – Simon

+0

@Simon, que dice que tiene que editar index.php para eso, aunque puede hacer lo que desee siempre y cuando sea el propietario del código y asuma la responsabilidad de cualquier edición realizada –

+0

Err ... Esto es exactamente lo que su la respuesta sugiere Y no, en mi humilde opinión nunca deberías editar el núcleo. Nunca jamás. – Simon

2

¿Tal vez mod_pagespeed de Google? Eso lo haría de manera transparente para usted. +1 para gzip y desinflar de cualquier manera.

+0

mod_pagespeed fue creado para este tipo de situación. Sin embargo, sigue funcionando en cada solicitud. – clockworkgeek

+0

Eso es muy cierto, y me gusta la idea de aprovechar el almacenamiento en caché de toda la página como un ahorro de tiempo. ¿Tiene una idea de cuánto tiempo toma la deflación de HTML mod_pagespeed? No tengo idea de cuán significativo sería este problema. –

+0

Como es un código nativo, debe ser más rápido que una versión con guiones. Hay otras opciones de almacenamiento en caché, mod_disk_cache y mod_mem_cache, por supuesto, aunque no estoy seguro de si se crean instancias después de mod_pagespeed, o podría utilizar un proxy inverso. Esos tipos de opciones de almacenamiento en caché generalmente requieren Caducar y Variar encabezados que Magento no establece por lo que su utilidad puede ser limitada. Básicamente, no sé, solo una herramienta de perfil de depuración podría decirte. – clockworkgeek

5

Lo ideal es que desee realizar una minificación antes de que la salida se guarde en la memoria caché para evitar hacerlo con demasiada frecuencia. El mejor lugar que puedo pensar es anulando Mage_Page_Block_Html y añadiendo la siguiente función para la nueva clase:

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

De esta manera se realiza la acción de una vez por toda la página, el valor devuelto a continuación, puede ser almacenado en caché por Magento en es la manera usual. No funciona individualmente en cada bloque, lo que podría ser menos eficiente.

19

Magento usa un objeto de respuesta para enviar todos los resultados.

Todos los resultados se agregan a este objeto, y luego se llama a su método sendResponse.

Si desea modificar la impresión, la configuración de un detector para el evento 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> 

Y luego, en el observador puede obtener y establecer el cuerpo

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

Si está interesado , este evento se llama en el método sendResponse de la siguiente clase

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

y la salida del mismo se envía en las sendResponse y outputBody métodos de

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

excelente respuesta como de costumbre –

+0

He utilizado el código anterior, pero parece que no funciona con el almacenamiento en caché de página completa :( –

Cuestiones relacionadas