Zend_Cache-Frontends.xml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. <sect1 id="zend.cache.frontends">
  2. <title>Zend_Cache frontends</title>
  3. <sect2 id="zend.cache.core">
  4. <title>Zend_Cache_Core</title>
  5. <sect3 id="zend.cache.core.introduction">
  6. <title>Introductie</title>
  7. <para>
  8. <code>Zend_Cache_Core</code> is een speciale frontend omdat het de kern van de module is. Het is een generieke cache frontend en wordt uitgebreid door andere classes.
  9. </para>
  10. <note><para>
  11. Alle frontends erven van <code>Zend_Cache_Core</code> zodat zijn methodes en opties (zoals hieronder beschreven) ook beschikbaar zijn in andere frontends, dus ze zullen hier niet worden gedocumenteerd.
  12. </para></note>
  13. </sect3>
  14. <sect3 id="zend.cache.core.options">
  15. <title>Beschikbare opties</title>
  16. <para>
  17. Deze opties worden doorgegeven aan de factory methode zoals hierboven gedemonstreerd.
  18. </para>
  19. <table>
  20. <title>Beschikbare opties</title>
  21. <tgroup cols="4">
  22. <thead>
  23. <row>
  24. <entry>Optie</entry>
  25. <entry>Data Type</entry>
  26. <entry>Standaard Waarde</entry>
  27. <entry>Omschrijving</entry>
  28. </row>
  29. </thead>
  30. <tbody>
  31. <row>
  32. <entry><code>caching</code></entry>
  33. <entry><code>boolean</code></entry>
  34. <entry><code>true</code></entry>
  35. <entry>
  36. zet de caching aan of uit (kan handig zijn om te debuggen)
  37. </entry>
  38. </row>
  39. <row>
  40. <entry><code>lifeTime</code></entry>
  41. <entry><code>int</code></entry>
  42. <entry><code>3600</code></entry>
  43. <entry>
  44. Levensduur van de cache (in seconden), wanneer de waarde <code>null</code> is, blijft de cache altijd geldig.
  45. </entry>
  46. </row>
  47. <row>
  48. <entry><code>logging</code></entry>
  49. <entry><code>boolean</code></entry>
  50. <entry><code>false</code></entry>
  51. <entry>
  52. Wanneer dit op true staat, wordt logging via <code>Zend_Log</code> aangezet (maar wordt het systeem trager)
  53. </entry>
  54. </row>
  55. <row>
  56. <entry><code>writeControl</code></entry>
  57. <entry><code>boolean</code></entry>
  58. <entry><code>true</code></entry>
  59. <entry>
  60. Zet schrijfcontrole aan (de cache wordt direct na schrijven gelezen om corrupte records te herkennen), door writeControl aan te zetten zal de cache iets trager wegschrijven maar het lezen wordt niet trager (het kan sommige corrupte cache bestanden herkennen maar is geen perfecte controle)
  61. </entry>
  62. </row>
  63. <row>
  64. <entry><code>automaticSerialization</code></entry>
  65. <entry><code>boolean</code></entry>
  66. <entry><code>false</code></entry>
  67. <entry>
  68. Zet de automatische serialisatie aan of uit, dit kan worden gebruikt om direct informatie op te slaan dat geen string is (maar het is trager)
  69. </entry>
  70. </row>
  71. <row>
  72. <entry><code>automaticCleaningFactor</code></entry>
  73. <entry><code>int</code></entry>
  74. <entry><code>0</code></entry>
  75. <entry>
  76. Stel het automatische opschoonsysteem in (garbage collector): 0 betekent geen automatische opschoning, 1 betekent systematisch cache opschonen en x &gt; 1 betekent willekeurig opschonen 1 keer per x schrijf operaties.
  77. </entry>
  78. </row>
  79. </tbody>
  80. </tgroup>
  81. </table>
  82. </sect3>
  83. <sect3 id="zend.cache.core.examples">
  84. <title>Voorbeelden</title>
  85. <para>
  86. Een voorbeeld wordt gegeven aan het begin van de handleiding.
  87. </para>
  88. <para>
  89. Wanneer je alleen strings in de cache wil opslaan (want met "automaticSerialization" is het mogelijk ook sommige booleans op te slaan), kan je een compactere constructie gebruiken:
  90. </para>
  91. <programlisting role="php"><![CDATA[<?php
  92. // we gaan er vanuit dat je $cache al hebt
  93. $id = 'mijnGroteLoop'; // cache id van "wat we willen cachen"
  94. if (!($data = $cache->get($id))) {
  95. // cache miss
  96. $data = '';
  97. for ($i = 0; $i < 10000; $i++) {
  98. $data = $data . $i;
  99. }
  100. $cache->save($data);
  101. }
  102. // [...] doe iets met $data (echo het, stuur het door enz.)
  103. ?>]]> </programlisting>
  104. <para>
  105. Als je meerdere blokken of data instanties wilt cachen, is het idee hetzelfde:
  106. </para>
  107. <programlisting role="php"><![CDATA[<?php
  108. // Zorg ervoor dat je unieke identifiers hebt:
  109. $id1 = 'foo';
  110. $id2 = 'bar';
  111. // blok 1
  112. if (!($data = $cache->get($id1))) {
  113. // cache miss
  114. $data = '';
  115. for ($i=0;$i<10000;$i++) {
  116. $data = $data . $i;
  117. }
  118. $cache->save($data);
  119. }
  120. echo($data);
  121. // Dit wordt niet door de cache beïnvloed
  122. echo('NOOIT GECACHED! ');
  123. // blok 2
  124. if (!($data = $cache->get($id2))) {
  125. // cache miss
  126. $data = '';
  127. for ($i=0;$i<10000;$i++) {
  128. $data = $data . '!';
  129. }
  130. $cache->save($data);
  131. }
  132. echo($data);
  133. ?>]]> </programlisting>
  134. </sect3>
  135. </sect2>
  136. <sect2 id="zend.cache.frontend.output">
  137. <title>Zend_Cache_Frontend_Output</title>
  138. <sect3 id="zend.cache.frontend.output.introduction">
  139. <title>Inleiding</title>
  140. <para>
  141. <code>Zend_Cache_Frontend_Output</code> is een output-vangend frontend. Het gebruikt
  142. output buffering in PHP om alles tussen zijn <code>start()</code> en
  143. <code>end()</code> methodes te vangen.
  144. </para>
  145. </sect3>
  146. <sect3 id="zend.cache.frontend.output.options">
  147. <title>Beschikbare opties</title>
  148. <para>
  149. Dit frontend heeft geen specifieke opties andere dan deze van
  150. <code>Zend_Cache_Core</code>.
  151. </para>
  152. </sect3>
  153. <sect3 id="zend.cache.frontend.output.examples">
  154. <title>Voorbeelden</title>
  155. <para>
  156. Een voorbeeld is in het begin van de handleiding gegeven. Hier is het met enkele kleine veranderingen:
  157. </para>
  158. <programlisting role="php"><![CDATA[<?php
  159. // indien het een cache miss is, output buffering inroepen
  160. if(!$cache->start('mijnpagina')):
  161. // alles weergeven zoals gewoonlijk
  162. echo 'Dag wereld! ';
  163. echo 'Dit is gecached ('.time().') ';
  164. $cache->end(); // einde van output buffering
  165. endif;
  166. echo 'Dit is nooit gecached ('.time().').';
  167. ?>]]> </programlisting>
  168. <para>
  169. Deze vorm gebruiken maakt het eenvoudig om output caching op te zetten in je reeds werkende projekt
  170. met geen of weinig herschrijven van de code.
  171. </para>
  172. </sect3>
  173. </sect2>
  174. <sect2 id="zend.cache.frontend.function">
  175. <title>Zend_Cache_Frontend_Function</title>
  176. <sect3 id="zend.cache.frontend.function.introduction">
  177. <title>Inleiding</title>
  178. <para>
  179. <code>Zend_Cache_Frontend_Function</code> cached het resultaat van functie oproepen. Het heeft één
  180. enkele hoofdmethode genaam <code>call()</code> die de functienaam en parameters voor de oproep in een
  181. array aanvaard.
  182. </para>
  183. </sect3>
  184. <sect3 id="zend.cache.frontend.function.options">
  185. <title>Beschikbare opties</title>
  186. <table>
  187. <title>Beschikbare opties</title>
  188. <tgroup cols="4">
  189. <thead>
  190. <row>
  191. <entry>Optie</entry>
  192. <entry>Data Type</entry>
  193. <entry>Standaard Waarde</entry>
  194. <entry>Omschrijving</entry>
  195. </row>
  196. </thead>
  197. <tbody>
  198. <row>
  199. <entry><code>cacheByDefault</code></entry>
  200. <entry><code>boolean</code></entry>
  201. <entry><code>true</code></entry>
  202. <entry>
  203. indien true zullen functie oproepen standaard worden gecached
  204. </entry>
  205. </row>
  206. <row>
  207. <entry><code>cachedFunctions</code></entry>
  208. <entry><code>array</code></entry>
  209. <entry></entry>
  210. <entry>
  211. functienamen die altijd zullen worden gecached
  212. </entry>
  213. </row>
  214. <row>
  215. <entry><code>nonCachedFunctions</code></entry>
  216. <entry><code>array</code></entry>
  217. <entry></entry>
  218. <entry>
  219. functienamen die nooit mogen worden gecached
  220. </entry>
  221. </row>
  222. </tbody>
  223. </tgroup>
  224. </table>
  225. </sect3>
  226. <sect3 id="zend.cache.frontend.function.examples">
  227. <title>Voorbeelden</title>
  228. <para>
  229. De <code>call()</code> functie gebruiken is hetzelfde als <code>call_user_func_array()</code> in PHP:
  230. </para>
  231. <programlisting role="php"><![CDATA[<?php
  232. $cache->call('heelZwareFunctie', $params);
  233. # $params is een array
  234. # bijvoorbeeld om heelZwareFunctie(1, 'foo', 'bar') op te roepen (met caching), zal je
  235. # $cache->call('heelZwareFunctie', array(1, 'foo', 'bar')) gebruiken
  236. ?>]]> </programlisting>
  237. <para>
  238. <code>Zend_Cache_Frontend_Function</code> is slim genoeg om zowel de return waarde van de functie als
  239. zijn interne output te cachen.
  240. </para>
  241. <note><para>
  242. Je kan eender welke ingebouwde of gebruikerfunctie doorgeven, behalve
  243. <code>array()</code>, <code>echo()</code>, <code>empty()</code>, <code>eval()</code>,
  244. <code>exit()</code>, <code>isset()</code>, <code>list()</code>, <code>print()</code>
  245. and <code>unset()</code>.
  246. </para></note>
  247. </sect3>
  248. </sect2>
  249. <sect2 id="zend.cache.frontend.class">
  250. <title>Zend_Cache_Frontend_Class</title>
  251. <sect3 id="zend.cache.frontend.class.introduction">
  252. <title>Inleiding</title>
  253. <para>
  254. <code>Zend_Cache_Frontend_Class</code> verschilt van <code>Zend_Cache_Frontend_Function</code>
  255. omdat het toelaat een object en statische methode oproepen te cachen.
  256. </para>
  257. </sect3>
  258. <sect3 id="zend.cache.frontend.class.options">
  259. <title>Beschikbare opties</title>
  260. <table>
  261. <title>Beschikbare opties</title>
  262. <tgroup cols="4">
  263. <thead>
  264. <row>
  265. <entry>Optie</entry>
  266. <entry>Data Type</entry>
  267. <entry>Standaard Waarde</entry>
  268. <entry>Omschrijving</entry>
  269. </row>
  270. </thead>
  271. <tbody>
  272. <row>
  273. <entry><code>cachedEntity</code> (vereist)</entry>
  274. <entry><code>mixed</code></entry>
  275. <entry></entry>
  276. <entry>
  277. Indien je een klassenaam doorgeeft, zullen we een abstracte klasse cachen en alleen
  278. statische oproepen gebruiken; indien je een object doorgeeft, zullen we de methodes
  279. van het object cachen.
  280. </entry>
  281. </row>
  282. <row>
  283. <entry><code>cacheByDefault</code></entry>
  284. <entry><code>boolean</code></entry>
  285. <entry><code>true</code></entry>
  286. <entry>
  287. Indien true zullen oproepen standaard worden gecached
  288. </entry>
  289. </row>
  290. <row>
  291. <entry><code>cachedMethods</code></entry>
  292. <entry><code>array</code></entry>
  293. <entry></entry>
  294. <entry>
  295. namen van methodes die altijd zullen worden gecached
  296. </entry>
  297. </row>
  298. <row>
  299. <entry><code>nonCachedMethods</code></entry>
  300. <entry><code>array</code></entry>
  301. <entry></entry>
  302. <entry>
  303. namen van methodes die nooit zullen worden gecached
  304. </entry>
  305. </row>
  306. </tbody>
  307. </tgroup>
  308. </table>
  309. </sect3>
  310. <sect3 id="zend.cache.frontend.class.examples">
  311. <title>Voorbeelden</title>
  312. <para>
  313. Bijvoorbeeld, om statische oproepen te cachen :
  314. </para>
  315. <programlisting role="php"><![CDATA[<?php
  316. class test {
  317. # Statische methode
  318. public static function foobar($param1, $param2) {
  319. echo "foobar_output($param1, $param2)";
  320. return "foobar_return($param1, $param2)";
  321. }
  322. }
  323. // [...]
  324. $frontendOptions = array(
  325. 'cachedEntity' => 'test' // De naam van de klasse
  326. );
  327. // [...]
  328. # De gecachte oproep
  329. $res = $cache->foobar('1', '2');
  330. ?>]]> </programlisting>
  331. <para>
  332. Om klassieke methode oproepen te cachen :
  333. </para>
  334. <programlisting role="php"><![CDATA[<?php
  335. class test {
  336. private $_string = 'hoi !';
  337. public function foobar2($param1, $param2) {
  338. echo($this->_string);
  339. echo "foobar2_output($param1, $param2)";
  340. return "foobar2_return($param1, $param2)";
  341. }
  342. }
  343. // [...]
  344. $frontendOptions = array(
  345. 'cachedEntity' => new test() // Een instantie van de klasse
  346. );
  347. // [...]
  348. # De gecachte oproep
  349. $res = $cache->foobar2('1', '2');
  350. ?>]]> </programlisting>
  351. </sect3>
  352. </sect2>
  353. <sect2 id="zend.cache.frontends.file">
  354. <title>Zend_Cache_Frontend_File</title>
  355. <sect3 id="zend.cache.frontends.file.introduction">
  356. <title>Inleiding</title>
  357. <para>
  358. <code>Zend_Cache_Frontend_File</code> is een frontend dat bestuurd word door de
  359. wijzigingstijd van een "meesterbestand". Het is zeer interessant voor voorbeelden
  360. in configuratie of template problemen.
  361. </para>
  362. <para>
  363. Bijvoorbeeld, je hebt een XML configuratiebestand dat door een functie wordt ingelezen
  364. die een "config object" teruggeeft (zoals met <code>Zend_Config</code>). Met
  365. <code>Zend_Cache_Frontend_File</code> kan je "config object" in de cache opslaan
  366. (om te vermijden dat je het XML bestand elke keer inleest) maar met een soort van
  367. sterke afhankelijkheid met het "meesterbestand". Dus, indien het XML configuratiebestand
  368. wordt gewijzigd wordt de cache onmiddellijk invalide.
  369. </para>
  370. </sect3>
  371. <sect3 id="zend.cache.frontends.file.options">
  372. <title>Beschikbare opties</title>
  373. <table>
  374. <title>Beschikbare opties</title>
  375. <tgroup cols="4">
  376. <thead>
  377. <row>
  378. <entry>Optie</entry>
  379. <entry>Data Type</entry>
  380. <entry>Standaard Waarde</entry>
  381. <entry>Omschrijving</entry>
  382. </row>
  383. </thead>
  384. <tbody>
  385. <row>
  386. <entry><code>masterFile (vereist)</code></entry>
  387. <entry><code>string</code></entry>
  388. <entry><code></code></entry>
  389. <entry>
  390. het complete pad en naam van het meesterbestand
  391. </entry>
  392. </row>
  393. </tbody>
  394. </tgroup>
  395. </table>
  396. </sect3>
  397. <sect3 id="zend.cache.frontends.file.examples">
  398. <title>Voorbeelden</title>
  399. <para>
  400. Het gebruik van dit frontend is hetzelfde als dat van <code>Zend_Cache_Core</code>. Er is geen
  401. nood aan een specifiek voorbeeld - het enige dat er te doen is, is het definiëren van
  402. <code>masterFile</code> bij het gebruik van de factory.
  403. </para>
  404. </sect3>
  405. </sect2>
  406. <sect2 id="zend.cache.frontends.page">
  407. <title>Zend_Cache_Frontend_Page</title>
  408. <sect3 id="zend.cache.frontends.page.introduction">
  409. <title>inleiding</title>
  410. <para>
  411. <code>Zend_Cache_Frontend_Page</code> is net als <code>Zend_Cache_Frontend_Output</code>
  412. maar werd ontworpen voor een volledige pagina. Het is onmogelijk om <code>Zend_Cache_Frontend_Page</code>
  413. te gebruiken om een enkel blok te cachen.
  414. </para>
  415. <para>
  416. Anderzijds word "cache id" automatisch berekend met
  417. <code>$_SERVER['REQUEST_URI']</code> en (afhankelijk van de opties)
  418. <code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code>, <code>$_COOKIE</code>, <code>$_FILES</code>.
  419. Bovendien hoef je slechts één methode op te roepen (<code>start()</code>) want de
  420. <code>end()</code> oproep is volledig automatisch bij het einde van de pagina.
  421. </para>
  422. <para>
  423. Het is niet geïmplementeerd voor het ogenblik, maar we hebben plannen om een HTTP conditioneel
  424. systeem bij te voegen om bandbreedte te sparen (het systeem zal een HTTP 304 Not Modified header
  425. zenden indien de browser cache word aangesproken en indien de browser reeds de goede versie heeft).
  426. </para>
  427. <note><para>)
  428. Zend_Cache_Frontend_Page is echt "alpha stuff" en moet later verder worden verbeterd.
  429. </para></note>
  430. </sect3>
  431. <sect3 id="zend.cache.frontends.page.options">
  432. <title>Beschikbare opties (voor deze frontend van de Zend_Cache factory)</title>
  433. <table>
  434. <title>Beschikbare opties</title>
  435. <tgroup cols="4">
  436. <thead>
  437. <row>
  438. <entry>Optie</entry>
  439. <entry>Data Type</entry>
  440. <entry>Standaard Waarde</entry>
  441. <entry>Omschrijving</entry>
  442. </row>
  443. </thead>
  444. <tbody>
  445. <row>
  446. <entry><code>httpConditional</code></entry>
  447. <entry><code>boolean</code></entry>
  448. <entry><code>false</code></entry>
  449. <entry>
  450. gebruik het httpConditional systeem (momenteel niet geïmplementeerd)
  451. </entry>
  452. </row>
  453. <row>
  454. <entry><code>cacheWith{Get,Post,Session,Files,Cookie}Variables</code></entry>
  455. <entry><code>boolean</code></entry>
  456. <entry><code>false</code></entry>
  457. <entry>
  458. indien true blijft de cache aan zelfs indien er enige variabelen in de overeenkomende
  459. superglobal array zijn
  460. indien false is de cache af indien er enige variabelen in de overeenkomende
  461. superglobal array zijn
  462. </entry>
  463. </row>
  464. <row>
  465. <entry><code>makeIdWith{Get,Post,Session,Files,Cookie}Variables</code></entry>
  466. <entry><code>boolean</code></entry>
  467. <entry><code>true</code></entry>
  468. <entry>
  469. indien true moeten we de inhoud van de overeenkomstige superglobal array gebruiken om
  470. een cache id aan te maken
  471. indien false zal de cache id niet afhankelijk zijn van de inhoud van de overeenkomstige
  472. superglobal array
  473. </entry>
  474. </row>
  475. </tbody>
  476. </tgroup>
  477. </table>
  478. </sect3>
  479. <sect3 id="zend.cache.frontends.page.examples">
  480. <title>Voorbeelden</title>
  481. <para>
  482. Het gebruik van Zend_Cache_Frontend_Page is echt eenvoudig :
  483. </para>
  484. <programlisting role="php"><![CDATA[<?php
  485. // [...] // require, configuratie en factory
  486. $cache->start();
  487. # indien de cache wordt aangesproken wordt het resultaat naar de browser gestuurd en stopt het script hier
  488. // rest van de pagina ...
  489. ?>]]> </programlisting>
  490. </sect3>
  491. </sect2>
  492. </sect1>
  493. <!--
  494. vim:se ts=4 sw=4 et:
  495. -->