מאמר זה מטפל בביצועים של חיבור מחרוזות ב JavaScript, באופטימיזציה, שיפור נתוני ריצה ושיטות שיגרמו לאפליקציית ה Web שלכם לרוץ מהר יותר ולספק חווית משתמש חלקה ונעימה יותר.
הבעיה
מרבית מפתחי שפת JavaScript משתמשים בדרך הקלה לחיבור מחרוזות אשר מכילה את האופרטור +.
אמנם שימוש זה באופרטור + הינו ברור וקריא ואף נוח בחיבור מספר מחרוזות קטן, הרי שבשימוש מסיבי וחיבור מספר רב של מחרוזות (למשל יצירת דף דינמית בצד הלקוח) הביצועים נפגעים באופן מהותי.
אל דאגה, הפיתרון בהישג יד...
הפיתרון
פונקציית join של אובייקט המערך מאפשרת לנו להמיר את כל האלמנטים במערך למחרוזת בודדת כאשר האלמנטים מופרדים ע"י תו מוגדר מראש.
אם נציב בכל תא במערך מחרוזת ונחבר את כולן באמצעות שימוש בפונקציית join עם תו ריק הרי שנקבל מחרוזת אחת גדולה בדיוק כמו שנקבל אם נשתמש באופרטור +.
פונקציה זו דומה מאד למתרחש באובייקט StringBuffer בשפת Java.
היתרון
היתרון שבשימוש ב Array.join בכדי לאחד מחרוזות הוא עניין טהור של שיפור בביצועים.
בכדי לראות עד כמה העניין מהותי בואו נריץ 10,000 פעמים לולאה שמחברת מחרוזות בשתי השיטות:
תוצאות הניסוי:
חיבור בשיטה רגילה (+):
Array.join:
תוצאות הניסוי מרשימות. Array.join משפר את הביצועים ב 2484% (!!!) לעומת שימוש בחיבור מחרוזות רגיל ב IE.
לעומת זאת, דפדפן FF כמעט ולא מרגיש בהבדל, מה שאומר שהחבר'ה ב Mozilla עשו עבודה טובה :-)
מסקנות
השתמשו ב Array.join ביישומי ה JavaScript שלכם וספקו למשתמש שלכם חווית משתמש חלקה ונעימה יותר, תוך שמירה על ביצועים גבוהים.
פונקציות בדיקה
הבעיה
מרבית מפתחי שפת JavaScript משתמשים בדרך הקלה לחיבור מחרוזות אשר מכילה את האופרטור +.
var str = "Hello" + " World";
אמנם שימוש זה באופרטור + הינו ברור וקריא ואף נוח בחיבור מספר מחרוזות קטן, הרי שבשימוש מסיבי וחיבור מספר רב של מחרוזות (למשל יצירת דף דינמית בצד הלקוח) הביצועים נפגעים באופן מהותי.
אל דאגה, הפיתרון בהישג יד...
הפיתרון
פונקציית join של אובייקט המערך מאפשרת לנו להמיר את כל האלמנטים במערך למחרוזת בודדת כאשר האלמנטים מופרדים ע"י תו מוגדר מראש.
אם נציב בכל תא במערך מחרוזת ונחבר את כולן באמצעות שימוש בפונקציית join עם תו ריק הרי שנקבל מחרוזת אחת גדולה בדיוק כמו שנקבל אם נשתמש באופרטור +.
פונקציה זו דומה מאד למתרחש באובייקט StringBuffer בשפת Java.
var buffer = new Array();
buffer[buffer.length] = "Hello";
buffer[buffer.length] = " World";
buffer.join("");
היתרון
היתרון שבשימוש ב Array.join בכדי לאחד מחרוזות הוא עניין טהור של שיפור בביצועים.
בכדי לראות עד כמה העניין מהותי בואו נריץ 10,000 פעמים לולאה שמחברת מחרוזות בשתי השיטות:
תוצאות הניסוי:
חיבור בשיטה רגילה (+):
• IE 6 - זמן ריצה ממוצע 646ms (הערך המקסימלי: 810ms, הערך המינימלי: 460ms)
• FireFox 1.5B1 - זמן ריצה ממוצע 26ms (הערך המקסימלי: 47ms, הערך המינימלי: 15ms)
Array.join:
• IE 6 - זמן ריצה ממוצע 26ms (הערך המקסימלי: 32ms, הערך המינימלי: 15ms)
• FireFox 1.5B1 - זמן ריצה ממוצע 20ms (הערך המקסימלי: 31ms, הערך המינימלי: 15ms)
תוצאות הניסוי מרשימות. Array.join משפר את הביצועים ב 2484% (!!!) לעומת שימוש בחיבור מחרוזות רגיל ב IE.
לעומת זאת, דפדפן FF כמעט ולא מרגיש בהבדל, מה שאומר שהחבר'ה ב Mozilla עשו עבודה טובה :-)
מסקנות
השתמשו ב Array.join ביישומי ה JavaScript שלכם וספקו למשתמש שלכם חווית משתמש חלקה ונעימה יותר, תוך שמירה על ביצועים גבוהים.
פונקציות בדיקה
function test1(){
var cycles = 10000;
var tp1 = new Date().valueOf();
var buffer = "";
for (var i = 0; i < cycles; i++)
buffer += "0123456789";
var tp2 = new Date().valueOf();
alert(tp2 - tp1);
}
function test2(){
var tp1 = new Date().valueOf();
var buffer = new Array();
for (var i = 0; i < cycles; i++)
buffer[buffer.length] = "0123456789";
var str = buffer.join("");
var tp2 = new Date().valueOf();
alert(tp2 - tp1);
}
עוזי רפאלי משמש כסמנכ"ל טכנולוגיות בחברת קומט מערכות מידע המתמחה במתן פתרונות כוללים ליזמות טכנולוגית בתחום האינטרנט.