1) Welke soort caching zijn aan te raden en hoe gebruik je ze?
-Database caching
-Template caching
-Query caching
Database caching:
Hiermee cache je sommige gedeeltes van je database. Dit is vooral handig bij een website die veel inserts heeft in een bepaalde tabel. De bedoeling is dat je met 2 tabellen werkt. Je gooit alle tabellen in tabelA, om de x minuten gooi je ze in tabelB. In je coding gebruik je alleen tabelB, behalve bij het inserten.
Zoals al eerder vermeld gebruik je dan een (server of php) cron om de data van tabelA met tabelB te mergen.
Template caching:Om coding apart te houden gebruiken sommige mensen een template engine, in dit geval is het van belang je content te cachen. In je coding “compileer” je als het ware de inhoud van je template file. Deze gecompileerde coding schrijf je weg naar een .php bestand.
- Parsen: data compileren en outputten
- Cachen: data compileren en wegschrijven en dat bestand iedere keer aanroepen, zodat je niet steeds hoeft te parsen
Als je het bovenstaande iedere keer gaat doen, wordt het uiteindelijk langzamer dan de template gewoon parsen (wat Templatepower doet). Daarom moet je zorgen dat de data om de x minuten of x tijd geüpdate wordt. Ik zelf ben een voorstaander van: “als de template file geüpdate is, dan moet je de caching (.php file) updaten”. Dit doet mijn PHP template engine (zelf geschreven), voor mij automatisch, komt geen cron aan te pas.
Ik raad zelf geen Templatepower aan. Ik raad Smarty aan (smarty.php.net), het is razendsnel en handig voor beginners of mensen die geen eigen template engine kunnen schrijven.
Query caching:
Hier komen de functies serialize en unserialize goed van pas. Deze cache methode houd in dat je het resultaat van de query opvangt en wegschrijft in een .php bestand. Zodat je niet bij iedere pageload de query hoeft uit te voeren, maar je include dan het bestand waarnaartoe je de geserializede data heen hebt geschreven. Dit wegschrijven hoef je alleen te doen als de data veranderd is of om de x minuten.
Stel je voor je query geeft terug:
Array (‘foo’ => ‘bar’, ‘baz’ => ‘bla’)
Jij serialized deze data en schrijft het weg naar een .php bestand. Zodat je dit bestand kunt includen. Dit scheelt dan weer een extra query.
Dit is bijna alleen aan te raden voor de configuratie van een systeem of de permissies van iets. PHPBB3 gebruikt dit dan ook voor hun configuratie en hun permissiesysteem. Het wordt om de x tijd opnieuw naar het .php bestand weggeschreven, zodat het altijd up to date is.
Ik zelf kies ervoor om bij iedere verandering van de configuratie (in de back-office) het op te slaan in een .php bestand. Zodat je alleen bij veranderingen de content veranderd. Dit bespaart moeite zoals een cron e.d.
2) Handige tips bij het cachen
Zorg er als eerste voor dat je de bestanden of tabellen waar je data naartoe wegschrijft op SLOT zet. In coding taal heet dit LOCKING.
Bij bestanden in PHP kan dit door middel van de functie: “flock”. In SQL doe je dit met de syntax: “LOCK TABLE”.
Daarnaast is het aangeraden data die niet frequent veranderd, alleen up te daten als het veranderd is. Dus niet om de x minuten de data vernieuwen, want dat is toch onnodige moeite.
- Cachen met PHP
-
15-04-2006, 17:03 #1
- Berichten
- 95
- Lid sinds
- 19 Jaar
Cachen met PHP
Laatst aangepast door Sean K : 15-04-2006 om 17:19
-
-
15-04-2006, 18:08 #2
- Berichten
- 74
- Lid sinds
- 19 Jaar
Wat is de reden waarom je TemplatePower afraad? Ik moet eerlijk toegeven dat het de enige is die ik ooit heb uitgeprobeerd, heb er nooit problemen mee gehad dus ik heb niet echt de neiging om rap over te stappen. Tenzij je natuurlijk met stevige argumenten afkomt ;-)
-
15-04-2006, 18:12 #3
- Berichten
- 95
- Lid sinds
- 19 Jaar
Heel simpel, een paar redenen:
1) Langzaam
2) Duurde te lang voordat ze gingen cachen, laat zien dat ze een achterstand hebben
3) Smarty is vele malen beter (vandaar dat het een php.net subdomein heeft)
4) Moeilijker uit te breiden dan bijv. Smarty
-
15-04-2006, 18:40 #4
- Berichten
- 74
- Lid sinds
- 19 Jaar
Ik ga het eens uit proberen. Ik denk dat het overgrote deel van het gebruik gelijk is een ander engine.
Bedankt voor de tip!
-
15-04-2006, 18:45 #5
- Berichten
- 268
- Lid sinds
- 19 Jaar
Serializen wordt bij vbulletin in hun 'datastore' gebruikt waarin alle permissies en instellingen staan.
Dit is ook een manier van cachen.
-
15-04-2006, 18:48 #6
- Berichten
- 95
- Lid sinds
- 19 Jaar
Ik zal kijken of ik in de toekomst dit artikeltje wat meer kan uitwerken. Het bevat op dit moment alleen de vitale dingen van cachen in PHP. De kleine dingen moeten er natuurlijk ook bij vermeld worden.
-
20-04-2006, 20:30 #7
- Berichten
- 730
- Lid sinds
- 19 Jaar
Bedankt voor de uitleg, kan altijd van pas komen!
-
27-04-2006, 15:28 #8
- Berichten
- 102
- Lid sinds
- 19 Jaar
http://pear.php.net/package/Cache_Lite
Ik gebruik zelf al ~3 jaar een zelf aangepaste versie hiervan, en tot nu toe werkt het prima, met wat limitaties die ik in de loop van de jaren heb verplaatst is het al met al een van de snelste systemen die ik me nog kan voorstellen ...
In samenwerking met een aangepaste versie van Templatepower ben je echt al heel ver ..
-
17-05-2006, 16:20 #9
- Berichten
- 374
- Lid sinds
- 19 Jaar
Zoals al eerder vermeld gebruik je dan een (server of php) cron om de data van tabelA met tabelB te mergen.
Hoe werkt dat juist zo'n cron?
Is het mogelijk hiervan een simpel voorbeeld te tonen met eventueel wat uitleg erbij?
Dank bij voorbaat,
Olivier
-
17-05-2006, 16:48 #10
- Berichten
- 173
- Lid sinds
- 19 Jaar
insert into tabel1 select * from tabel2
-
17-05-2006, 16:51 #11
- Berichten
- 292
- Lid sinds
- 19 Jaar
Eigenlijk denk ik dat Olivier informatie zoekt over Cronjobs, die te vinden is in de Linux Knowledge Base of in het Nederlands bij Multidesk.
-
17-05-2006, 17:29 #12
- Berichten
- 173
- Lid sinds
- 19 Jaar
*/1 * * * * /usr/local/bin/php_whatever /var/www/file/phpfile.php
en in de phpfile.php staat iets als:
<?php
mysql_connect('host', 'user','pass');
mysql_select_db('database');
mysql_query('insert into tabel1 select * from tabel2');
?>
opslaan gebeurd in tabel1, het uitlezen gebeurd in tabel2 bijvoorbeeld
-
18-05-2006, 11:59 #13
- Berichten
- 374
- Lid sinds
- 19 Jaar
/
Ik wou inderdaad meer info over cronjobs.
Dankje voor de links & het voorbeeld !
-
22-06-2006, 18:58 #14
- Berichten
- 91
- Lid sinds
- 18 Jaar
Leuk artikeltje over hoe Typo3 (een enterprise CMS) het cachen van pagina's maar ook delen van pagina's oplost: http://typo3.org/development/article...eries-of-chash
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic