מחשבים לא יכולים למעשה להריץ את הקוד שאתה כותב בו JavaScript (או כל שפה אחרת לצורך העניין). מחשבים יכולים להריץ קוד מכונה בלבד. קוד המכונה שמחשב מסוים יכול להריץ מוגדר בתוך המעבד שעתיד להריץ פקודות אלה ויכול להיות שונה עבור מעבדים שונים.
מובן מאליו, קוד מכונת כתיבה לאנשים היה קשה לעשות (האם 125 הוא פקודה להוסיף או שזה 126 או אולי 27). כדי לעקוף את הבעיה הזו נוצרו מה שנקרא שפות הרכבה. שפות אלה השתמשו בשמות ברורים יותר עבור הפקודות (כגון הוספה להוסיף) וכך פסקו את הצורך לזכור את קודי המכונה המדויקים. לשפות ההרכבה עדיין יש קשר אחד לאחד עם המעבד וקוד המכונה המסוים שהמחשב ממיר את אותן פקודות.
יש להכין או לפרש שפות הרכבה
בשלב מוקדם מאוד התברר כי קל יותר לכתוב שפות היו נחוצים וכי ניתן להשתמש במחשב עצמו כדי לתרגם את אלה להוראות קוד המכונה שהמחשב יכול להבין בפועל. היו שתי גישות שניתן היה לנקוט בתרגום זה ושתי האלטרנטיבות נבחרו (האחד או השני ישמש תלוי בשפה שבה אתה משתמש ואיפה היא מופעלת).
שפה מורכבת היא שפה שבה ברגע שנכתבה התוכנית אתה מזין את הקוד דרך תוכנית הנקראת א מהדר וזה מייצר גרסת קוד מכונה של התוכנית. כאשר אתה רוצה להפעיל את התוכנית אתה פשוט קורא לגירסת קוד המכונה. אם תבצעו שינויים בתוכנית עליכם לחבר אותה מחדש לפני שתוכלו לבדוק את הקוד שהשתנה.
שפה מפורשת היא שפה בה ההוראות ממרות את מה שכתבת לקוד מכונה בעת הפעלת התוכנית. שפה מפורשת בעצם מקבלת הוראה ממקור התוכנית, ממירה אותה למחשב קוד, מריץ את קוד המכונה ואז תופס את ההוראות הבאות מהמקור לחזור על תהליך.
שתי גרסאות על קומפילציה ופרשנות
גרסה אחת משתמשת בתהליך דו-שלבי. עם גרסה זו, מקור התוכנית שלך מורכב לא ישירות לקוד המכונה אלא במקום זאת, הוא מומר לשפה דמוית הרכבה שעדיין אינה תלויה בזה מעבד. כאשר ברצונך להריץ את הקוד הוא מעבד את קוד ההרכבה באמצעות מתורגמן ספציפי למעבד כדי לקבל את קוד המכונה המתאים למעבד זה. לגישה זו יש יתרונות רבים של עריכה תוך שמירה על עצמאות מעבד שכן אותו קוד מורכב יכול להתפרש על ידי מעבדים רבים ושונים. Java היא שפה אחת שמשתמשת לעתים קרובות בגרסה זו.
הגרסא האחר נקרא מהדר Just in Time (או JIT). בגישה זו אתה לא מפעיל את המהדר לאחר שכתבת את הקוד שלך. במקום זאת, זה קורה אוטומטית כשאתה מפעיל את הקוד. באמצעות מהדר Just in Time הקוד לא מתפרש על ידי הצהרה, הוא מורכב הכל באחד ללכת בכל פעם שזה נקרא להפעלה ואז הגרסה הידועה שזה עתה יצרה היא מה שמקבל לרוץ. גישה זו גורמת לה להיראות כמו שהקוד מתפרש, אלא שבמקום ששגיאות יימצאו רק כאשר ההצהרה עם הושגה שגיאה, כל שגיאה שמתגלה על ידי המהדר גורמת לכך שאף אחד מהקודים לא מופעל במקום שכל הקוד עד לאותה נקודה הוא לרוץ. PHP היא דוגמה לשפה שמשתמשת בדרך כלל רק בליקוט זמן.
האם JavaScript מורכב או מפרש?
אז עכשיו אנו יודעים מה פירוש הקוד המתפרש וקוד הידור, השאלה הבאה שעליך לענות עליה היא מה כל זה קשור ל- JavaScript? תלוי בדיוק היכן אתה מפעיל את JavaScript שלך, הקוד עשוי להילחם או לפרש אותו או להשתמש באחת משתי הגרסאות האחרות שהוזכרו. רוב הזמן אתההפעלת JavaScript שלך בדפדפן אינטרנט ושם JavaScript מתפרש בדרך כלל.
שפות המפורשות בדרך כלל איטיות יותר משפות מורכבות. ישנן שתי סיבות לכך. ראשית, יש לפרש את הקוד שיש לפרש לפני שניתן יהיה להפעיל אותו ושנית להתרחש בכל פעם שההצהרה אמורה להיות מופעלת (לא רק בכל פעם שאתה מפעיל את JavaScript, אלא אם היא נמצאת ב א לולאה אז זה צריך להיעשות בכל פעם סביב הלולאה). פירוש הדבר שקוד שנכתב ב- JavaScript יפעל לאט יותר מאשר קוד שנכתב בשפות רבות אחרות.
איך הידיעה הזו עוזרת לנו היכן JavaScript היא השפה היחידה שזמינה לנו לרוץ בכל דפדפני האינטרנט? מתורגמן ה- JavaScript עצמו המובנה בדפדפן האינטרנט לא כתוב ב- JavaScript. במקום זאת, זה כתוב בשפה אחרת שנערכה אז. משמעות הדבר היא שתוכלו לגרום ל- JavaScript שלכם לרוץ מהר יותר אם תוכלו לנצל את כל הפקודות ש- JavaScript מספקות המאפשרות לכם להוריד את המשימה למנוע ה- JavaScript עצמו.
דוגמאות להעלאת JavaScript להפעלה מהירה יותר
דוגמה לכך היא שחלק מהדפדפנים אך לא כולם יישמו שיטת document.getElementsByClassName () במנוע JavaScript בעוד שאחרים טרם עשו זאת. כאשר אנו זקוקים לפונקציונליות ספציפית זו אנו יכולים לוודא כי קוד פועל מהר יותר בדפדפנים שבהם מנוע ה- JavaScript מספק אותו באמצעות תכונה לחוש אם השיטה קיימת ורק ליצור גרסה משלנו לקוד ב- JavaScript כאשר מנוע ה- JavaScript אינו מספק אותה לנו. כאשר מנוע ה- JavaScript אכן מספק פונקציונליות זו עליו לפעול מהר יותר אם אנו משתמשים בזה במקום להפעיל גרסה משלנו הכתובה ב- JavaScript. הדבר נכון גם לגבי כל עיבוד שמנוע JavaScript מאפשר לנו להתקשר אליו ישירות.
יהיו גם מקרים בהם JavaScript מספק מספר דרכים לבצע את אותה בקשה. במקרים אלה, אחת הדרכים לגישה למידע עשויה להיות ספציפית יותר מהאחרות. לדוגמה document.getElementsByTagName ('טבלה') [0] .tBodies ו- document.getElementsByTagName ('טבלה') [0] .getElementsByTagName ('tbody') שניהם אחזר את אותה nodelist של תגיות ה- tbody בטבלה הראשונה בדף האינטרנט, אולם הראשון מבין אלה הוא פקודה ספציפית לאחזור. תגי ה- tbody שבהם השנייה מזהה שאנו מחזירים תגי tbody בפרמטר וניתן להחליף ערכים אחרים כדי לאחזר אחר תגיות. ברוב הדפדפנים הגרסה הקצרה והספציפית יותר של הקוד תפעל מהר יותר (במקרים מסוימים הרבה יותר מהר) מאשר הגרסא השנייה ולכן הגיוני להשתמש בקצרים והספציפיים יותר גרסה. זה גם מקל על הקריאה ותחזוקה של הקוד.
כעת, ברבים מהמקרים האלה, ההבדל בפועל בזמן העיבוד יהיה קטן מאוד והוא יהיה רק מתי אתה מוסיף הרבה אפשרויות קוד כאלה יחד, שתקבל כל הבדל בולט בזמן שאורך הקוד שלך לרוץ. זה די נדיר אם כי שינוי הקוד שלך כדי לגרום לו לרוץ מהר יותר הולך להפוך את הקוד למשך זמן ארוך יותר או קשה יותר לתחזוקה, ולעתים קרובות ההפך יהיה נכון. יש גם היתרון הנוסף בכך שייתכן שייווצרו גרסאות עתידיות של מנועי JavaScript שמאיצות את הגרסא הספציפית יותר יתר על כן, כך ששימוש בגרסה הספציפית עשוי לגרום לכך שהקוד שלך יפעל מהר יותר בעתיד מבלי שתצטרך לשנות דבר.