{"id":233055,"date":"2023-02-03T16:59:00","date_gmt":"2023-02-03T13:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233055"},"modified":"2022-11-10T18:57:11","modified_gmt":"2022-11-10T15:57:11","slug":"kuidas-salvestada-php-s-vahemaellu-raskeid-toiminguid-nt-andmebaasipaeringuid","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kuidas-salvestada-php-s-vahemaellu-raskeid-toiminguid-nt-andmebaasipaeringuid\/","title":{"rendered":"Kuidas salvestada PHP-s vahem\u00e4llu raskeid toiminguid (nt andmebaasip\u00e4ringuid)?"},"content":{"rendered":"\n<p>PHP on veebis v\u00e4ga populaarne programmeerimiskeel. See on mugav ja v\u00f5imas, l\u00f5dvalt tr\u00fckitud programmeerimiskeel, mille saate l\u00fchikese aja jooksul k\u00e4tte saada ja kasutada. See saab nii laialt levinud ja populaarseks v\u00f5ib-olla t\u00e4nu WordPressile, ajaveebi v\u00f5i CMS-ile (sisuhalduss\u00fcsteem). Paljud veebisaidid, nagu facebook, p\u00f5hinevad algselt PHP-l.<\/p>\n<p>Siiski peetakse PHP-d \u00fcldiselt aeglaselt t\u00f5lgendavaks skriptikeeleks, kuigi selle kiirendamiseks on palju tehnikaid, nt vaikimisi installitud Zend Optimiser. HHVM aitab PHP k\u00e4itusajal kompileerida millekski baitkoodiks, mille saab seej\u00e4rel t\u00f5lkida algkoodiks, mis parandab j\u00f5udlust <a href=\"https:\/\/hhvm.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">.<\/a><\/p>\n<p>Andmebaasip\u00e4ringud on aegan\u00f5udvad, eriti suurte tabelite v\u00f5i ilma korraliku indekseerimiseta tabelite puhul. M\u00f5nikord aeglustavad sellised toimingud lehe laadimise\/t\u00f6\u00f6tlemise kiirust ja kahjustavad seej\u00e4rel kasutajakogemust. \u00dcsna sageli v\u00f5tab selliste p\u00e4ringute t\u00e4itmine aega, kuid tulemused ei muutu nii sageli, st v\u00f5ib-olla muutuvad need kord p\u00e4evas. Sel juhul on parem salvestada need tulemused vahem\u00e4llu failidesse ja hankida need j\u00e4rgmisel korral failide lugemisest, kui need leitakse juba vahem\u00e4llu salvestatuna.<\/p>\n<p>MySQL-i andmebaas oskab h\u00e4sti korralikult indekseerida p\u00e4ringuid. Kui aga laud muutub suureks, m\u00f5jutab see j\u00f5udlust. Saame vahem\u00e4llu salvestada mis tahes arvutusmahukad toimingud ja salvestada need kettale failidesse ja hankida need j\u00e4rgmisel korral otse failidest lugedes, mis on palju kiirem.<\/p>\n<p>Oleme pakkunud PHP-klassi, mida saab h\u00f5lpsasti oma rakendusse lisada.<\/p>\n<pre><code>class Cache {\n\u00a0 \u00a0 private $folder = '';\n\u00a0 \u00a0 \n\u00a0 \u00a0 \/\/ constructor takes an optional path for storing the cache files\n\u00a0 \u00a0 public function __construct($path = '') {\n\u00a0 \u00a0 \u00a0 \u00a0 $path = trim($path);\n\u00a0 \u00a0 \u00a0 \u00a0 if ((strlen($path) &amp;&amp; is_dir($path))) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $this-&gt;setFolder($path);\n\u00a0 \u00a0 \u00a0 \u00a0 } else {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $this-&gt;setFolder('\/tmp\/'); \u00a0 \/\/ tmp folder if empty\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 \u00a0 \n\u00a0 \u00a0 public function getFolder() {\n\u00a0 \u00a0 \u00a0 \u00a0 return $this-&gt;folder; \u00a0\n\u00a0 \u00a0 } \u00a0 \u00a0\n\u00a0 \u00a0 \n\u00a0 \u00a0 public function setFolder($path) {\n\u00a0 \u00a0 \u00a0 \u00a0 $path = trim($path);\n\u00a0 \u00a0 \u00a0 \u00a0 $len = strlen($path);\n\u00a0 \u00a0 \u00a0 \u00a0 if ($len) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (is_dir($path)) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if ($path[$len - 1] != '\/') {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $path .= '\/'; \u00a0\/\/ adds a forward slashes at the end\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 } \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $this-&gt;folder = $path;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0\n\u00a0 \u00a0 \/\/ read from caches, if not found, return null\n\u00a0 \u00a0 public function read($fileName) {\n\u00a0 \u00a0 \u00a0 \u00a0 $fileName = $this-&gt;folder.$fileName;\n\u00a0 \u00a0 \u00a0 \u00a0 if (is_file($fileName)) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $handle = fopen($fileName, 'rb'); \/\/ open as binary\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $variable = fread($handle, filesize($fileName));\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 fclose($handle);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return unserialize($variable);\n\u00a0 \u00a0 \u00a0 \u00a0 } else {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \/\/ write $variable to $fileName\n\u00a0 \u00a0 public function write($fileName, $variable) {\n\u00a0 \u00a0 \u00a0 \u00a0 $fileName = $this-&gt;folder.$fileName;\n\u00a0 \u00a0 \u00a0 \u00a0 $handle = fopen($fileName, 'a');\n\u00a0 \u00a0 \u00a0 \u00a0 fwrite($handle, serialize($variable));\n\u00a0 \u00a0 \u00a0 \u00a0 fclose($handle);\n\u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \/\/ delete cache entry $fileName\n\u00a0 \u00a0 public function delete($fileName) {\n\u00a0 \u00a0 \u00a0 \u00a0 $fileName = $this-&gt;folder.$fileName;\n\u00a0 \u00a0 \u00a0 \u00a0 @unlink($fileName); \u00a0\/\/ put a @ to avoid file-not-found warning\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n<p>Nii et kommentaarid on paigas. \u00dclaltoodud klass on lihtne ja h\u00f5lpsasti kasutatav. N\u00e4iteks olen oma veebisaidi \u00fche p\u00e4ringu vahem\u00e4llu salvestamiseks kasutanud j\u00e4rgmist.<\/p>\n<pre><code>\u00a0 \u00a0 require('class.cache.php');\n\u00a0 \u00a0 $cache = new Cache('cache\/1\/');\n\u00a0 \u00a0 $entry = md5($url);\n\u00a0 \u00a0 $data = $cache-&gt;read($entry);\n\u00a0 \u00a0 $blogtitle = \"\";\n\u00a0 \u00a0 if ($data !== null) { \/\/ found cache\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $blogtitle = $data; \/\/ read the data\n\u00a0 \u00a0 } else {\n\u00a0 \u00a0 \u00a0 $query = \"select `title` from `blog` where `path`='$url'\";\n\u00a0 \u00a0 \u00a0 $result = mysql_query($query, $link);\n\u00a0\n\u00a0 \u00a0 \u00a0 if (mysql_num_rows($result))\n\u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $blogtitle = mysql_result($result, 0, 0);\n\u00a0 \u00a0 \u00a0 } \n\u00a0 \u00a0 \u00a0 $cache-&gt;write($entry, $blogtitle); \u00a0\/\/ save the cache for next read \n\u00a0 \u00a0 }<\/code><\/pre>\n<p>Seega, kui tahame vahem\u00e4lu t\u00fchjendada, saame selle lihtsalt kustutada:<\/p>\n<pre><code>\u00a0 \u00a0 \/\/ suppose we run here the query (\"update `blog` set `title` = 'test' where `path` = '$url'\");\n\u00a0 \u00a0 require('class.cache.php');\n\u00a0 \u00a0 $cache = new Cache('cache\/1\/');\n\u00a0 \u00a0 $entry = md5($url);\n\u00a0 \u00a0 $cache-&gt;delete($entry);<\/code><\/pre>\n<p>Veebip\u00f5hine <a href=\"https:\/\/helloacm.com\/curl\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CURL-i p\u00e4isep\u00e4ringu t\u00f6\u00f6riist<\/a> kasutab seda vahem\u00e4lutehnikat veebiserveri protsessori koormuse v\u00e4hendamiseks ja need vahem\u00e4lufailid t\u00fchjendatakse iga paari p\u00e4eva tagant, et v\u00e4ltida veebiserveri kettaruumi \u00fclekoormamist.<\/p>\n<p>Pidage meeles, et lehe laadimise kiirus on \u00fcks teguritest, mis m\u00f5jutab teie SEO skoori. Otsingumootorid eelistavad kiiremaid veebisaite.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kuidas salvestada PHP-s vahem\u00e4llu raskeid toiminguid (nt andmebaasip\u00e4ringuid)?<\/p>\n","protected":false},"author":1,"featured_media":220836,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,749,833,894,842,802,1087,863],"tags":[1165],"class_list":["post-233055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-avatud-laehtekoodiga","category-juhend-algajatele","category-kood","category-opetused","category-php-4","category-saidi-kiirus","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=233055"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233055\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/220836"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}