היו כמה וכמה בקשות/שאלות לגבי Chacing , איך בידיוק משתמשים בזה, איך זה עובד, האם זה שימושי, האם כל אחד יכול/צריך להשתמש בזה? ובכן אני אנסה לענות על כמה שיותר שאלות כאן שנשאלו ויכולות לצוץ פתאום ואנסה להציג דרך שאולי תחסוך לכם את זמן הטעינה של העמודים שיש לכם במערכת/אתרים שלכם. חשוב לזכור שזהו אינו מדריך אלה יותר הסבר ושאלה->תשובה לכמה דברים שנשאלו על ידי המשתמשים כאן. לפעמים שימוש ב CACHE לא בהכרח יפתור את הבעיות אבל ברוב המקרים זה יכול רק לעזור לכם לשרת שלכם ולמשתמשים שצופים באתרים שלכם.
מה זה Cache?
Cache (ובעברית מטמון) הוא אוסף של מידע שמוצג/מבוקש על ידי המשתמשים בעזרת בקשות לשרת, אשר נשמר לוקאלית ולכן ניתן לגשת אליו ולהציג אותו במהירות. הוא מייצג תת-קבוצה של ארכיון גדול יותר. המטמון נמצא פיזית קרוב יותר לזה שמבקש אותו ולכן ניתן להציג את התוכן שלו לכמות רבה יותר של משתמשים במהירות, בניגוד לטעינה מחדש של העמוד לכל משתמש אשר מבקש לראות אותו.
מה היתרונות לשימוש ב Cache?
השימוש במטמון מפחית את כמות צריכת התעבורה והמשאבים מהשרת, מזרז את זמן טעינת העמוד באתרים.
מה הסיכונים?
יכול לקרות מצב שגרסא ישנה של אותו עמוד תוצג אם הנתונים של הזמן האחרון שהעמוד נערך לא יוצגו, תוכן שנטען דינמאית לא ניתן לשמור אותו במטמון מאחר והוא משתנה בכל פעם שנגשים אליו.
מה השיטה הטובה ביותר?
כנראה שהשיטה הטובה ביותר היא מטמון במסד נתונים, בכל מצב שאילתה למסד נתונים לשליפת מידע תיהיה הרבה יותר מהירה מקבלת אותו המידע ממערכת הקבצים שלכם בשרת, לא משנה איזה שרת אתם מריצים. לכן אם יש אפשרות להשתמש במטמון במסד נתונים כדי שתעשו זאת. (אנחנו נדגים מטמון במערכת הקבצים ולא במסד אבל זה עובד על אותו העיקרון, כל עמוד נשמר במסד נתונים כמו שהוא צריך להראות בסופו של דבר ואז בכל פעם שמשתמש מבקש את העמוד לבדוק אם הוא קיים במסד ולהחזיר את העמוד, אם לא לטעון את אותו העמוד לבצע את כל מה שצריך לשמור במסד ואז להציג למשתמש ככה שפעם הבאה משתמש שירצה את אותו העמוד הוא כבר יהיה קיים במסד).
איך זה עובד?
תמונה א מציגה את התהליך של הצגת עמוד אינטרנט למשתמש. תחילה המשתמש מבקש את העמוד -> בקשה נשלחת לאתר דרך האינטרנט -> האתר מבצע את הדברים הדרושים (שאילתות, עיבוד וכדומה) -> לאחר מכן מחזיר את הכל למשתמש שבקש את העמוד.

תמונה ב מציגה את אותו התהליך רק עם מטמון, תחילה המשתמש מבקש את העמוד -> הבקשה נשלחת לאינטרנט -> האתר בודק קודם אם קיים מטמון לאותו עמוד והוא אכן עדכני ולא ישן -> אם כן מחזיר את העמוד ומציג אותו למשתמש ללא שום פעולה נוספות -> אם לא עושה את הפעולות הדרושות (שאילתות, עיבוד וכדומה) -> שומר במטמון במידה וצריך -> מחזיר את התוכן למשתמש שבקש את העמוד.

