WebWorker – html5

23 במאי 2011

תגיות: ,
2 תגובות


 


אחד מהחידושים ב – HTML5 הוא WebWorker.

 

בפוסט זה אני אראה את ההתחלה של עבודה עם WebWorker,

 

כידוע בעולם ה – javascript כל העבודה היא סינכרונית ולפעמים זה יכול להעיק על ה – UI, הדבר היחיד שיודע לעבוד בצורה אסינכרונית אלו קריאות ajax, בעזרת WebWorker אפשר להגדיר כל דבר שיעבוד בצורה אסינכרונית.

 

 

העבודה היא מאוד פשוטה, נגדיר קובץ js שיעבוד בצורה אסינכרונית ובקוד שלנו נייצר מופע של Worker וכפרמטר ניתן לו את שם הקובץ.

 



 var worker = new Worker('worker.js');


 

הקוד שלנו והקובץ Worker.js מתקשרים בעזרת postMessage כדי לשלוח הודעות מאחד לשני ובעזרת רישום ל – onmessage כדי לקבל הודעות, לדוגמה הקוד אצלנו יכול להיראות כך:

 



function webworkers2() {


    var worker = new Worker('worker.js');


    worker.onmessage = function (event) {


        document.getElementById('result2').textContent = event.data;


    };


    worker.postMessage('99945784');


}


 

בהתחלה יצרנו מופע של Worker, נרשמנו ל – onmessage והגדרנו שכאשר נקבל תשובה נציג את התוצאה על span כלשהו, בנוסף שלחנו הודעה (מספר כלשהו – כמובן שאפשר לשלוח כל מחרוזת שגם יכולה להיות אובייקט בפורמט JSON)

 

 

נראה את קובץ Worker.js

 



self.onmessage = function (event) {


    var res = isPrime(event.data);


    postMessage(res);


};


 

כמו שרואים אין כאן הרבה קוד, נרשמים ל – onmessage כדי לקבל את ההודעות מהלקוח ובסופו של דבר שולחים תשובה בעזרת postMessage.

 

 

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

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. שמואל6 ביוני 2011 ב 17:52

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

    האם ניתן ליצור אירוע אסינכרוני אמיתי ב JS? דהיינו לפעול כביכול ב 2 THRED'S ?

    הגב
  2. אריאל15 ביוני 2011 ב 18:12

    גם היום אפשר לבצע פעולות אסינכרוניות עם ה-Timout/Interval

    הגב