Performance-Optimierung für Magento 2-Systeme

Slides:



Advertisements
Ähnliche Präsentationen
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Advertisements

PHP Extension und Application Repository
Aufbau eines Netzwerkes
Die Performance von Webseiten optimieren
GWT - google Web Toolkit
Allgemeines Name: Ursprünglich: „Personal Home Page Tools“
Kurze Einführung in ASP
Objektrelationales Mapping mit JPA
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Content-Management-System
Tomcat (I) Ende 1999 Jakarta-Projekt von Apache, IBM und Sun gegründet
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Seminarvotrag: PHP Von Stefan Niemczyk.
Zukunft des Webs? Dennis Beer Christian Blinde
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Jetzt lernen wir.
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
Debugging, Logging, Monitoring, Tools
Erste Schritte mit PHP 5 von Max Brandt, 22. September 2006.
EIN CMS MACHT SCHULE Tina Gasteiger.
Client-Server Modell Advanced IT Basics Nicolas Frings.
SharePoint 2010 for Information Architects
Erstellen einer Webseitenstatistik mithilfe eines OLAP-Servers
Erstellen einer Webseitenstatistik mithilfe eines OLAP-Servers
Client-Server Systeme
Typo 3. INSTALLATION TYPO3 INSTALLTOOL EXTENSIONS UND TEMPLATES INSTALLATION TEMPLAVOILA USERMANAGEMENT Inhalt:
Client Server Modell Universität zu Köln
Developer Day Office APPs entwicklen Simon Amrein Trivadis AG Die ersten Schritte in eine neue Office-Welt.
Daniel Walzenbach Developer Evangelist Microsoft Deutschland GmbH.
IFB Speyer Daniel Jonietz dj 2 XAMPP - Was ist das? Paket mit: – X – Apache (Webserver) – MySQL oder SQLite (Datenbank) – Perl (Skriptsprache) –
Marko Dragicevic Thomas Bergauer 27.Mai 2008
Von Isabelle Spörl und Simon Schausberger
© All rights reserved. Zend Technologies, Inc. Jenseits von var_dump(): Debugging in ZF Jan Burkl System Engineer.
Seite 1 - Security in TYPO3 Willkommen Security in (und rund um) TYPO3 Christian Kurta
Bereitstellen von PHP-Webanwendungen auf Windows Azure
Datenanbindung in Webapplikationen
Webhosting an der Universität Zürich
Aufzeichnung von Usability-Daten im www. Client-Side Log : automatisch (maschinell) generiertes Protokoll Client : Rechner mit dem Browser des Users Server:
Dedizierte Systeme Typo3 Installation Dedizierte Systeme – Typo3 Installation – Christoph Stollwerk IT Zertifikat der Philosophischen Fakultät WS 2008/2009.
Wie funktionieren Internetseiten? Html und Co – Teil 2 Heimo Reiter.
Hosting der HSLU PERFORMANCEVERBESSERUNGEN IM BEREICH SERVER-HOSTING.
Backup der FTP-Daten mit BYSU (Back Your Space Up von George Ruinelli) Eine mögliche Variante, um FTP- Daten bei dem Provider „All-Inkl“ zu sichern.
Typo 3 //Textbox - HTML //Benutzerverwaltung //Zugriffsrechte.
->Prinzip ->Systeme ->Peer – to – Peer
Datenbanken im Web 1.
Webserver Apache & Xampp Referenten: Elena, Luziano und Sükran
Portal Content Personalisierung Benutzerverwaltung.
Greenstone. Theoretischer Teil Entstehung: Entwickelt vom New Zealand Digital Library Project an der Universität von Waikato Kooperation mit der UNESCO.
Was gibt’s neues im Bereich Anpassung Fabian Moritz Consultant, Developer SharePointCommunity.de.
TYPO3-Workshop TYPO3 – Leistungsumfang und Architektur
242/102/49 0/51/59 181/172/166 Primary colors 248/152/29 PMS 172 PMS 137 PMS 546 PMS /206/ /227/ /129/123 Secondary colors 114/181/204.
Seminararbeit Release Management von Web-Systemen Minh Tran Lehrstuhl für Software Engineering RWTH Aachen
Theorie. Was ist Drupal? Content-Management-System, Open Source Software Hauptanwendung in der Organisation von Websites In PHP geschrieben und wird als.
LINUX II Unit 7 LAMP Server. LAMP ● Linux – Apache - MySQL – PHP ● Leistungsfähiges und kostenloses System zur Genrierung von dynamischen Webseiten und.
Inhaltsverzeichnis Was ist bsozial? Ziele Ressourcen Frontend API ER-Modell Qualitätssicherung Gantt Diagramm Fazit 1.
Schulung FB M Mi., 15. Februar Uhr
Erfahrungen mit dem neuen Primo-UI
29. Magento Stammtisch Thema: IT-Sicherheit Gregor Bonney
Workshop 1 Getting Started 2016 Boris Wylutzki
Google App Engine - Technische Stärken und Schwächen
ORACLE XE Bernd Tuba, Trier, Deutsche Post ITSolutions GmbH.
Systeme II 6. Die Anwendungsschicht
Virtualisierung von Web-Applikationen mit Docker
Herzlich willkommen! Windows Server 2016, System Center 2016 & Windows 10 Berlin,
1.
Digitale Transformation
TypeScript rocks?! 16. Mai 2017 Tuan Dang-Schulz.
GroupLink’s everything HelpDesk® im Einsatz bei der Inform GmbH
Shopware Core Optimierung
TRACKING Quelle: Fotolia by Adobe.
 Präsentation transkript:

Performance-Optimierung für Magento 2-Systeme

Unternehmen / Wer sind wir E-Commerce-Agentur seit 2006 Mit Magento 1 gestartet, seit 2015 auch Shopware, seit 2017 Magento 2 15 Mitarbeiter für Backend, Frontend, Design, PM & Vertrieb TÜV-zertifiziert nach ISO 9001

Wer bin ich Nico Siebler PHP-Entwickler Lead Developer für Magento in der digital.manufaktur Magento 1 seit 2011 Magento 2 seit 2017

Worum geht es hier Magento 2 Umgebungen allgemein schneller und belastbarer machen Magento Open Source (CE) 2.2 als Basis Tipps fürs generelle Handling mit Magento Code-Beispiele

Agenda Messen und Analysieren Grund-Optimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Messen und Analysieren Schwachstellen identifizieren Konkrete Probleme oder Potenziale z.B. Produktseite, AddToCart und der Checkout-Prozess Erfassbar über übliche Tracking-Dienste und -Mechanismen Uncachbare Seiten

Messen und Analysieren Single Request-Performance Profiling-Tools und -Dienste Extensions, z.B. mgtcommerce/module-mgtdevelopertoolbar oder vpietri/adm-quickdevbar SQL-Logs Stat Calls auf dem Dateisystem

Stat Calls filtern Linux strace -ff -s 4096 $(pgrep php-fpm | perl -pe 's#(.*)\n# -p $1#g') 2>&1 | grep -i stat macOS sudo dtruss -f -n php-fpm -s 2>&1 | grep -i ‘stat‘

Messen und Analysieren Profiling-Tools und Dienste xdebug: https://xdebug.org/docs/ z-ray (nur noch für Zend Server): http://www.zend.com/de/products/server/z-ray Tideways: https://tideways.io/profiler/features New Relic: https://newrelic.com/ Blackfire: https://blackfire.io/

Messen und Analysieren Metriken und Audits Magento Performance Toolkit Developer-Konsole im Browser Google Pagespeed / YSlow / GTMetrix / Webpagetest / ... Google Audit / Lighthouse

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Benchmarks Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Grundoptimierung / Basics Magento aktuell halten memory_limit hoch setzen Production mode nutzen Caches aktivieren “Developer-Optionen” produktiv nutzen Flat-Katalog aktivieren Full Page Caching mit Varnish CDN Caching und Sessions mit Redis oder memcached

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Infrastruktur-Optimierungen Server-Setup / Webserver Server-Setup CPU-Power, CPU-Kerne, RAM, SSD, Varnish / FPC, CDN / Externer Reverse Proxy Webserver nginx bevorzugen .htaccess-Parsing deaktivieren im Apache Module deaktivieren Browser-Caching und Daten-Kompression

Infrastruktur-Optimierungen PHP PHP 7 PHP 7.2? - https://github.com/magento-engcom/php-7.2-support/projects/1 PHP-FPM, passender pm Typ zum Hosting OpCache und APCu realpath-Cache mit passender Größe

Infrastruktur-Optimierungen PHP OpCache FPM: Shared Memory CLI: File Cache (ab PHP 7) cachetool nutzen für Statistik und Löschung File Cache auf Ramdisk legen

