ביצועים – פונקציות, OOP וסטטיות

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

29 אפר' 2010

החלטתי היום לבצע מבחן, רציתי לבדוק מה מהבאים הכי מהיר ובאיזה הפרש.
המועמדים הם:

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

כתבתי את כל אחד מהקודים, הפונקציה בסך הכל מחשבת 1+1.
כל אופצייה נקראה 1,000,000 פעמים (בלולאת for) וכך קיבלתי תוצאות זמן די מדוייקות. התוצאות היו עקביות מאוד בין הרצה להרצה.
התוצאות מעט הפתיעו אותי!

פונקציה פשוטה: 0.38151597976685 שניות. (נסמן ב100%)
מחלקה רגילה: 0.97387981414795 שניות. 255% מפונקציה פשוטה!
פעולה סטטית: 1.8012449741364 שניות. 472% מפונקציה פשוטה!
Singleton וקריאה רגילה: 3.3634400367737 שניות. 881% מפונקציה פשוטה!

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

המבחנים בוצעו על wamp עם php 5.3.0, במחשב עם מעבד אינטל פנטיום 4 במהירות 3.2GHz ו1GB זכרון.
את הקבצים שאיתם ביצעתי את ההשוואה תוכלו להוריד.

4 תגובות לביצועים – פונקציות, OOP וסטטיות

סמלון

דב

29 אפריל, 2010 בשעה 23:45

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

סמלון

Shay | Exalted Web

29 אפריל, 2010 בשעה 23:53

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

סמלון

מור

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

כלומר כאשר אני בונה מחלקה ובתוך פונקציות , הפונקציות בתוך המחלקה יהיהו איטיות יותר מאשר פונקצית שימצאו מחוץ למחלקה?

סמלון

Shay | Exalted Web

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

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

טופס התגובה

קצת עלי

שמי שי ואני בונה אתרים וכיום חותך (מקודד) ומתכנת.
אני עובד אל מול התקן העולמי של 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 מספרים. [...]

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

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

קצת מידע

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

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