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.
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
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
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.
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 met me op door te mailen naar info@ezrabotter.com of vul het contactformulier in.
Neem contact op