21
sep
2017
Miller Digital blog - E-commerce

PHP 7 maakt het web weer een stukje beter

PHP7 is de nieuwste evolutie van de PHP: Hypertext Preprocessor programmeertaal. De 7 is hier de laatste 'major' versie. Want op het moment van schrijven zijn we al bij 'minor' versie PHP7.1.9. De ontwikkeling gaat dus gestaag door!

Ontwikkelingen

De laatste keer dat er een nieuwe major versie van PHP uit kwam (PHP5) was in 2004. De oplettende lezer merkt nu op dat PHP6 niet genoemd wordt. Deze is inderdaad overgeslagen nadat de ontwikkelingen van deze versie negatief uitpakte en de ontwikkelaars besloten in een andere richting verder te gaan. Om verdere verwarring te voorkomen is de nieuwe versie PHP7 genoemd.

Sinds de komst van PHP5, de vorige major versie van PHP is er ook veel veranderd op het web. Websites zijn complexer geworden, interactiever, maar er is nu ook vooral veel meer internetverkeer. Behalve de miljoenen websites die de wereld kent, moet je ook denken aan gegevensdiensten die informatie uitwisselen. Bijvoorbeeld, voor het serveren van informatie over het OV, files, netwerkstatistieken, koppelingen met social media of andere diensten. Bij al dit soort situaties kan PHP gebruikt worden om informatie te leveren of te interpreteren.

Optimalisaties in PHP7

PHP moet dus behalve websites met relatief grote bestanden ook goed zijn in het serveren van kleine data. Bij PHP7 zijn deze en meer situaties geoptimaliseerd waardoor niet alleen websites sneller kunnen laden, maar ook gegevensdiensten sneller data kunnen serveren. Dit hangt samen met het aantal 'requests' dat een server in een bepaalde tijd kan verwerken, oftewel het aantal aanvragen dat een server krijgt om antwoord op te geven. Dit is in PHP7 significant verbeterd.

Bij Zend hebben ze het een en ander getest en zijn ze onder andere tot de volgende conclusies gekomen:

php_foto_1

Bron: https://www.zend.com/en/resources/php7_infographic

In het geval van WordPress, waar zo'n 25% van het internet gebruikt van maakt zijn de verbeteringen van PHP7 als volgt:

– PHP is nu een ontzettend snelle programmeertaal. In onderstaande situatie zelfs sneller dan Ruby, Python en Perl, welke bekend staan om hun goede snelheid.

Je ziet dat bij een redelijk recente versie van WordPress (versie 4.1) het aantal requests dat een server met PHP7 per seconde kan verwerken ongeveer verdubbeld is. Dat is een gigantische verbetering. Als gebruiker merk je dat hierdoor pagina's sneller geladen worden. In het grotere plaatje betekent het dat een webserver meer gebruikers tegelijk kan bedienen. Of, hetzelfde aantal gebruikers kan bedienen met minder inspanning en minder geheugengebruik.

Dat het snel laden van websites belangrijk is, is niet nieuw. Je kent zelf waarschijnlijk wel het frustrerende gevoel wanneer je op een interessant artikel geklikt hebt, maar eindeloos naar een witte pagina zit te staren die maar langzaam gevuld wordt. Soms duurt het zo lang dat je hem maar gewoon weg klikt. Een vlot reagerende website voelt modern aan, houdt gebruikers langer op de site en misschien wel het belangrijkste, zorgt voor een betere conversie. Dat laatste geldt vooral voor webshops. Een website die maar twijfelachtig z'n pagina's op je scherm toont geeft niet heel veel vertrouwen om succesvol een betaaltraject in te gaan. Straks wil een pagina niet laden na het betalen? Of komt de bevestiging van mijn betaling nooit aan? Allerlei (onbewuste) twijfels die ontstaan bij langzaam ladende websites.

Zie hieronder wat een extra vertraging van 1 seconde voor effect heeft:

Bron: https://www.truconversion.com/blog/conversion-rate-optimization/page-loading-speed/

In combinatie met WordPress kan PHP7 de laadtijd ongeveer 40% verminderen. Een pagina die er 3 seconden over deed om te laden kan dat met PHP7 in 1,5 seconde. Een verbetering die de moeite waard is dus.

Nieuwe mogelijkheden

Er zijn tal van nieuwe functies in PHP7. Hieronder zijn er een aantal die in de toekomst waarschijnlijk veel gebruikt zullen worden:

De Spaceship operator

Deze operator kijkt naar het verschil tussen 2 variabelen. Voorheen kon je wel testen of een getal groter was dan een ander getal, of juist kleiner of gelijk aan het andere getal. Maar echt een manier om te ontdekken hoe de ene variabele zich verhoudt ten opzichte van de andere variabele was er niet. Met de spaceship is deze optie nu beschikbaar en het werkt als volgt:

