0% found this document useful (0 votes)
73 views29 pages

Full Page Caching in Magento 2 For Humans: 2016 / Opatija / Croatia

This document discusses page caching in Magento 2. It explains that page caching stores the result of successful requests so future requests for the same URL can be served faster. It then covers how to set up page caching in Magento 2 using Varnish as the caching system, and discusses some common issues like privacy, HTTPS requests, and HTTP authentication that need to be addressed.

Uploaded by

Santosh Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views29 pages

Full Page Caching in Magento 2 For Humans: 2016 / Opatija / Croatia

This document discusses page caching in Magento 2. It explains that page caching stores the result of successful requests so future requests for the same URL can be served faster. It then covers how to set up page caching in Magento 2 using Varnish as the caching system, and discusses some common issues like privacy, HTTPS requests, and HTTP authentication that need to be addressed.

Uploaded by

Santosh Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

Full Page Caching in Magento 2 for humans

2016 / Opatija / Croatia


Norbert Nagy
Technical Team Lead – Session Digital

Twitter: @nagno123

2016 / Opatija / Croatia


Why

Huge fan of Magento 2’s page


cache implementation

2016 / Opatija / Croatia


Content
1. Caching in general

2. Page cache in general

3. Page cache setup in Magento 2

4. Magento 2’s page caching system via Varnish

5. Most common issues and how to resolve them

2016 / Opatija / Croatia


What is cache

“In computing, a cache is a component that stores data so


future requests for that data can be served faster” - Wikipedia

2016 / Opatija / Croatia


What is page cache
• Temporary storage for the result of successful requests

• Further requests for the same URL will be served from the
cache

• Shared across all users of the site

• Additional metadata for further functionality

2016 / Opatija / Croatia


Page cache setup in Magento 2
Cache frontend

• High level gateway/interface to actual cache storage classes

• Provides access to load, save, remove functionality

• Set different cache backend for cache types

• You can add extra layers such as profiling, logging, …

2016 / Opatija / Croatia


Page cache setup in Magento 2
Cache backend

• Implementation details of the cache storage for the


framework

• Adapter between cache frontend and actual cache driver


classes (e.g. Zend_Cache_* classes)

• Varnish doesn’t require a cache backend class!

2016 / Opatija / Croatia


Request flow via varnish - MISS

I’m Veronica

80 8080

/about-us

Varnish Web head


e.g. Apache or nginx

2016 / Opatija / Croatia


Request flow via varnish - HIT

I’m Bruce

80 8080

/about-us

Varnish Web head


e.g. Apache or nginx

2016 / Opatija / Croatia


Privacy
• Hey! What about my privacy?

• Hole punching

• Javascript based loaders

• ESI

• HTTP headers!

2016 / Opatija / Croatia


Privacy – non cacheable – page
• Sensitive, nobody should cache it at all

• I really meant nobody, not even your browser!

• Layout XML file controls it in Magento 2

• The entire response will be non-cacheable!

<block class="Magento\Sales\Block\Order\View"
name="sales.order.view" cacheable="false"
after="sales.order.info.links" />

2016 / Opatija / Croatia


Privacy – private data – hole punching
• Specific to the customer

• No intermediary caching is allowed. This might be saved by


your browser depending from your browser’s
implementation

• You can handle session data within the block

• Define your block as private


In \Magento\Checkout\Block\Cart:
$this->_isScopePrivate = true;

2016 / Opatija / Croatia


Privacy – private data – hole punching
• core_layout_render_element event dispatched

• Cacheable, block not contains any TTL value in the layout file

• BLOCK placeholder generated (see below an example)

• Javascript loads the content via a separate private AJAX call

<!-- BLOCK notification_window --><!-- /BLOCK


notification_window -->

2016 / Opatija / Croatia


Privacy – private data – JS + local storage
• E.g. Customer data, messages handled like this

• update_section AJAX call (unfortunately the request is using


public caching headers and it makes me a sad panda)

• Sends the response in JSON

• Javascript to place the content to the correct container


element

2016 / Opatija / Croatia


Privacy – private data – JS + local storage
• Response stored in your browser’s local storage

• Invalidation via version cookie which changes during each


POST request

• If your data is invalid or not available, it will be loaded from


the server

2016 / Opatija / Croatia


ESI Request flow via varnish - MISS

I’m Veronica /about-us

/about-us ESI

Varnish Web head

2016 / Opatija / Croatia


ESI Request flow via varnish - HIT

I’m Bruce

/about-us ESI

Varnish Web head

2016 / Opatija / Croatia


Privacy – ESI – kind of hole punching
• Magento 2 uses it for often changing public elements, which
is allowed to cache

• Don’t handle session data within the block => public!

• Think about performance before you add multiple ESI blocks

• Add TTL to your block definition in the layout file

<block class="Magento\Theme\Block\Html\Topmenu"
name="catalog.topnav" template="html/topmenu.phtml"
ttl="3600"/>

2016 / Opatija / Croatia


Privacy – ESI – kind of hole punching
• core_layout_render_element event dispatched

• Cacheable, block contains TTL value in the layout file

• ESI placeholder generated

• Varnish will automatically handle the ESI placeholder

<esi:include
src="http://example.dev/page_cache/block/esi/blocks/[%22catal
og.topnav%22]/handles/[%22default%22,%22cms_index_index
%22,%22cms_page_view%22,%22cms_index_index_id_home%2
2]/" />

2016 / Opatija / Croatia


Using the IdentityInterface
• Implement
\Magento\Framework\DataObject\IdentityInterface

• Add getIdentities() to your class and report the identity of


your objects

• Use X-Magento-Tags header for GET requests to store


metadata

• Use X-Magento-Tags header for PURGE requests to clean


the cache entries related to that entity

2016 / Opatija / Croatia


Location of X-Magento-Tags

I’m Veronica
Varnish Web head

/about-us

X-Magento-Tags:
cms_block_1, category_product_1

2016 / Opatija / Croatia


Problem of HTTPS requests with Varnish

I’m Veronica
Encrypted Varnish Web head

/about-us

2016 / Opatija / Croatia


Caching HTTPS requests with Varnish

I’m Bruce
X-Forwarded-Proto: https
E (443) D (80) D (8080)

E SSL/TLS D D
Varnish Web head
termination

2016 / Opatija / Croatia


HTTP Authentication vs. Varnish
• HTTP Authentication will be cached by Varnish

• Ignoring requests with the Authorization header in Varnish


=> you will lose the benefit of having Varnish

2016 / Opatija / Croatia


HTTP Authentication vs. Varnish

I’m Bruce
Remove
Authorization
header

80 8080 8081

HTTP Auth
Varnish Web head
proxy

2016 / Opatija / Croatia


Magento 2’s Page Cache implementation is amazing, make
sure you use it correctly!
Questions?

Twitter: @nagno123

2016 / Opatija / Croatia


Thank You!

2016 / Opatija / Croatia

You might also like