דוגמא למערכת מטמון:
דבר אחד שחשוב לזכור, שמירת התוכן של העמוד במטמון חייבת להתבצע אחרי כל העיבודים הדרושים שזה שאילתות, פורמט של טמפלייט וכדומה. מה שנשמר בקובץ זה ה HTML שיוצג ישירות למשתמש כפי שהוא.
שלב ראשון בכתיבת קוד המטמון שלכם זה לפתוח תיקיה חדשה ששם ישמרו קבצי המידע של המטמון של העמודים שלכם. אני קראתי לזה “cache” ויצרתי אותה בתיקיה הראשית של המערכת שלי. לאחר מכן יש לתת הרשאות כתיבה (0777) לתיקיה כדי שיהיה ניתן לכתוב אליה. כמו כן הגדרתי שאת המטמון אני שומר למשך 12 שעות (זה לא ממש תקף לאלו שמשנים תוכן כל כמה שעות אז לשמור את זה בהתאם למה שאתם חושבים לנכון) הקוד הבא מדגים את התחלת הקוד שלי:
$folder_cache = ‘cache/’; $seconds_cache = 60*60*12; // the cached file will exist for 12 hours
השלב הבא הוא לדעת איך לקרוא לקובץ המטמון של כל עמוד, אני לצורך הדוגמא אקח שני משתנים גלובאלים של הדומיין הנוכחי של העמוד והנתיב לקובץ שכרגע מוצג (אתם כנראה תשנו את זה בהתאם למה שהמערכת שלכם דורשת), לאחר מכן אני מצפין את השם של הקובץ ב MD5 כדי למנוע משם של קובץ ארוך עם סלאשים ודברים לא רצויים אחרים, לכן נצפין את זה ב MD5.
$url_cache = $_SERVER[’HTTP_HOST’] . $_SERVER[’REQUEST_URI’]; $file_cache = $folder_cache . md5($url_cache) . ‘.cache’;
לפני שהנכם שומרים את הקובץ בשרת, צריך לבדוק אם הוא כבר קיים ואם כן לבדוק אם הקובץ מספיק ישן כדי לשכתב אותו, לכן נעשה את הבא:
$file_cache_exists = ( @file_exists($file_cache) ) ? @filemtime($file_cache) : 0;
הפונקציה filetime מחזירה את הזמן בו הקובץ נערך, או FALSE במידה ויש שגיאה כלשהי.
עכשיו אנחנו נבדוק אם הקובץ אכן קיים מהמשתנה file_cache_exists$ אם כן לבדוק אם הזמן שלו לא עבר עדיין את הזמן שהקצנו ב seconds_cache$ ואז להציג את התוכן מקובץ המטמון בשרת ולעצור את הסקריפט.
if ($file_cache_exists > time() - $seconds_cache ) {
@readfile($file_cache);
exit();
}
ob_start();
חשוב לעצור את הסקריפט במידה וקובץ המטמון תקין מבחינת זמן והוצג כדי למנוע בעיות בהמשך. אם הזמן עבר אז הפקודה ob_start תכנס לפעולה ותכניס את התוכן ל buffer של PHP כדי שנוכל לשמור אותו אחר כך.
זהו החלק הראשון בקוד המטמון שלכם הקוד הבא צריך להשמר בתוך קובץ PHP עם השם לדוגמא: start_cache.php ולהכיל את התוכן הבא:
<?php
$folder_cache = ‘cache/’;
$seconds_cache = 60*60*12; // the cached file will exist for 12 hours
$url_cache = $_SERVER[’HTTP_HOST’] . $_SERVER[’REQUEST_URI’];
$file_cache = $folder_cache . md5($url_cache) . ‘.cache’;
$file_cache_exists = ( @file_exists($file_cache) ) ? @filemtime($file_cache) : 0;
if ($file_cache_exists > time() - $seconds_cache ) {
@readfile($file_cache);
exit();
}
ob_start();
את הקובץ start_cache.php אתם מבצעים לו include בתחילת הקובץ שלכם ישר אחרי תגית הפתיחה של PHP. נעבור לחלק השני של המטמון בו הוא שומר את התוכן שנעבד על ידי השרת לאחר כל השאילתות, והעיבודים השונים, צריך לשמור אותו בקובץ כי או שהוא לא קיים עדיין או שהזמן שלו ישן מדי. לכן החלק השני הוא:
<?php $pointer = @fopen($file_cache, ‘w’); @fwrite($pointer, ob_get_contents()); @fclose($pointer); ob_end_flush();
את הקוד למעלה אתם שומרים בקובץ PHP בשם לדוגמא end_cache.php ועושים include לקובץ הזה בסוף כל עמוד שאתם רוצים לשמור את התוכן שלו במטמון. מה שהקובץ הזה עושה הוא פותח את הקובץ של המטמון של אותו עמוד שכרגע נצפה, במידה והוא לא קיים הוא יוצר את הקובץ לאחר מכן הוא כותב את כל מה שנמצא ב buffer של PHP אל תוך הקובץ, סוגר את הקובץ ומנקה את ה buffer של PHP.
בכדי שזה יעבוד אתם תצטרכו לבצע את זה כך:
<?php include(”cache_start.php”); // All page content here include(”end_cache.php”);
בדרך הזאת זה ישמור את כל התוכן שעובד על ידי השרת במטמון, ובמידה ויש כבר קובץ של אותו עמוד במטמון אז הוא יציג אותו מהשרת ללא כל עיבוד נוסף.
זהו, מערכת מטמון ביתית שאמורה לעבוד על כל שרת/גרסא ולכל מטרה. ישנם כמובן מאות דרכים לעשות את זה, וכמובן ישנם מאות דרכים לשפר את זאת אבל זה כבר בידיכם ותלוי בכל אחד ואחד מכם שיעשה את זה.
Similar Posts
- קבלת עומס השרת כרגע – SERVER LOAD – 09/24/2009
- בדיקת זמן טעינה ב PHP – 02/19/2009





אם כבר אתה הולך על קאשינג אז עד הסוף
אני חושב שהיום הכי מהיר זה MEMCACHED או כל דבר אחר שמאפשר לשמור את זה על הראם של המחשב
היתי מציע גם להרחיב את זה ל OPCODE CACHING כמו APC, EACCELERATOR וכו’
אבל אחלה כתבה אפשר לומר שממצה את העניין (:
(ד’א יש לך שגיאה איפהשהו בהתחלה במילה CACHING)
זה מהווה רק בסיס וידע ראשוני ל CACHE אפשר לעשות את זה בעשרות דרכים שונות. כל אחד והדרך שלו, זוהי בהחלט לא המחלקה והדרך בה אני בדרך כלל משתמש בCACHE מאחר והיא פשוטה מדי.
when where do you output your cache?
And do you use cache instead of doing the same queries & echos (and so on..) every refresh. right? So how do you prevent from the queries & echos (etc.) to display on the page with every single refresh?
צריך עזרה ב-chaching באתר שלי ב-ASP הכל בתשלום. טלפון 04-6293655
אין לי מספיק ניסיון ב ASP כדי לעזור לך, במידה וזה היה PHP זה היה אחרת.