Flaschenhälsen auf der Spur: Mit Blackfire PHP-Applikationen profilen

PHP-Applikation zu langsam? Unsicher, wo der Flaschenhals versteckt ist? Mit dem Dienst Blackfire erkennen PHP-Programmierer die Stellen in ihrem Code, die sie verbessern können. Die für Blackfire nötige PHP-Erweiterung ist ab sofort auf unseren Webhosting- und Cloudserver-Angeboten verfügbar.

Blackfire, ein Angebot aus dem Hause SensioLabs (Symfony, Silex, Twig), ist nach eigenen Angaben eine komplette «Performance Management Solution». Ursprünglich als Fork des PHP-Profilers Xhprof gestartet, bietet Blackfire mittlerweile eine ganze Palette an Funktionen, mit denen Sie die Performance Ihrer PHP-Applikation verbessern und Flaschenhälse finden können.

Call Graph – Das Herz von Blackfire

Blackfire bildet den Code Ihrer PHP-Applikation im sogenannten «Call Graph» ab, einem Flussdiagramm der ausgeführten PHP-Funktionen und -Methoden. Blackfire misst, wie lange die Ausführung der Funktionen und Methoden dauert, wie oft sie aufgerufen werden und welche weiteren Aktionen durch sie ausgelöst werden. Die Funktionen und Methoden sind durch Knotenpunkte dargestellt.

Blackfire-Interface

Der sogenannte «Hot Path» ist die Verbindung der Knotenpunkte, die während der Erstellung des Profils am aktivsten waren. Diese Aktionen haben den grössten Teil der Gesamtzeit oder des genutzten Arbeitsspeichers verbraucht und sind farblich hervorgehoben. Je intensiver die Farbe, desto höher war der Verbrauch.

«Hot Path» bei Blackfire

Flaschenhälse aufspüren

Flaschenhälse sind in der Regel im «Hot Path» zu finden. Damit sind die Knotenpunkte im «Hot Path» jene Code-Bausteine, die Sie als allererstes untersuchen sollten.

Nachdem Sie den «Hot Path» analysiert haben, werfen Sie einen Blick auf die Funktionen-/Methoden-Liste. Sie lässt sich nach «Exclusive Time», «Inclusive Time» und der Anzahl Calls sortieren. Die «Exclusive Time» bezeichnet dabei die Zeit, die das Ausführen der Funktion/Methode ohne deren Abhängigkeiten gedauert hat. «Inclusive Time» beinhaltet zusätzlich die Zeit, die beim Ausführen von eingebundenen Funktionen/Methode (Calls) verstrichen ist. «Calls» zeigt, wie oft die Funktion/Methode aufgerufen wurde.

Wie erkenne ich nun einen Flaschenhals? Wird eine Funktion/Methode sehr oft aufgerufen, könnte das bedeuten, dass dort überflüssige Aktionen stattfinden. Eine hohe «Exclusive Time» kann ein Indiz dafür sein, dass hier Verbesserungen möglich sind.

Blackfire bietet praktischerweise eine Vergleichsfunktion, mit der Sie Geschwindigkeitsveränderungen nach Code-Anpassungen sofort erkennen. Ab den kostenpflichtigen Paketen stehen Ihnen zudem Empfehlungen für Systeme wie Symfony, Laravel oder Magento zur Verfügung. Diese Empfehlungen sind von Experten erstellte Performance-Tests, mit denen die geprüfte Applikation verglichen wird.

Wie kann ich Blackfire nutzen?

Um Blackfire nutzen zu können, benötigen Sie zum einen ein Blackfire-Konto. Zum anderen muss der Blackfire-Agent auf dem Server aktiviert und mit dem eigenen Blackfire-Konto verbunden sein. Wie Sie Blackfire auf einem unserer Hosting-Angebote aktivieren, erfahren Sie in unserem Supportcenter: Wie kann ich Applikationen mit Blackfire profilen?

Übrigens: Als cyon-Kunde erhalten Sie 20% Rabatt auf das Blackfire-Angebot «Premium». Kontaktieren Sie uns für einen Gutschein-Code.

Sind die beiden Voraussetzungen erfüllt, kann das Profiling über verschiedene Methoden ausgeführt werden. Mit dem Blackfire-Companion erstellen Sie Profile direkt im Chrome-Browser. Die Nutzung ist aber auch via Kommandozeile und dank vielen Integrationen aus bestehenden Systemen möglich.

Die offizielle Dokumentation bietet ausgezeichneten Lesestoff zu allen Themen rund um Blackfire. Besonders Lesenswert ist das Tutorial «24 Days of Blackfire», das einen perfekten Einstieg in Blackfire und Web-Performance im Allgemeinen bietet.

Post aus China: Vorsicht vor dreisten Domainbetrügern

Heute morgen begrüsste mich folgende E-Mail in meiner Inbox:

Dear CEO/Principal,

This is Vince Lee---Senior Consultant of domain name registration and solution center in China. Here I have something to confirm with you. We formally received an application on April 27,2017. that a company claimed "Aerials Ltd" were applying to register "cyon" as their Network Brand and some "cyon" Asian countries top-level domain names(in/hk/tw/etc) and China (CN) domain names through our firm.

Now we are handling this registration, and after our initial checking, we found the name were similar to your company's, so we need to check with you whether your company has authorized that company to register these names. If you authorized this, we would finish the registration at once. If you did not authorize, please let us know within 7 workdays, so that we could handle this issue better. After the deadline we will unconditionally finish the registration for "Aerials Ltd". Looking forward to your prompt reply.

(This is a very important case, so please transfer this email to your CEO or Principal. Thanks a lot.)

Best Regards,

Vince Lee

Senior Consultant Manager

Anders als die Mehrheit von Phishing- oder Spam-Mails ist der Inhalt vernünftig formuliert und auf den ersten Blick durchaus glaubwürdig.

Doch «Vince Lee Senior Consultant Manager» in Google eingetippt fördert rasch zu Tage: Da ist etwas faul. Zahlreiche Artikel wie dieses Exemplar (wohlgemerkt aus dem Jahr 2013 – das Spiel wird also schon seit Jahren betrieben) machen auf die Betrugsversuche des Herrn aufmerksam. Und auch wir haben vor vielen Jahren schon über verwandte Betrugsmethoden berichtet.

Da ist etwas faul

Nimmt man die E-Mail etwas genauer unter die Lupe, zeigt sich glücklicherweise schnell, dass da etwas nicht stimmt. Folgende Merkmale deuten auf einen Betrug hin:

  • Eine Google-Suche verrät auf den ersten Blick, dass etwas krumm ist. Damit könnte man die Sache an sich schon auf sich bewenden lassen.
  • cyon.in, cyon.tw und cyon.cn sind – anders als in der E-Mail suggeriert – gar nicht mehr frei und von drei unterschiedlichen Personen registriert.
  • Die E-Mail setzt Druck auf, in einer kurzen Frist zu reagieren.
  • Weder wurde eine Anrede mit Name recherchiert noch ging die E-Mail an eine vernünftige E-Mail-Adresse (in diesem Fall wurde abuse@cyon.ch verwendet, welche von keiner sachverständigen Person für derartige Anfragen genutzt würde).
  • Aus der E-Mail geht nicht klar hervor, welche Firma denn der Absender sein soll. Als Name wird knapp «Vince» angegeben und die verwendete Domain leitet zwar auf eine existierende Website um, die Namen stimmen aber hinten und vorne nicht mit der E-Mail überein.
  • Die WHOIS-Daten dieser Domains zeigen nochmals komplett andere Firmennamen und sie sind erst seit wenigen Monaten registriert. Da wird also mit einem ganzen Geflecht an Namen operiert und offenbar ständig das Gewand gewechselt.

Die Masche: Domains zu exorbitanten Preisen

Würden wir unserem Herrn Vince nun antworten, wäre seine vorgeschlagene Lösung, dass er die Domains für uns, statt für den erfundenen Störenfried registrieren würde. Natürlich zu stark überhöhten Preisen und (gemäss erwähntem Artikel) vielleicht noch mit ein paar Zusatzdiensten wie einem «Brand Protection Service». Dass er die meisten Domains zudem gar nicht mehr registrieren kann, weil dies ja schon längst passiert ist, macht die Sache auch nicht gerade besser.

Vorsicht vor Domainbetrügern

Domains sind Vertrauenssache

Gerade weil Domains heute ein so wertvolles Gut sind, ist schnell Verunsicherung gestreut. So verwundert es leider kaum, dass dieser Umstand schamlos ausgenutzt wird.

Wir empfehlen Ihnen, Ihre Domains beim Anbieter des Vertrauens unterzubringen und Anfragen von Dritten zweimal anzuschauen. Auch sei noch einmal erwähnt, dass Ihnen ohne Ihr Zutun niemand eine Domain einfach wegnehmen kann, solange diese von Ihnen nicht gekündigt wird.

Sind Ihnen auch schon derartige Schreiben untergekommen? Wir und sicher auch andere Leser sind an Ihrer Geschichte interessiert. In den Kommentaren hat es wie immer Platz dafür.

APCu: Noch mehr Turbo für PHP-Applikationen

Nebst dem kürzlich vorgestellten LiteSpeed Cache und dem in PHP eingebauten OPcache, können Sie bei uns jetzt noch einen weiteren Cache nutzen, um Ihre Website schneller zu machen: APCu.

Hinweis: APCu steht auf allen Servern mit der Endung *.cyon.net zur Verfügung. Ist APCu auf Ihrem Server nicht verfügbar? Nehmen Sie mit uns Kontakt auf.

APCu: Noch mehr Turbo

«Nachfolger» von APC

APCu ist der Quasi-Nachfolger des beliebten «Alternative PHP Cache» (APC). APC war eine PHP-Erweiterung, die zwei Aufgaben abdeckte. Zum einen fungierte APC als sogenannter PHP-Beschleuniger der Bytecode im Arbeitsspeicher ablegte. Dank diesem Bytecode-Cache muss der PHP-Interpreter nicht bei jedem Aufruf den gesamten Code interpretieren, sondern kann den bereits berechneten Code (eben Bytecode) ausführen. Diese Arbeit übernimmt mittlerweile OPcache.

Zum anderen bot APC einen Daten-Cache, in welchem die PHP-Applikation selbst Daten ablegen konnte. Diese Funktion übernimmt nun «APC User Cache» kurz APCu. Dank APCu lassen sich zum Beispiel aufwendige Datenbankabfragen in den Zwischenspeicher legen und damit wertvolle Zeit sparen. Die PHP-Erweiterung können Sie bei uns ab sofort auf allen Angeboten nutzen.

APCu wird von einigen Frameworks automatisch zur Ablage von Daten genutzt. Ausserdem ermöglichen Plugins für verschiedene CMS die Nutzung von APCu. So unterstützt z.B. das beliebte WordPress-Caching-Plugin Cachify APCu als Speicherort für die Cache-Dateien.

Welchen Cache soll ich nutzen?

OPcache, APCu oder LiteSpeed Cache? Die Frage müssen Sie sich gar nicht stellen. Die 3 Caching-Varianten decken unterschiedliche Bereiche ab und können damit problemlos gleichzeitig genutzt werden. Während OPcache ohne Ihr Zutun seinen Dienst verrichtet, müssen APCu und LiteSpeed Cache durch die PHP-Applikation bzw. Rewrite-Anweisungen verwaltet werden. APCu wird von vielen Content-Management-Systemen oder entsprechenden Plugins unterstützt. Wenn Sie für Ihre eigene Applikation APCu nutzen möchten, können Sie die vordefinierten Funktionen zu Verwaltung nutzen. Und auch für LiteSpeed Cache stehen passende Plugins und Anleitungen bereit.

WordPress und LiteSpeed Cache: Bereit für Besucheranstürme

Seit Kurzem können Sie bei uns LiteSpeed Cache nutzen, damit Ihre Website noch schneller bei Ihren Besuchern landet. Wer WordPress verwendet und seine Website auf Geschwindigkeit trimmen will, kommt nicht am Einsatz eines Caching-Plugins vorbei. Mit LiteSpeed Cache für WordPress bieten die LiteSpeed-Entwickler ein offizielles Plugin, mit welchem Sie LiteSpeed Cache ganz einfach nutzen können. Wir haben getestet, was das Plugin kann.

Passen zusammen: WordPress und LiteSpeed Cache

In Ihrem cyon-Webhosting werkelt der auf Geschwindigkeit optimierte Webserver LiteSpeed, der eine integrierte Cache-Lösung bietet. Sie heisst ganz simpel LiteSpeed Cache.

Falls Sie WordPress nutzen, reicht die Installation eines Plugins um jede Menge Speed aus Ihrer Website herauszuholen. Das Plugin der LiteSpeed-Entwickler ist von Haus aus optimal konfiguriert, Anpassungen sind in den meisten Fällen nicht nötig. Wer gerne an den besten Einstellungen tüftelt kommt trotzdem nicht zu kurz: Danke einigen Justierungsmöglichkeiten, die jedoch nicht überladen wirken, lässt sich LiteSpeed Cache für WordPress auf jedes Bedürfnis abstimmen.

