9

Is there any file in magento where all html will be output?

I want to minify all html output.

1
  • 1
    Good question, +1, but how do you want to minify HTML? Commented Dec 10, 2010 at 15:32

5 Answers 5

19

Magento uses a response object to send all output.

All output is added to this object, and then its sendResponse method is called.

If you want to alter the output, setup a listener for the http_response_send_before event

<!-- 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>

And then in your observer you may get and set the body

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

If you're interested, this event is called in the sendResponse method of the following class

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

and the output itself is sent in the sendResponse and outputBody methods of

lib/Zend/Controller/Response/Abstract.php   
Sign up to request clarification or add additional context in comments.

1 Comment

I have used above code, but it seems not working with full page caching :(
5

Ideally you want to perform minification before the output is cached to avoid doing it too often. The best place I can think of is by overriding Mage_Page_Block_Html and adding the following function to your new class:

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

This way it performs the action once for the whole page, the returned value may then be cached by Magento in it's usual manner. It's not performing on each block individually which might be less efficient.

Comments

4

you can always use ob functions to get the output in index.php and then do with the content whatever you need. but i doubt if it will boost your site as much as enabling gzip or deflate

2 Comments

@Simon who says that you have to edit index.php for that , although you can do whatever you wan't as long as you are the code owner and take responsibility for any edits made
Err... This is exactly what your answer suggests. And no, IMHO you should never edit the core. Never ever.
2

Maybe mod_pagespeed from Google? That would do it transparently for you. +1 for gzip and deflate either way.

3 Comments

mod_pagespeed was made for this sort of situation. However it is still performing on every request.
That's very true, and I like the idea of taking advantage of the whole-page caching as a time saver. Do you have an idea on how much time the HTML deflation takes on mod_pagespeed? I don't have a sense for how significant of an issue this would be.
Because it's native code it must be faster than a scripted version. There are other caching options, mod_disk_cache and mod_mem_cache of course although I'm not sure if they're instantiated after mod_pagespeed, or you could use a reverse proxy. Those sorts of caching options generally require Expires and Vary headers which Magento doesn't set so their usefulness might be limited. Basically I don't know, only a debugging profile tool could tell you.
0

Maybe someone coming here might find this Magento extension helpful: http://www.magentocommerce.com/magento-connect/html-minify-by-jemoon.html

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.