1 <=> 1 – In deze situatie is het resultaat 0, beide waarden zijn gelijk aan elkaar.
1 <=> 2 – Hier is de waarde -1. De eerste waarde is kleiner dan de tweede waarde.
2 <=> 1 – In dit geval is de waarde 1. De eerste waarde is groter dan de tweede waarde.

De Null coalesce operator

Een variabele die nog niets is, is null. Ofwel leeg. Er zijn situaties waarin je wilt testen of een waarde leeg is, om er vervolgens iets mee te doen. Denk bijvoorbeeld aan een variabele waar een statusbericht voor de verzending van een formulier in bewaard wordt. Indien de variabele een inhoud bevat, dan heeft er zich reeds een fout voorgedaan. Maar is de variabele null, dan geven we in dit bericht graag een succesvolle status door.

Voorheen moest je dan testen of een variabele gedeclareerd was met isset($variabele). Dit werd een if-statement omdat wanneer isset($variabele) waar was moest $variabele gewoon $variabele blijven. Maar indien $variabele leeg is, willen we hier een andere tekst in kwijt.

Met de null coalesce operator kan dat in 1 adem:

$variabele ?? “Indien null, is dit de nieuwe waarde.”;

Operators zoals deze maken het leven van een ontwikkelaar net iets makkelijker. En zorgen ervoor dat code logischer in elkaar zit, beter te begrijpen is, waardoor er minder complicaties kunnen optreden.

Group use declarations

Voorheen moesten classes uit dezelfde namespace alsnog afzonderlijk opgevraagd worden. Zo kreeg je lijstjes als:

use Library\a\b\c\ClassA;
use Library\a\b\c\ClassB;
use Library\a\b\c\ClassC;

Dat kan nu ook een stuk korter:

use Library\a\b\c\{ ClassA, ClassB, ClassC };

Hiermee kun je makkelijker zien welke classes uit dezelfde namespace komen. Dit komt ook de leesbaarheid weer ten goede.

Scalar type- en Return type declarations

Als ontwikkelaar wil je dat je code waterdicht is. Je wilt dus vaak van tevoren vast stellen wat voor waarden er door je functies behandeld worden. Een functie die in een bepaalde variabele een integer (getal) verwacht, maar een string (tekst) toegeworpen krijgt, kan mogelijk zorgen voor een foutieve output. Of erger, de code verderop in een functie kan niet om gaan met het andere data type waardoor het script crasht.

In andere programmeertalen die stricter zijn dan dat PHP is, is dit een standaard gegeven. Sterker nog, bij veel talen moet er een datatype gedeclareerd worden voordat de programmeertaal weet wat er met een bepaalde input moet gebeuren. In PHP is het nu ook mogelijk om dit strict in te stellen.

Een uitbreiding daarop zijn de return type declarations. Hiermee kan ingesteld worden in welk datatype een functie een waarde terug geeft. Zodat alle delen van de code weten over welke type data het gaat. Zo kunnen er geen onverwachte dingen gebeuren.

Migratie

Ondanks dat er bij PHP7 veel moeite is gedaan om de migratie van een oude PHP versie naar de nieuwste versie soepel te laten verlopen. Moet er toch opgelet worden. Veel websites maken gebruik van functionaliteit die in de eerdere versies van PHP5 beschikbaar was, maar die inmiddels uitgefaseerd zijn. Deze functionaliteit was in de laatste versie van PHP5 nog wel beschikbaar, maar wel aangemerkt als 'deprecated'. Wat betekent dat deze verouderd is en eigenlijk niet meer gebruikt zou moeten worden.

Bij de overgang naar PHP7 zijn onderdelen die deprecated waren in PHP5 absoluut niet meer beschikbaar. Controleer goed, of laat goed controleren, of de code van je website of web applicatie compatibel is met de huidige versie van PHP7. Er zijn verschillende tools om dit makkelijker te maken, zoals bijvoorbeeld php7cc: https://github.com/sstalle/php7cc en speciaal voor WordPress is er de plugin PHP Compatibility Checker: https://nl.wordpress.org/plugins/php-compatibility-checker/

Wanneer een ontwikkelaar de eventuele problemen verholpen heeft kan er gerust overgestapt worden op PHP7.

Conclusie

De nieuwste PHP versie stelt niet teleur! Het is mooi om te zien welke optimalisatieslag er bij deze versie behaald is. Maar let goed op bij het migreren, test belangrijke zaken twee keer en los problemen op voordat ze vervelend kunnen worden. Doe je dit zorgvuldig, dan zul je na het overstappen gebruik kunnen maken van alle nieuwigheden die PHP7 te bieden heeft. En gegarandeerd voordelen ondervinden uit de verbeterde prestaties die deze versie met zich meebrengt.

Is dit artikel interessant voor je? Lees meer gerelateerde artikelen
Meer bezoekers Responsive Technische ontwikkelingen WordPress