אופטימיזציית לולאות for בPHP

בקטגוריה: טיפים והערות|יעילות|שפות תכנות

15 אוק' 2010

שלום לכם קוראים יקרים.
בחנתי 4 דרכים (ששתיים מהן שקולות) שונות לבצע איטרציה על מערך בעזרת לולאות for.

שיטות איטרציה

  • unoptimized:
    for($i = 0; $i < count($array); $i++) { }
  • semioptimized1:
    $c = count($array);
    for($i = 0; $i < $c; $i++) { }
  • semioptimized2:
    for($i = 0, $c = count($array); $i < $c; $i++) { }
  • optimized:
    for($i = count($array) – 1; $i >= 0; $i–) { }

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

תוצאות

array range 0 to 999

type time memory
unoptimized 0.001812 80
semioptimized1 0.000217 160
semioptimized2 0.000216 160
optimized 0.000208 80

array range 0 to 99999

type time memory
unoptimized 0.12129 80
semioptimized1 0.01303 160
semioptimized2 0.01338 160
optimized 0.01303 80

מסקנות

המסקנות העולות מהבדיקות הן די ברורות. הקוד הקצר ביותר והפופולארי ביותר הוא הראשון, אך הוא איטי פי עשרה משלושת הקודים האחרים!
הדרך הרביעית היא כנראה הדרך הנוחה ביותר הקצרה מבין שלושת הנותרות והיעילה ביותר, אלא אם ישנה חשיבות לסדר הלולאה.

2 תגובות לאופטימיזציית לולאות for בPHP

סמלון

מור

2 נובמבר, 2010 בשעה 15:15

נשמע די הגיוני , התנאי תמיד חוזר על עצמו שוב ושוב.

סמלון

דניאל

15 ספטמבר, 2011 בשעה 22:40

אחלה של מאמר.

טופס התגובה

קצת עלי

שמי שי ואני בונה אתרים וכיום חותך (מקודד) ומתכנת.
אני עובד אל מול התקן העולמי של W3C, ומתכנת בשפת PHP תוך שימוש בטכנולוגיות עדכניות, תוך שמירה על קוד שניתן לתחזוקה.
בין כישורי נמנים: PHP, SQL, (X)HTML, CSS (2-3), XML, JavaScript ( + jQuery) ועוד.

Zend Certified Engineer

  • דניאל: אחלה של מאמר. [...]
  • Shay | Exalted Web: אין סיבה שיהיו תווים מוזרים. פשוט שמור הכל בutf8, כולל את הdatabase, הhtml והphp, ואל תשכח להריץ שאי [...]
  • יונתן: אין לך בעיה עם תווים בעברית מהמסד? כל מה שאני שולף מוצג לי בתווים מוזרים.. [...]
  • Shay | Exalted Web: שמחתי לעזור :) [...]
  • יהונתן|YtsWeb: שי,תודה רבה על המאמר. חיפשתי באמת איך לחלק את העמודים בצורה טובה ושלא יראו 1000 מספרים. [...]

פרוייקט תכנות מונחה עצמים

פרויקט תכנות מונחה עצמים עוסק בפרדיגמת תכנות מונחת עצמים. נושא רחב ובעל השפעה עצומה, אך ללא הסברים כמעט בעברית.
דף הפרוייקט

קצת מידע

אחלק לפניכם את האתר לשלושה נושאים:

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