לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 22-03-2009, 14:22
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
benchmark - קריאה למתודה - בשיטה הסטטית או דרך instance

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

עשיתי בדיקה עם 2 מחלקות שבכל אחת מהן יש 10 משתני מחלקה, ו-60 מתודות.
במחלקה הראשונה ( "bar" ) לא הגדרתי את המתודות בתור סטטיות (הוספת static).
במחלקה השנייה ( "bar_static" ), כן הגדרתי את המתודות בתור סטטיות.

את בדיקות הזמן של ה-instance עשיתי פעם אחת עם לכלול את ה- new class_name ופעם אחת בלי. (כיוון שפעם אחת זה בשביל לדמות טעינת עמוד מלאה שכוללת new, ופעם אחרת בשביל לבדוק את זמן הריצה של הקריאות למתודות בלבד, ללא ה-new).

התוצאות, לאחר חישוב ממוצע מדויק:
קוד:
WITHOUT declaring methods as static ------------------------------------- instance with "new": 0.0001223882039388 instance without "new": 0.00010524193445842 statically: 0.00026756525039673 With declaring methods as static ------------------------------------- instance with "new": 0.00011253356933594 instance without "new": 9.6420447031657E-5 statically: 0.00014597177505493


ביצעתי 12 בדיקות יחידות (ללא לולאת for שמריצה את אותו בלוק של קוד פעמים רבות) כאשר ה-CPU מיוצב על 99% פנוי. למעלה מוצג רק הממוצע הסופי של הבדיקות.
בכל סוג של בדיקה, עשיתי את חלקי הקוד האחרים בתור הערה (php note) כדי שבוודאות לא יפריעו לתוצאה.

ניתן לראות שב-2 המצבים, גם כאשר המתודה מוגדרת בתור static וגם כאשר לא - עדיין השיטה של ה-instance מהירה יותר.
אני חושב שכיוון שקריאה סטטית למתודה שאינה מוגדרת כ-static, גורם להערת E_STRICT, זה מאיט את זמן הריצה. הנושא הזה בא לידי ביטוי גם ב-benchmark אחר שעשיתי עם include/require שזרקו במקרים מסוימים הערת E_NOTICE. (מסקנה: עדיף לתכנת לפי החוקים המחמירים\strict ביותר. בכל מקרה זה לא יכול לפגוע)

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

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

הקובץ עם הקוד:
new_or_not.php
הקובץ עם כל התוצאות של הבדיקות:
new_or_not_results.txt
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 23-03-2009, 21:30
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 2 שנכתבה על ידי yoavmatchulsky שמתחילה ב "כל הכבוד על הבדיקות, אבל..."

תודה
אבל למה הכוונה?
לא הבנתי את השאלה...(?)

PHP אומר שניתן לגשת למתודות בצורה הסטטית (עם :: ) אפילו אם לא הוגדרו כ-static, אך זה ייתן הודעת שגיאה E_STRICT, כיוון שזה לא פעולה מדוייקת ונכונה.
ראה: http://www.php.net/manual/en/language.oop5.static.php

גם אם מתודה הוגדרה כ-static וגם אם לא, אפשר להריצה דרך instance של המחלקה.

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

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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 06:22

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר