Es gibt so viele Programmier- und Skriptsprachen da draußen. Von PHP über Python, JavaScript bis hin zu Swift – nur richtig zufrieden bin ich mit keiner davon. Klar, jede Sprache hat seine Vor- und Nachteile und auch ihre Gebiete, wofür sie besonders gut geeignet ist. Aber warum gibt es eigentlich keine einfache Sprache, mit der man alles machen kann? C und C++ sind extrem mächtig, aber auch komplex und viel zu umständlich. PHP ist dagegen schön einfach, aber zu eingeschränkt in seinen Möglichkeiten. Bei Java trifft man auf einen Mittelweg, dafür erstickt man geradezu unter der Last der unzähligen Designpatterns. JavaScript wird von fast allen Plattformen unterstützt, besitzt aber keine echte Objektorientierung. Python-Code glänzt durch seine gut lesbare Struktur, wirkt auf mich aber immer angestaubt und veraltet (außerdem mag ich die Syntax nicht).
PHP Framework Benchmark 2017
Bei der Wahl eines geeigneten PHP Frameworks sind eine Menge Aspekte zu berücksichtigen. Ein besonders wichtiger Aspekt dabei spielt sicherlich die Performance, denn wie schnell eine Web-Applikation oder ein Portal die Anfragen bearbeitet, wirkt sich auch auf den späteren Erfolg aus.
Um die Performance zu beurteilen, habe ich drei Schwergewichte und ein alternatives Framework einem einfachen Benchmark unterzogen. Folgende Kandidaten gingen ins Rennen:
- Zend Framework 3.0.3 Skeletion Application
- Laravel 5.4.16
- Symfony 3.2.6
- Flow Framework 4.0.2 Base Distribution
Die Voraussetzungen:
Getestet wurde auf einem zwei Jahre alten Mac-Mini unter Apache 2.4 mit installiertem PHP 7.1. Den Benchmark selbst übernahm das Tool ApacheBench, das unsere Framework-Instanzen mit insgesamt 1000 Requests bombardiert (20 gleichzeitig).
Ergebnisse
Zend Framework 3.0.3 Skeletion Application
Requests pro Sekunde: 155,08
Gesamtzeit des Tests: 6,448 Sekunden
Laravel 5.4.16
Requests pro Sekunde: 108,17
Gesamtzeit des Tests: 9,245 Sekunden
Symfony 3.2.6
Requests pro Sekunde: 119,15
Gesamtzeit des Tests: 8,393 Sekunden
Flow Framework 4.0.2 Base Distribution
Requests pro Sekunde: 3,88
Gesamtzeit des Tests: 257,952 Sekunden
Requests pro Sekunde
(Mehr ist besser)
Gesamtzeit
(Weniger ist besser)
Fazit
Die Unterschiede zwischen den drei Schwergewichten Zend, Symfony und Laravel sind minimal, trotzdem konnte sich das Zend Framework als klarer Sieger durchsetzen.
Das abgeschlagene Flow Framework enttäuschte dagegen auf ganzer Linie. Mit 3,88 Requests pro Sekunde ist das alternative Framework für High-Traffic-Applikationen nicht zu gebrauchen. Schade.
Die Ergebnisse des Benchmarks sind natürlich mit Vorsicht zu genießen. Der Benchmark hat nur die Basis-Installation des jeweiligen Frameworks getestet. Wenn die Frameworks mit vollwertigen und komplexen Applikationen ausgestattet sind, könnten die Ergebnisse schon wieder ganz anders aussehen. Allerdings kann man anhand dieses Benchmarks bereits erkennen, dass sich das Zend Framework, Symfony und Laravel auf einem ähnlichen Level bewegen.
Deutsche Stoppwörter in Elasticsearch (gilt auch für Apache Lucene bzw. Solr)
Wenn man in Elasticsearch einem Property den deutschen Analyizer mitgibt, dann werden bestimmte Begriffe bei der Indizierung ignoriert. Beispiel:
{ "mappings": { "mytype": { "properties": { "title": { "type": "string", "analyzer": "german" } } } } } |
Sucht man anschließend nach Wörtern wie „ein“, „es“ oder „in“, wird Elasticsearch keine sinnigen Ergebnisse zurückliefern. Hier nun eine Liste aller deutschen Stoppwörter, die in Elasticsearch und Apache Lucene bzw. Solr standardmäßig gefiltert werden:
aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann der den des dem die das daß derselbe derselben denselben desselben demselben dieselbe dieselben dasselbe dazu dein deine deinem deinen deiner deines denn derer dessen dich dir du dies diese diesem diesen dieser dieses doch dort durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er ihn ihm es etwas euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich mich mir ihr ihre ihrem ihren ihrer ihres euch im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie ihnen sind so solche solchem solchen solcher solches soll sollte sondern sonst über um und uns unse unsem unsen unser unses unter viel vom von vor während war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte würde würden zu zum zur zwar zwischen
Auf Github findet man zudem noch Listen zu Stoppwörtern in diversen anderen Sprachen:
https://github.com/apache/lucene-solr/tree/master/lucene/analysis/common/src/resources/org/apache/lucene/analysis/snowball