WordPress of Laravel – of is dit (aard)appels met kroketten vergelijken?
Ooit, toen ik 14 jaar geleden met WordXPression begon, werd ik voor velen voor gek verklaard, omdat ik WordPress wilde gaan gebruiken voor het bouwen van websites. Dat deed je toch niet met WordPress? WordPress is immers een blogplatform. Nu, 14 jaar later is het meer dan duidelijk. Ongeveer de helft van alle websites op het Internet is gebouwd met behulp van WordPress. WordPress is in alle opzichten heel geschikt voor het bouwen van je website. Ik denk dat op dit moment de helft van de klanten waarvoor ik websites bouw, niet eens overwegen om te gaan bloggen.
Nu kan ik een heel lang verhaal gaan houden, waarom WordPress zo geschikt is, maar dat is niet de bedoeling van de blogpost van vandaag. Je kan WordPress ook op andere manieren gebruiken. Veertien jaar geleden was dat zelfs nog bijna ondenkbaar, maar je kan natuurlijk WordPress ook gebruiken als een ‘webapp’, een website, waarbij de nadruk niet op de content ligt, maar op bepaalde functionaliteiten. Want er zijn verschillende plugins die compleet nieuwe functionaliteiten toevoegen aan je website, waardoor je website ineens ‘omgetoverd’ wordt tot een compleet… tja een compleet wat? Er zijn voor WordPress plugins om WordPress te veranderen in onder meer :
- een webshop
- een learning management systeem / online leeromgeving
- een advertentie website waar mensen goederen en diensten aan kunnen bieden
- een ‘job board’
- een datingsite
- een reserveringssysteem
en nog veel meer.
En hoewel WordPress een zeer populair platform is om een groot aantal van bovengenoemde diensten op te realiseren, is het natuurlijk niet de enige mogelijkheid. Voor ieder van bovengenoemde toepassingen zijn er minstens enkele, en meestal vele Open-Source toepassingen beschikbaar die voor dezelfde dienst ingezet kunnen worden. En in het commerciële bereik vind je waarschijnlijk nog veel meer van dit soort apps.
Wat WordPress echter sterk maakt, is dat WordPress een soort ‘mix and match’ platform is. Wanneer ik een job board wil, waar mensen bovendien cursussen -sollicitatie trainingen bijvoorbeeld- willen volgen en bovendien ook nog in de webshop mijn boeken over solliciteren willen kopen, dan kan ik dit met een aantal WordPress plugins allemaal binnen één site realiseren.
Maar, wanneer ik nu eens een idee zou hebben wat compleet uniek is. Een idee wat nog nooit iemand heeft gehad, of wanneer hij dit wel zou hebben gehad, waarop hij in ieder geval nooit actie heeft ondernomen? Of zijn idee is wel ‘gangbaar’, maar de benadering zo anders, dat geen bestaande app of plugin hier ondersteuning voor biedt?
Dan is het tijd om zelf iets te gaan ontwikkelen. En dan is het natuurlijk de vraag hoe je dit aan wilt pakken.
Nu zijn er hier talloze mogelijkheden voor en ik kan niet al die mogelijkheden met elkaar vergelijken, maar ik wil twee platforms die heel populair zijn onder je aandacht brengen. Beide platforms werken met dezelfde programmeertaal (PHP) en beide zijn eigenlijk de ‘standaard oplossing’, maar ieder voor een eigen gebied.
WordPress of Laravel?
Voor we ons de vraag ‘WordPress of Laravel’ kunnen stellen, is de eerste vraag natuurlijk, wat beide platforms nu precies (of ongeveer) inhouden. En als we dat weten, dan is het ook goed om af te vragen, of we wel een valide vraag stellen. En of we niet proberen appels met kroketten te vergelijken.
Wat WordPress is, is je waarschijnlijk wel bekend. Je bent immers aan het lezen in de WordXPression blog die vrijwel uitsluitend over WordPress gaat. Wat Laravel is, is wellicht wat minder bekend omdat je -tenzij je zelf programmeert- niet vaak met de term ‘Laravel’ geconfronteerd zal zijn. En toch durf ik te wedden dat jij gebruik maakt van heel veel webapps die met Laravel gebouwd zijn.
En in de beantwoording van mijn vraag ‘WordPress of Laravel’, ga ik beslist niet proberen uit te vinden welk platform ‘het best’ is. Want op die vraag kan geen antwoord gegeven worden. De enige vraag die ik met dit artikel hoop te beantwoorden is welk platform het best is voor jouw specifieke wens.
En als je alleen een website zoekt, zonder verdere poespas, dan mag je hier stoppen met lezen -tenzij je natuurlijk gewoon nieuwsgierig bent. Want voor het bouwen en onderhouden van je website is WordPress zonder meer het best geschikt.
Hebben we die vraag alvast beantwoord.
Wat is Laravel?
Laravel is een open-source PHP-webframework, wat werd ontworpen om webontwikkelingsprojecten eenvoudiger en sneller te maken door het bieden van een groot aantal ingebouwde functies en een expressive, elegante syntax. Het is dus een framework waarop je applicaties kan bouwen, geen applicatie op zich. In 2011 werd versie 1 door Taylor Otwell uitgebracht en eigenlijk heel goed ontvangen door de PHP programmeursgemeenschap.
In plaats van proberen het wiel iedere keer opnieuw uit te vinden, werd gebruik gemaakt van veel bestaande programma libraries, maar werden deze geïntegreerd zodat alles via dezelfde elegante syntax werkte.
Laravel noemt zich het liefst een ‘PHP Framework for Web Artisans’, een PHP Framework voor web artiesten. Een tweede term die je in de Laravel wereld ook vaak zal horen is de term ‘Ecosysteem’. Want Laravel is eigenlijk veel meer dan alleen een PHP Framework. Voor jou als niet-programmeur is het allemaal niet zo super interessant, wat Laravel allemaal te bieden heeft, maar ik wil toch aan de hand van een aantal belangrijke kenmerken aangeven, waarom Laravel interessant is.
En dat aan de hand van een vergelijk tussen WordPress en Laravel. Niet om een winnaar te benoemen, want uiteindelijk gaat het hier niet om de keuze WordPress of Laravel, maar om duidelijk te maken wat de verschillen zijn, en waarom in de éne situatie Laravel beter past, in een andere situatie WordPress.
Laten we dit wat duidelijker maken door een vergelijk te maken tussen beide voornoemde platforms.
Vergelijking tussen WordPress en Laravel
1. Doel en Gebruik:
- WordPress:
- Doel: Oorspronkelijk ontworpen als een blogging platform, maar uitgegroeid tot een veelzijdig content management systeem (CMS).
- Gebruik: Ideaal voor websites waar content management centraal staat, zoals blogs, nieuwswebsites, en eenvoudige zakelijke websites. Het is ook geschikt voor e-commerce websites met behulp van plugins zoals WooCommerce.
- Laravel:
- Doel: Een PHP-framework voor het ontwikkelen van webapplicaties met een focus op elegantie en eenvoud.
- Gebruik: Geschikt voor complexe webapplicaties, zoals enterprise toepassingen, API’s, en op maat gemaakte webapplicaties. Het biedt meer flexibiliteit en controle over de structuur van de applicatie.
2. Flexibiliteit en Aanpassing:
- WordPress:
- Flexibiliteit: Biedt een breed scala aan thema’s en plugins die gebruikers in staat stellen om functionaliteiten toe te voegen zonder veel technische kennis.
- Aanpassing: Beperkt tot wat thema’s en plugins bieden, hoewel ontwikkelaars maatwerk kunnen toevoegen via custom plugins en child themes.
- Laravel:
- Flexibiliteit: Zeer flexibel en biedt uitgebreide mogelijkheden voor maatwerk. Ontwikkelaars kunnen vrijwel alles vanaf nul bouwen, wat volledige controle geeft over de functionaliteit en structuur.
- Aanpassing: Geen beperkingen; elke aspect van de applicatie kan worden aangepast aan specifieke eisen.
3. Gebruiksgemak:
- WordPress:
- Voor beginners: Zeer gebruiksvriendelijk met een intuïtieve interface. Gebruikers kunnen snel aan de slag zonder diepgaande technische kennis.
- Voor ontwikkelaars: Kan beperkt aanvoelen door de structuur en het gebruik van plugins.
- Laravel:
- Voor beginners: Steilere leercurve vergeleken met WordPress. Basiskennis van PHP en webontwikkeling is vereist.
- Voor ontwikkelaars: Uitstekend voor ontwikkelaars die maatwerkoplossingen willen bouwen met uitgebreide documentatie en een sterke community.
4. Veiligheid:
- WordPress:
- Veiligheid: Regelmatige updates en beveiligingspatches. Echter, vanwege de populariteit, vaak een doelwit voor aanvallen. De veiligheid hangt ook af van de kwaliteit van gebruikte plugins en thema’s.
- Laravel:
- Veiligheid: Biedt ingebouwde beveiligingsfuncties zoals bescherming tegen SQL-injecties, XSS-aanvallen en CSRF. De veiligheid hangt grotendeels af van de implementatie door de ontwikkelaar.
5. Performance:
- WordPress:
- Performance: Kan traag worden met veel plugins en zware thema’s. Optimalisatie door caching plugins en goed geconfigureerde hosting is vaak nodig.
- Laravel:
- Performance: Over het algemeen sneller dan WordPress omdat het geen onnodige code laadt. Biedt mogelijkheden voor geavanceerde optimalisatie door middel van caching, queues en andere technieken.
6. Schaalbaarheid:
- WordPress:
- Schaalbaarheid: Geschikt voor kleine tot middelgrote websites. Schaalbaarheid kan een uitdaging zijn voor zeer grote en complexe sites zonder uitgebreide optimalisaties.
- Laravel:
- Schaalbaarheid: Beter geschikt voor grote en complexe applicaties. Architectuur is ontworpen om eenvoudig te kunnen schalen.
Beide platforms hebben hun eigen sterke punten en zijn geschikt voor verschillende soorten projecten. Welk platform het meest geschikt is voor een bepaalde toepassing is mede afhankelijk van een aantal factoren.
Database complexiteit
WordPress is met de ‘Custom Post Types’ heel goed geschikt om nieuwe gegevenstype op een eenvoudige manier op te nemen in de website. En met moderne page- en theme builders als bijvoorbeeld Elementor kan je ook weer eenvoudig deze gegevens zichtbaar maken binnen je website.
Wanneer je een applicatie wilt (laten) ontwikkelen die gebruik moet maken van eenvoudige gegevenstypen, kan je tegenwoordig helemaal doen zonder ook maar een letter te hoeven programmeren. Met een plugin als ACF creëer je een custom post type, voeg daar velden en taxonomieën aan toe, en je bent al een eind op weg.
Waar WordPress wat minder goed geschikt voor is, is voor complexe database applicaties. Wanneer er tussen verschillende gegevenstypen relaties gelegd moeten worden, dan wordt het al een stuk ingewikkelder, en dan zal je toch moeten beginnen met programmeren. En op het punt van het programmeren voor een database, daar is WordPress juist heel zwak in. Wil je maatwerk gegevens opslaan in ’traditionele relationele tabellen’ (als je niet begrijpt, wat ik bedoel, dan geeft dat niet), dan kan je met WordPress niet zo heel goed uit de voeten.
Op dit gebied is juist Laravel extreem sterk. Laravel is helemaal gebouwd rond een zogenaamd ORM (Eloquent), een ‘Object Relational Mapper’. Een ORM is eigenlijk een programma-laagje tussen de applicatie en de database waarbij door eenvoudige definities relaties tussen gegevens en de controles op de juistheid van de gegevens worden afgedwongen. Alle gegevensdefinities zitten als het ware in dit ORM ingebakken.
En hierdoor is Laravel extreem geschikt voor complexe database toepassingen.
Eén goede vraag om jezelf de stellen is dus, of de app die je voor ogen hebt, éénvoudig of juist heel complex is met betrekking tot het datamodel. Eén hint: Als er meer dan drie gegevenstypen zijn, die in een onderlinge relatie staan tot elkaar, dan is het goed om toch Laravel te overwegen.
Integratie en interfaces
En bij het volgende vergelijkingspunt komt direct het voordeel van een ORM om de hoek kijken. Er zijn verschillende manieren waarop je applicaties onderling met elkaar kan laten ‘praten’, maar de twee meest populaire wijzen zijn REST en GraphQL. Nu ‘spreken’ WordPress en Laravel allebei REST, maar toch op verschillende manieren.
In WordPress is REST in WordPress ingebouwd. Het werkt. Punt uit. Tenminste, wanneer je het in de settings niet uit zet. Maar voor plugins voor WordPress is dit allemaal niet het geval. Iedere plugin zal zijn eigen REST interface moeten implementeren, en dat is behoorlijk wat werk.
Omdat Laravel’s ORM -Eloquent- alle gegevensdefinities centraal in het gegevensmodel heeft opgeslagen, ‘weet’ een Laravel applicatie hoe gegevens benaderd en gevalideerd moeten worden. Het enige wat een programmeur hoeft te doen is specifieke ‘endpoints’ te definiëren die via de REST API aangeroepen kunnen worden. Een stuk makkelijker dus.
Dat is ook een belangrijke reden, dat Laravel ook veel gebruikt wordt in zogenaamde ‘headless‘ apps. Apps die zelf geen interface voor de eindgebruikers hebben, maar via ‘oproepen’ op afstand (een mobiele telefoon, een andere REST applicatie of zelfs een WordPress plugin) de gegevens beschikbaar stellen.
Beheers interface (Dashboard)
Ik werk nu al heel wat jaartjes met de WordPress beheersinterface (het ‘Dashboard’), maar om eerlijk te zeggen, vind ik die vaak nogal rommelig. Omdat ik er inmiddels aan gewend ben geraakt, doet het mij weinig meer, maar ik hoor heel terecht van klanten die helemaal nieuw zijn met betrekking tot WordPress, dat het toch wel even wennen is. En dat ben ik helemaal met ze eens.
Wanneer je gegevenstypes (‘Custom Post Types‘ in wilt voeren vanuit het Dashboard, staan de verschillende velden her en der verspreid over het hele scherm. En vergeet je dingen in te vullen, krijg je zelden of nooit een herinnering ‘hé, dit is een verplicht veld’.
Een voordeel is wel, dat wanneer je Custom Post Types gebruikt voor het vastleggen van gegevens, je letterlijk niets hoeft de doen voor de invoerschermen. WordPress bouwt deze zelf op, afhankelijk van de definitie van het Custom Post Type.
Voor Laravel zijn er verschillende ‘Packages’ (Het Laravel equivalent voor plugins) die het mogelijk maken een mooie en goede beheerders interface te bouwen. Zelf ben ik nogal te spreken over Filament. Hiermee kan relatief eenvoudig een complete beheerdersinterface gegenereerd worden vanuit het ORM, waarbij Filament semi-intelligent op basis van de database beschrijving de juiste invoervelden kiest (dus tekstveld, aan/uit knop, keuzelijst of checkboxes). Hiervoor wordt PHP code gegenereerd, die de programmeur later eventueel aan kan passen.
Het maken van formulieren voor het gegevensonderhoud door de beheerder is dus eigenlijk -voor een programmeur- een fluitje van een cent geworden.
Het bouwen van een complete data georienteerde applicatie met beheerdersinterface kan dus in een vrij korte tijd worden uitgevoerd.
En met een stuk gebruikersvriendelijkere schermen dan WordPress standaard aanbiedt.
Overigens, een ‘maatwerk user interface’ voor een WordPress plugin is ouderwets code-kloppen en kost behoorlijk wat tijd.
Front-end presentatie
Mocht je denken, dat WordPress het op alle fronten aflegt tegen Laravel, dan heb je het toch fout. Want WordPress is in de eerste plaats een Content Management System (CMS) wat bedoeld is om content te presenteren. En dat doet WordPress geweldig goed.
Het bouwen van een front-end voor Laravel gebeurt nog helemaal in HTML/CSS en betekent dus voor de bouwer behoorlijk wat code kloppen. Door gebruik te maken van een template engine (Blade) is er wel heel veel van die code herbruikbaar, waardoor je heel wat minder code hoeft te kloppen dan bij ‘plain HTML’, maar het maken van een frontend voor Laravel blijft veel en specialistisch werk.
WordPress daarentegen beschikt over talloze templates die je aan kunt schaffen, of gratis downloaden en een enorme keuze uit page- en template builders, waarvan Elementor natuurlijk de meest bekende is.
Het maken van een website op maat met WordPress is een spreekwoordelijk fluitje van een cent.
Nu is er voor Laravel wel een aantal ‘CMS’ packages of ‘Page Builder packages’, maar die zijn allemaal in vergelijking met WordPress ver onder de maat. Laravel wordt meestal ingezet in situaties, waarbij de nadruk op de applicatie, en niet de vormgeving ligt.
Omdat in alle situaties het eindresultaat HTML is, kan je *identieke* front-ends bouwen op beide platforms. Maar in WordPress gaat dit toch wel een heel stuk sneller.
Performance
Een werkelijk pijnpunt van WordPress is de performance. En dat komt eigenlijk omdat WordPress een beetje achterstevoren werkt. En dat komt weer, omdat WordPress nooit ontworpen is als applicatieplatform, maar als Content Management System.
Wanneer je een WordPress pagina laadt, dan zal WordPress op een gegeven moment in de laad-cyclus alle plugins laden. Nu kan je door een plugin manager te gebruiken nog aangeven, dat op specifieke pagina’s alleen bepaalde plugins geladen moeten worden, maar op veel sites moet je toch werkelijk alle plugins geladen hebben.
Wanneer je bijvoorbeeld op iedere pagina van je WooCommerce webshop een winkelwagen in de menubalk wilt tonen, dan zal je op alle pagina’s, ook die verder niets met je webshop te maken hebben, WooCommerce moeten laden.
Laad je op deze wijze twee ‘zware’ plugins naast elkaar (bijvoorbeeld WooCommerce en een LMS), dan wordt er toch heel wat in het geheugen geladen.
In Laravel werkt het precies andersom. Want in Laravel wordt niet Laravel als eerste geladen, maar via de URL (die in Laravel een ‘route’ wordt genoemd, maar dat is verder voor jou en de bezoeker van de site niet van belang) wordt een ‘controller’ geladen. Een ‘controller’ is een -meestal klein- PHP bestandje wat aangeeft, wat er bij een specifieke actie moet gebeuren. En die controller laadt dan de nodige functies en objecten van het onderliggende framework om die actie uit te kunnen voeren. Het enige wat dus wordt geladen is dan ook de code die daadwerkelijk nodig is.
Database driven content
Een ander punt wat de performance van WordPress sterk beïnvloed is het feit, dat WordPress letterlijk alle gegevens uit de database moet halen. Iedere regel tekst die jij kan aanpassen in WordPress -inclusief de naam van je site- moet uit de database worden gehaald. En dat kost behoorlijk wat geheugen en performance.
Het fraaie is, dat je zomaar vanuit je dashboard of je page builder ieder gegeven kan wijzigen, het nadeel is, dat er toch wel heel wat transacties heen en weer vliegen tussen database en webserver.
Laravel daarentegen werkt normaal gesproken niet met ‘data driven content’. In plaats daarvan werkt Laravel met een serie ‘config’ bestanden die naar behoefte wel of niet worden geladen, en een .env bestand wat altijd wordt geladen. Het is mogelijk om Laravel apps te bouwen die geen enkele verbinding met een database hoeven te hebben.
En wat ook heel aardig is, wanneer je maar een kleine database nodig hebt, dan hoef je geen zwaar programma als MySQL of PostgreSQL op je server te draaien, maar kan je gebruik maken van SQLite, een ‘single file database’ die voor kleine toepassingen zeer geschikt is. En wat voor kleine toepassingen ook veel sneller werkt dan MySQL of PostgreSQL.
En omdat je met Laravel niet alleen kan werken met verschillende typen databases, maar ook met verschillende databaseverbindingen, is het niet ondenkbaar -wanneer je dan toch een CMS in Laravel zou willen implementeren- de content-data in zo’n snell SQLite database op te slaan en de overige data in een grotere database.
Caching
Nu zijn de bovengenoemde performance problemen oplosbaar door middel van caching. En beide platforms hebben een caching systeem.
Nu is het WordPress caching systeem alleen een voorbereiding om caching mogelijk te maken. Je zal altijd eerst op zoek moeten gaan naar de voor jou meest passende caching plugin. En mijn ervaring is dat dit over de jaren nogal flink kan verschuiven.
Laravel heeft caching 100% ‘native’ ingebouwd. Standaard staat het systeem uit op een development systeem en aan op een productiesysteem. Maar zelfs als het ‘aan’ staat heeft het toch wel wat finetuning nodig (net zoals een WordPress caching systeem overigens).
Wanneer je gebruik maakt van de Blade template engine (zie hierboven, bij de ‘front-end’), dan gebruik je caching op de meest efficiënte manier.
WordPress cachet op basis van pagina’s. Is een pagina nog niet in de cache, of is de cache verlopen, wordt de pagina opnieuw gecachet
Laravel pakt dat iets anders aan. Een pagina (view in Laravel) kan bestaan uit verschillende ‘geneste’ blade templates. De view voor een pagina, kan bijvoorbeeld een header hebben, een footer, een sidebar en een content gebied. Wanneer ik pagina 1 opvraag, dan worden al deze onderdelen gecachet. Vraag ik vervolgens pagina 2 op, dan zal Laravel detecteren, dat van deze pagina de header, sidebar en footer al in de cache voorkomen. En alleen de content area in de cache plaatsen.
Ik kan zelfs aangeven of een bepaalde geneste template wel gecachet moet worden. In een webshop bijvoorbeeld, zal ik misschien alle informatie uit de cache willen halen behalve de huidige productvoorraad.
Een app voor je business?
Wanneer je een app nodig hebt voor je business en je hebt een WordPress site, dan ligt het natuurlijk voor de hand, om te kiezen voor een WordPress plugin. Is er echter geen plugin beschikbaar die doet wat je wilt, en je zou toch voor maatwerk moeten kiezen, dan is het goed om Laravel eens in overweging te nemen, vooral wanneer de app wat complexer wordt.
Voor meer informatie, neem gerust geheel vrijblijvend contact op. Wanneer je het contactformulier invult, kunnen we een afspraak maken om alles eens rustig door te spreken in een videoconferentie.
Ten slotte
In de komende maanden ga ik je meer vertellen over de mogelijkheden van Laravel en -vooral- de mogelijke combinaties die je met WordPress en Laravel kan maken.
De volgende onderwerpen zullen onder meer aan de orde komen. (Op het moment dat het punt klikbaar is, is het artikel inmiddels ook live).
- WordPress en Laravel: Hoe laat je deze samenwerken?
- WordPress en Laravel: Starten met een SaaS platform?
- Laravel – Laten we er eens wat beter naar kijken!