21-08-2005, 10:30
|
|
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
שיטות אופטימיזציה - פרק 3 + 4
הערה: מאמר זה והבאים אחריו יסקרו שיטות שונות של אופטימיזציה, חלקן ברמת המהדר, וחלקן בשליטת המפתח.
במאמר זה נסקור שתי שיטות אופטימיזציה ברמת המהדר (לנו אין שליטה על תהליך זה)
ביטול שטח מת וקוד מת
אופטימיזציה ברמה בסיסית (מהדר)
הפרק הקודם עסק בהעברה ע"י העתקה. כאשר התהליך מבוצע ע"י המהדר, לעיתים נוצרים שטחים מתים.
שטחים אלו, הינם קטעים שהתכנית לעולם לא תקרא להם.
אם ניקח את הדוגמה האחרונה:
קוד PHP:
x = value; .... function(x);
בה המהדר הפך את הקוד ל:
במקרה כזה, נותרה לנו שורת קוד לא שמישה שאין טעם בקריאה שלה.
אחד מתפקידיו של המהדר, בזמן ביצוע אופטימיזציה הוא לבטל שורות קוד אלו, הן גם מורידות מהיעילות.
וגם תופסות מקום מיותר.
הרבה מקרים לביטול שטחים מתים כאלה, נוצרים בדרך כלל לאחר שהמהדר מרחיב פעולות מאקרו.
מצב נוסף שקיים הינו "קוד מת", למה בעצם יש לנו קוד מת שאנחנו כתבנו?
קוד מת הוא קוד שלא מתבצע בשום שלב של ריצת התכנית, כלומר - אין שום מצב שפקודות אלה
יקראו או יבוצעו.
קטעי קוד אלו הם לרוב תוצאות של פעולות אופטימיזציה קודמות - והמהדר, שלא שומר קטעי קוד מתים,
מסלק את קטעי הקוד הללו מן התכנית.
ביטול של תת-ביטויים נפוצים
אופטימיזציה ברמה בסיסית (מהדר)
במקרים שבהם מזוהים על ידי המהדר ביטויים שכולם מייצגים את אותו הערך, המהדר מחשב את הערך
פעם אחת ומציב אותו במקום כל אחד מהביטויים המקוריים.
דוגמה (פשוטה):
במקרה זה המהדר יוסיף משתנה זמני שיחזיק את ערך הביטוי:
ויציב את ערכו בשאר הביטויים:
במקרים מסויימים (תלוי בשכיחות הביטוי) תהליך זה יוריד את גודלו של קובץ הביצוע, אבל ברוב המקרים
זה יביא להאצת תהליך הביצוע של התכנית.
פרקים קודמים:
אופטימיציה של קוד - מבוא
שיטות אופטימיזציה - פרק 1
שיטות אופטימיזציה - פרק 2
|