LiteSpeed Cache für WordPress: Änderungen an den Standardeinstellungen sind in der Regel nicht nötig.

LiteSpeed Cache für WordPress: Änderungen an den Standardeinstellungen sind in der Regel nicht nötig.

Kompatibel mit WooCommerce und Multisite

Neben ganz typischen WordPress-Websites unterstützt LiteSpeed Cache auch Multisite-Installationen, mit denen Sie ein ganzes Netzwerk an Blogs über eine Instanz betreiben können. Selbst das beliebte Plugin WooCommerce, das Ihre WordPress-Website in einen Webshop verwandelt, funktioniert bestens mit der Caching-Lösung. Gerade bei E-Commerce-Projekten, bei denen die Website-Struktur oft komplex ist und schnelle Ladezeiten über den Umsatz entscheiden können, spielt LiteSpeed Cache spürbar seine Stärken aus.

Caching-Plugins sind ein Muss

Wir haben den Test gemacht: Was kann LiteSpeed Cache? Als Grundlage haben wir eine mit Beispiel-Inhalten gefüllte Website genommen, die auf einem unserer Webhosting Single-Angebote läuft. Dabei kam WordPress 4.7.3 als Content-Management-System und ApacheBench (ab) als Messtool zum Einsatz. An der Website haben wir, ausser der Aktivierung eines Caching-Plugins, keine Optimierungen vorgenommen.

Wir haben gemessen, wie lange es dauert, bis der Server 1’000 Anfragen an die Website bei jeweils 100 gleichzeitigen Anfragen abgearbeitet hat. Und so schneidet LiteSpeed Cache im Vergleich zu den beliebtesten Caching-Plugins ab:

Plugin Zeit für 1’000 Anfragen Anfragen pro Sekunde
ohne Plugin 15.774 Sekunden 31.70 Requests
W3 Total Cache 5.356 Sekunden 93.36 Requests
WP Super Cache 5.371 Sekunden 93.09 Requests
LiteSpeed Cache 5.141 Sekunden 97.25 Requests

Der Geschwindigkeitsunterschied zwischen einer Website ohne Cache und WordPress mit aktiviertem Cache-Plugin ist spürbar. Das macht den Einsatz eines Caching-Plugins zum Muss für jeden WordPress-Nutzer.

Mit LiteSpeed Cache rennt Ihre WordPress-Website auch bei einem Besucheransturm.

Mit LiteSpeed Cache rennt Ihre WordPress-Website auch bei einem Besucheransturm.

Der Unterschied zwischen den beliebtesten Caching-Plugins und LiteSpeed Cache ist nicht mehr allzu gross, aber trotzdem messbar. Das spricht für den LiteSpeed-Webserver, der Ihre Website bereits von Haus aus sehr schnell an den Besucher ausliefert. Da die Daten für LiteSpeed Cache im Arbeitsspeicher des Servers abgelegt werden, ist diese Caching-Methode noch ein Quäntchen schneller als die Methoden der anderen Plugins.

Neben der besten Performance spricht auch die einfache Bedienung des Plugins für den Einsatz von LiteSpeed Cache für WordPress. In unserem Supportcenter finden Sie eine Anleitung dazu, wie Sie das Plugin für Ihre WordPress-Website installieren.

Atom: Mit den passenden Packages zum perfekten PHP-Editor

Sind Sie mit PHP Storm, Netbeans und Konsorten auch nicht allzu glücklich und bevorzugen einen etwas «leichteren» Editor zur PHP-Entwicklung? Ich zähle mich zu diesen Menschen. Und da ich mich sehr mit dem Atom-Editor angefreundet habe, habe ich mir diesen so eingerichtet, dass er auch für die PHP-Entwicklung gut funktioniert. Heute möchte ich Ihnen zeigen, wie mein Atom-Setup für PHP aufgebaut ist.

So wird Atom zum perfekten PHP-Editor.

Grundausstattung

Als erstes müssen wir natürlich sicherstellen, dass Atom installiert ist. In der Grundausstattung bringt der Editor noch nicht so viel Funktionalität mit, überzeugt jedoch mit Schnelligkeit und Einfachheit. Ausserdem kann er dank einem ausgeklügelten Plugin-System einfach erweitert werden.

Addon-Pakete können entweder direkt über den Editor oder über die Kommandozeile installiert werden. Für die Entwicklung von PHP-Projekten sollten wir nun zwei grundsätzliche Pakete installieren, die wir später benötigen werden:

  • Project Manager: Wird benötigt, um in Atom einfach Projekte zu definieren.
  • php-integrator-base: Legt die Grundlage für einige Plugins, die das Editieren von PHP-Code in Atom vereinfachen.

Wie auf der offiziellen PHP-Integrator-Website beschrieben, kann das Projekt nun folgendermassen initialisiert werden:

  • Über «Packages» > «Project Manager» > «Save Project» initialisieren wir das Projekt.
  • Über «Packages» > «PHP Integrator» > «Set Up Current Project» definieren wir das Projekt als PHP-Projekt.

Danach wird das gesamte Projekt automatisch indexiert und dem Einsatz von weiteren Plugins steht nichts mehr im Weg.

Autovervollständigung

Mit dem Paket «autocomplete-plus» bietet Atom eine eigene Lösung für schöne Autovervollständigungen an, die den Standardmechanismus ersetzt. Im Normalfall ist das Paket bereits installiert und aktiv. Ist das nicht der Fall, holen wir das noch nach.

Das Paket ist allerdings nur ein sogenannter «Provider», welcher von anderen Paketen verwendet werden kann. Standardmässig kennt Atom keine Vervollständigung von PHP-Code. Hier hilft uns das Plugin «php-integrator-autocomplete-plus», welches auf dem bereits installieren Paket «php-integrator-base» aufbaut.

PHP-Autovervollständigung im Atom-Editor.

PHP-Autovervollständigung im Atom-Editor.

Das Paket bietet einige Features:

  • Autocompletion for local variable names.
  • Autocompletion for global functions and constants.
  • Autocompletion (snippets) for tag names in docblocks.
  • Autocompletion for class, interface and trait members.
  • Autocompletion for class, interface and trait names as well as their constructors.
  • Automatic adding of use statements when class names are autocompleted (with a somewhat intelligent positioning).
    • Included is a command to sort the current use statements.

Navigation

Von waschechten IDEs sind wir uns gewohnt, dass wir auf Variablen oder Funktionen klicken können und dann automatisch bei der passenden Definition landen. Auch diese Funktionalität lässt sich mit einem passenden Plugin hinzufügen.

Als erstes benötigen wir das Paket «hyperclick», welches ebenfalls nur als Provider fungiert und von anderen Paketen verwendet werden kann. Nachdem wir «hyperclick» installiert haben, können wir das Paket «php-integrator-navigation» installieren, das diese Funktionalität perfekt für PHP-Code umsetzt.

Methoden, Funktionen, Variablen und Klassen können wir nun mit der Tastenkombination «Ctrl/Cmd» + «Klick» anwählen und landen damit automatisch bei der entsprechenden Definition. Das Paket bietet gemäss README die folgenden Funktionen:

  • Navigate to the definition of your global PHP constants and functions.
  • Navigate to the PHP documentation of built-in classes and functions by alt-clicking them.
  • Navigate to the definition of classes, traits and interfaces by alt-clicking them.
  • Navigate to the definition of class, trait and interface members by alt-clicking them.

Linter

Zum Thema Linting scheiden sich die Geister. Persönlich halte ich es für sinnvoll, dass mich der Editor direkt auf Coding-Style-Verletzungen hinweist. Wer das genau so praktisch findet wie ich, kann sich mit folgenden Paketen die passenden Funktionen in Atom dazuholen:

  • Linter: Das Provider-Paket.
  • linter-phpcs: Ein Linter auf Basis von PHP_CodeSniffer.
    (Achtung: PHP_CodeSniffer muss bereits installiert sein.)
  • php-integrator-linter: Ein weiterer Linter, der zusätzliche Verstösse – wie z.B. Ungenauigkeiten bei docBlocks – feststellen kann.
PHP-Linter im Atom-Editor.

PHP-Linter im Atom-Editor.

Weitere Pakete

Die wichtigsten Pakete, die Atom zu einem perfekten PHP-Editor machen, sind damit installiert. Wer in den verfügbaren Packages nach «php-integrator» sucht, findet unzählige weitere interessante Pakete, die in diesem Beitrag nicht erwähnt sind.

Auf welches Paket können Sie nicht mehr verzichten? Ich freue mich auf Ihren Kommentar.

Seite 1 von 10312345...102030...Letzte »