Infrastruktur-Optimierungen Composer-Autoloader -o sammelt PSR-4 Mapping PSR-4 Anweisungen in der composer.json --apcu für Fallback-Klassenauflösungen

Infrastruktur-Optimierungen Dienste optimieren MySQL tunen (my.cnf-Parameter, mysqltuner) UNIX-Sockets nutzen auf selben Hosts CDN Technologie-Enhancements z.B. HSTS, TLS 1.3, Brotli compression, http/2, on the fly Minify, JS Async laden, HTML-Caching Suche austauschen gegen ElasticSearch Empfehlung: Smile_ElasticSuite

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Empfohlene Entwickler-Settings Hardware Mindestens 16 GB RAM (Mac), 8 GB (Linux) ggf. Ramdisk nutzen für File OpCache Optimal 8 CPU threads SSD Dedizierter Grafikchip Macbook Pro? 15 Zoll!

512M Ramdisk für CLI-OpCache nutzen Linux sudo mount -t tmpfs -o size=512M none /var/run/php_file_cache sudo chown user:group /var/run/php_file_cache macOS diskutil partitionDisk $(hdiutil attach -nomount ram://1024000) 1 GPTFormat APFS php_file_cache '100%' sudo ln -s /Volumes/php_file_cache /var/run/php_file_cache Aktivieren opcache.enable_cli=1 opcache.enable=1 opcache.file_cache=/var/run/php_file_cache opcache.file_cache_only=1

Empfohlene Entwickler-Settings PHP & MySQL-Settings xdebug.remote_autostart=0 OpCache mit geringer revalidate_freq nutzen MySQL-Parameter: innodb_flush_log_at_trx_commit = 0 innodb_doublewrite = 0 innodb_file_format = Barracuda innodb_file_format_max = Barracuda

Empfohlene Entwickler-Settings Magento Developer mode nutzen Version signing, Merging und Minify deaktivieren Alle Caches aktivieren (Ausnahme für FE-Entwicklung) Debug-Logging

Developer Mode Einstellungen n98-magerun2 deploy:mode:set developer n98-magerun2 config:set dev/css/merge_css_files 0 n98-magerun2 config:set dev/js/merge_files 0 n98-magerun2 config:set dev/js/enable_js_bundling 0 n98-magerun2 config:set dev/template/minify_html 0 n98-magerun2 config:set dev/js/minify_files 0 n98-magerun2 config:set dev/css/minify_files 0 n98-magerun2 config:set dev/static/sign 0 n98-magerun2 config:set dev/debug/debug_logging 1 --lock n98-magerun2 cache:enable

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Code-Optimierungen Best practice / Module Ungenutzte Magento-Module deaktivieren Seite analysieren, Anforderungen prüfen 3rd Party Module genau untersuchen, ggf. optimieren Ungenutzte 3rd Party Module löschen oder nicht auschecken

Ungenutzte Module in einem Beispielshop Magento_ConfigurableImportExport Magento_AdvancedPricingImportExport Magento_Authorizenet Magento_Bundle Magento_BundleImportExport Magento_Captcha Magento_CustomerImportExport Magento_Dhl Magento_DownloadableImportExport Magento_EncryptionKey Magento_Fedex Magento_GoogleAdwords Magento_GoogleAnalytics Magento_GroupedImportExport Magento_Analytics Magento_Marketplace Magento_Multishipping Magento_NewRelicReporting Magento_Persistent Magento_QuoteAnalytics Magento_ReleaseNotification Magento_ReviewAnalytics Magento_SalesAnalytics Magento_Braintree Magento_CustomerAnalytics Magento_SendFriend Magento_Signifyd Magento_SwatchesLayeredNavigation Magento_TaxImportExport Magento_TestModuleDirectoryZipCodes Magento_TestModuleSample Magento_GoogleOptimizer Magento_Ups Magento_SampleData Magento_CatalogAnalytics Magento_Usps Magento_Version Magento_Weee Dotdigitalgroup_Email Magento_WishlistAnalytics Temando_Shipping …………...

Code-Optimierungen Best practice / Settings Übergeordnete Einstellungen auf “Gemeinsamkeiten” beschränken Async Index aktivieren n98-magerun2 index:set-mode schedule Async Order Mails aktivieren n98-magerun2 config:set sales_email/general/async_sending 1

Code-Optimierungen Best practice / DB-Cleanup Leichen-Datensätze suchen und entfernen Attributsets nutzen für Attributseinschränkungen Alte Warenkörbe löschen

Code-Optimierungen Best practice / Block-Caches Cache-Key definieren Tags setzen für Invalidierung cache_lifetime setzen Bei anonymen Blöcken auch bei statischem Content Cachbare Blöcke identifizieren und anpassen

Einfache Cache-Infos hinzufügen Block-Cache nutzen Wichtigste Methoden public function getCacheKeyInfo() protected function getCacheTags() protected function getCacheLifetime() Einfache Cache-Infos hinzufügen

Custom Daten-Caches nutzen

Code-Optimierungen Best practice / FPC / Cache-Lifetime Identifizierung von cacheable=”false” im Layout-XML Beispiel: Magento_Captcha

Code-Optimierungen Best practice / DB und SQL load() vermeiden, Daten wenn möglich cachen Collections und Repositories nutzen Abgefragte Daten minimieren Indizes optimieren: https://de.slideshare.net/billkarwin/how-to-design-indexes-really Queries logisch sammeln und ausführen

Code-Optimierungen Best practice / Layout-Optimieren Unnötige Blöcke entfernen Block und Template Hints aktivieren dev/debug/template_hints_storefront 1 dev/debug/template_hints_blocks 1 Debug-Log aktivieren n98-magerun2 config:set dev/debug/debug_logging 1 --lock

Code-Optimierungen UX-Optimierung / Frontend Cache-Bilder vorgenerieren n98-magerun2 catalog:images:resize Galerie-Loader Ladeanimation austauschen Lazy Loading für Bilder in Bereichen “below the fold” JS asynchron laden, nicht inline schreiben

Code-Optimierungen UX-Optimierung / Optische Unruhe Springende Elemente vermitteln ein unruhiges Gefühl beim Seitenladen Nachladen von Requests verringern oder Daten vorrendern Wartezeit mit positiven Eindrücken und Animationen überbrücken AJAX nutzen anstatt POST/Reload

Code-Optimierungen Konkrete Verbesserungen Listing-Daten vorladen und an Produkte setzen für Collections Block-Caches auf Store-Ebene cachen Reporting Events deaktivieren Bilder vorgenerieren Topmenu Kategorien cachen Produkt-Attributoptionen cachen

Listing-Daten vorladen und an Produkte setzen für Collections ...

Block-Caches auf Store-Ebene cachen für statische anonyme Blöcke

Reporting Events und ungenutzte Observer deaktivieren (bitte ins Modul schauen…)

Bilder vorgenerieren Szenario: 40.000 Produkte n98-magerun2 catalog:images:resize Unnötige Bildergrößen Lange Generierungszeit n98-magerun2 dmc:catalog:images:resize Lädt Produkte und Bilder schneller Nutzt eine ID-Whitelist in view.xml Counter in der Ausführung 3-6 Stunden mit 6-7 Bildern je Produkt

Produkt-Attributoptionen cachen

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Zahlen Shop mit echten Daten und diversen Anpassungen ohne FPC lokal. Verbesserung gemessen an Aktivierung und Deaktivierung. Magento-Module deaktivieren: 5%-15% Code-Optimierungen: 10% SQL queries: Home: 56 => 51 Listing: 242 => 85 PDS: 108 => 77 Cart: 83 => 76 Composer optimize: 3-10% OpCache: <= 40%

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

Deployment Ausführungszeit minimieren Nur genutzte Sprachen angeben, z.B. de_DE en_US --strategy compact Bereiche getrennt deployen: --area frontend / adminhtml Theme angeben: --theme my/theme

Deployment Zero Downtime auf einer Maschine Magento-Code anpassen view_preprocessed isolieren (var -> generated) Setup-Abweichungen ignorieren Symlinks setzen / Dateien kopieren Release bauen document root verlinken Cache leeren inkl. OpCache

Agenda Messen und Analysieren Grundoptimierung / Basics Infrastruktur-Optimierungen Empfohlene Entwickler-Settings Code-Optimierungen Zahlen Deployment GitHub-Modul Fragen / Anregungen / Meinungen

GitHub-Modul Download DMC_Performance https://github.com/digitalmanufaktur/magento2-module-performance

Danke für die Aufmerksamkeit! Fragen / Anregungen / Meinungen? https://www.digitalmanufaktur.com/ https://de-de.facebook.com/digital.manufaktur/ siebler@digitalmanufaktur.com