PHP – על Opcode Caching ו- APC

אני מאמין שכל מפתח PHP תהה פעם איך הוא יכול לשפר את ביצועי המערכת שלו, אני מעריך גם שמצאתם מידע אין-סופי בנושא, לפעמים הבנתם אותו יותר ולפעמים פחות.
היום אני מתכוון לסקור את הנושא של Opcode Caching ומימוש שלו באמצעות APC.

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

מה זה Opcode Caching?

הרעיון מאחורי opcode caching הוא לחסוך את התהליך של תרגום התוכנית לשפת מכונה בכל הרצה והרצה. בפעם הראשונה שנריץ את התוכנית היא תרוץ כרגיל, אך בסוף התהליך ה- opcode שנוצר ישמר וישמש אותנו לפעמים הבאות, כך נחסוך את תהליך יצירת את ה- opcode, נשתמש בקוד שכבר נוצר לפני כן ונקצר את זמן הריצה של התוכנית.

מה זה APC?

APC (ר"ת של Alternative PHP Cache) הוא אחד התוספים הנפוצים והמומלצים לביצוע Opcode Caching, ב- PHP 6 הוא גם יהיה מובנה בשפה עצמה ולא יהיה צורך להתקין אותו בנפרד.
APC משתמש ב- shared memory ו- mapping table לאחסון המידע.
חשוב לציין ש- APC יעבוד רק כאשר ה- PHP רץ כ- apache module (אמרנו כבר shared memory), אין אפשרות להשתמש ב- APC כאשר אנחנו עובדים בתצורת CGI.

איך מתקינים APC?

את APC ניתן להתקין בקלות באמצעות PECL, לצורך המאמר אסביר איך להתקין אותו במערכות מבוססות Unix.
יש להריץ את הפקודה הבאה כ- root (או באמצעות sudo):

pecl install apc

לאחר מכן יש להוסיף ל- php.ini (קובץ הקונפיגורציה של ה- PHP) את השורה הבאה:

extension=apc.so

כעת יש לבצע הפעלה מחדש לשרת ה- http וזה הכל!
על מנת לבדוק אם התוסף הותקן כמו שצריך, צרו קובץ חדש עם התוכן:

<?php
phpinfo();
?>

הריצו אותו וחפשו אחר "apc", מצאתם? מצויין.

הגדרות חשובות

ישנן מס' הגדרות חשובות שרצוי להכיר, אסקור עבורכם כמה מהן:

  • apc.enabled – האם התוסף יפעל או לא.
    כברירת מחדל מוגדר כ- "1" (פעיל), הגדרה כ- "0" תבטל את התוסף.
  • apc.shm_segments – כמות יחידות ה- shared memory שיוקצו עבור התוסף.
    כברירת מחדל מוגדר כ- "1".
  • apc.shm_size – נפח הזכרון (ב- mb) שיוקצה עבור כל יחידת shared memory.
    כברירת מחדל מוגדר כ- "32".
  • apc.num_files_hint – הכמות המירבית של הקבצים שישמרו במטמון.
    כברירת מחדל מוגדר כ- "1000".
  • apc.ttl – זמן התפוגה (בשניות) של המידע השמור.
    כברירת מחדל מוגדר כ- "0" (לא פג לעולם).
  • apc.cache_by_default – האם לבצע opcode caching אוטומטית.
    כברירת מחדל מוגדר כ- "1" (כן), הגדרה כ- "0" תבטל את זה.
  • apc.max_file_size – גודל הקובץ המירבי (ב- mb) שניתן לשמור.
    כברירת מחדל מוגדר כ- "1".
  • apc.stat – בודק בכל בקשה האם המידע השמור במטמון עדכני.
    כברירת מחדל מוגדר כ- "1" (כן), הגדרה כ- "0" תבטל את זה (להשתמש בזהירות).

מידע אודות הגדרות נוספות ניתן למצוא בעמוד APC Configuration.

שיהיה לכם Opcode Caching מהנה ומועיל.