2010-12-10 59 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