Magento 2 – Cache

05-11-2017

Magento gebruikt cache geheugen om de webshop sneller aan gebruikers te laten zien. Soms zal de cache geheugen geleegd moeten worden om wijzigingen te zien. In dit artikel zal ik de verschillende cache types behandelen en hoe je de cache moet legen. Maar ik zal ook behandelen op welke plekken nog meer tijdelijke bestanden of gegenereerde bestanden worden opgeslagen. Waarvoor deze worden gebruikt en wanneer en hoe je deze zou kunnen legen.

Verschillende Cache Types

Je hebt verschillende cache types. Bekijk hieronder het overzicht.

Naam Code Omschrijving
Configuration config Configuratie van modules en de in file system en database gecachede settings.
Layout layout Gecompileerde page layouts. Leeg de layout cache als je layout bestanden hebt gewijzigd.
Block HTML Output block_html HTML code wordt door Magento verdeeld in blokken.
DDL db_ddl De DDL cache zal geleegd moeten worden zodra er handmatig wijzigingen aan de database schema zijn gemaakt.
Collections Data collections Gecachede database queries
Entity attribute value eav Metadata gerelateerd aan EAV attributen (bijv. store labels, searching settings, attribute rendering, etc.). Hier hoef je niks mee te doen.
Page cache full_page Gecachede HTML pagina’s.
Reflection reflection Gecachede API interfaces reflection data.
Translations translate Alle vertalingen worden samengevoegd tot één bestand.
Customer Notification customer_notification Customer notifications cache.
Integration configuration config_integration Gecompileerde integrations.
Integration API configuration config_integration_api Gecompileerde integration API’s.
Web services configuration config_webservice Web API structure.

Als Frontend Developer heb je meestal te maken met layout, block_html, full_page en translate cache. Als Frontend Developer kun je deze cache dan ook het beste uitschakelen.

Om de statussen van de verschillende cache te bekijken, voer je het volgende commando uit op de command line:

php bin/magento cache:status

Clean vs. Flush

Om de cache te verwijderen voer je het volgende commando uit:

php bin/magento cache:clean

of

php bin/magento cache:flush
Clean

Wanneer je cache:clean gebruikt verwijder je alles uit de cache alleen van ingeschakelde Magento Cache types. Je leegt hierbij alleen de cache dat Magento gebruikt.

Flush

Wanneer je cache:flush gebruikt verwijder je alles uit de cache. Soms zijn er processen van andere applicaties die gebruik maken van de cache. Het gebruik maken van “flush” kan hier dus invloed op hebben.

Via de admin kun je ook de cache verwijderen. Ga dan naar System > Cache Management. Je hebt de knoppen “Flush Magento Cache” (clean) en “Flush Cache Storage” (flush).

Vervolgens heb je nog additionele cache beheer via de admin:

Flush Catalog Images Cache Pre-gegenereerde productafbeeldingen.
Flush JavaScript/CSS Cache Gecombineerde en gemergede JavaScript en CSS bestanden.
Flush Static Files Cache Preprocessed view en static files.

Met het volgende commando kun je alle cache types inschakelen.

php bin/magento cache:enable

Je kunt de cache types inschakelen per type cache.

php bin/magento cache:enable config layout block_html full_page

Met de volgende commando kun je alle cache types uitschakelen.

php bin/magento cache:disable

Je kunt de cache types uitschakelen per type cache.

php bin/magento cache:disable config layout block_html full_page

Niet te cachen content

In de layout.xml kun je block’s een parameter “cacheable” meegeven. Deze waarde is standaard “true”. Als je het block de waarde “false” geeft (cacheable=”false”) wil dat zeggen dat het block niet gecached mag worden. De volledige pagina waar dit block getoond wordt zal dan automatisch niet meer gecached worden.

Voorbeeld in een layout.xml bestand:

 <block class="Magento\Checkout\Block\Cart" name="checkout.cart" template="cart.phtml" cacheable="false">

Enkele pagina’s die cacheable=”false” gebruiken en dus niet gecached worden zijn: account pagina’s, vergelijking pagina’s, winkelwagen, afrekenpagina. Deze worden niet gecached doordat de gehele content van deze pagina’s gebruikersspecifiek zijn.

Ik raad het erg af om cacheable=”false” te gebruiken. Dit komt doordat dit de laadtijd van je webshop erg kan beïnvloeden. Je kunt dit oplossen door dit soort blokken door hole punching te vervangen. Dat wil zeggen dat je de content asynchroon ophaalt (bijvoorbeeld via de techniek AJAX, dat staat voor Asynchronous JavaScript And XML). De content wordt dan op de achtergrond ingeladen worden waardoor de rest van de pagina wel gecached kan worden.

Bestanden verwijderen tijdens ontwikkeling

Tijdens het ontwikkelen komt het wel eens voor dat je na het legen van de cache alsnog een exception of andere foutmelding krijgt. Onderstaande mappen bevatten tijdelijke bestanden of gegenereerde bestanden en kunnen verwijderd worden:

var/page_cache Bevat gecachede pagina’s vanuit de full page cache. Legen doe je door middel van php bin/magento cache:clean full_page.
var/cache Alle andere cache bestanden zonder de full page cache. Legen doe je door middel van php bin/magento cache:clean of flush.
var/generation Bevat gegenereerde code. Als je een exception tegenkomt met een pad binnen de var/generation map zul je waarschijnlijk deze map moeten leegmaken.
var/di Gecompileerde dependency injection bestanden van modules.
var/view_preprocessed Geminimaliseerde HTML en gecompileerde LESS bestanden.

Bij onderstaande acties zou het voor kunnen komen dat je bestanden moet verwijderen.

Actie Mappen legen
Heb je een class veranderd of toegevoegd waar je gebruik maakt van een plugin (interceptor) var/di, var/generation
Een verandering in di.xml var/di, var/generation
Toevoegen, verwijderen, in en uitschakelen van modules. var/di, var/generation, var/cache, var/page_cache
De layout of theme wijzigen of toevoegen. var/view_preprocessed, var/cache, var/page_cache
LESS of templates wijzigen. var/view_preprocessed, var/cache, var/page_cache
Toevoegen, wijzigen of verwijderen van een CMS pagina of cacheable block. var/cache, var/page_cache

Dit kun je bijvoorbeeld doen via de command line:

rm -rf <root_dir>/var/di/* <root_dir>/var/generation/* Dit verwijderd de var/di en var/generation folder.
php bin/magento setup:upgrade Dit update de Magento database schema en data en leegt de var/di en var/generation mappen.
php bin/magento setup:di:compile Dit leegt en genereert de code opnieuw in var/generation.
php bin/magento deploy:mode:set [mode] Dit verandert de Magento mode (bijv. van developer naar production) en zal de var/di, var/generation en var/view_preprocessed legen.
php bin/magento cache:clean [type] Dit zal de cache legen: var/cache en/of var/page_cache.
Neem contact op

Neem contact met me op door te mailen naar info@ezrabotter.com of vul het contactformulier in.

Contact
Volg mij op

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

tien + 15 =

Contact opnemen?

Neem contact met me op door te mailen naar info@ezrabotter.com of vul het contactformulier in.

Neem contact op