מבוא לעובדי אינטרנט
עובדי אינטרנט הוא ממשק API של JavaScript שמאפשר לך להפעיל סקריפטים חוט נפרד מן הראשי. זה יכול להיות שימושי כאשר אתה לא רוצה שום מכשול בביצוע של סקריפטים הראשי, בשל סקריפטים ברקע אסק.
ממשק ה- API של Web Workers הוא נתמך כמעט בכל הדפדפנים, לקבלת מידע מפורט יותר, יש להסתכל על המסמכים CaniUse. לפני הכניסה לקוד, נראה כמה תרחישים שבהם תרצה להשתמש בממשק API זה כדי שתוכל לקבל מושג על מה התכוונתי רקע סקריפטים esque
.
השתמש במקרים
נניח שיש תסריט זה מאחזר ומעבד קובץ. אם הקובץ הוא במידה ניכרת גדול זה ייקח הרבה זמן כדי להיות מעובד! אשר עשוי דוכן סקריפטים אחרים אשר הופעלו מאוחר יותר מקבל להורג.
עם זאת, אם עיבוד הקובץ מועבר לחוט רקע, ידוע כ חוט העובד, אירועים אחרים לא יחסמו עד שהראשון יסתיים.
התסריט להורג בחוט רקע עובד ידוע בשם סקריפט עובד או רק את העובד.
לדוגמה, דמיינו שיש טופס גדול, מסודרים כרטיסיות. זה סקריפט בצורה לעדכון פקדים בכרטיסייה אחת משפיע על חלק מהבקרות באחרים.
אם העדכון של כרטיסיות אחרות לוקח קצת זמן את המשתמש לא יכול להמשיך להשתמש בכרטיסייה הנוכחית מבלי שהאירועים שלה יעוכבו. פעולה זו עלולה להקפיא את ממשק המשתמש, למורת רוחו של המשתמש.
מאחר שמשתמש לא יראה את הכרטיסיות האחרות בעת מילוי אחת מהן, תוכל עדכן את הפקדים של הכרטיסיות האחרות בחוט רקע. בדרך זו, המשתמש יכול להמשיך להשתמש בכרטיסייה הנוכחית שהוא ממלא, מבלי שאף אחד מהסקריפטים שלו ייחסם על ידי תהליך העדכון של פקדים בכרטיסיות אחרות.
כמו כן, אם אתה מוצא תרחיש שבו סקריפט עשוי לחסום משתמש מלהשתמש בממשק המשתמש עד לביצועו, ייתכן שתשקול להעביר אותו לחוט הפועל, כך שניתן יהיה לבצע אותו ברקע.
תחומים וסוגי עובדים
Web Workers API הוא כנראה אחד ממשקי ה- API הפשוטים ביותר לעבוד איתו. יש שיטות פשוט למדי ליצור חוטי עובדים ו לתקשר איתם מתוך התסריט הראשי.
ההיקף הגלובלי של פתיל עובדים נמצא בהקשר שונה מהחוט המרכזי. אתה לא ניתן לגשת לשיטות ולמאפיינים של חלון
אובייקט כמו התראה ()
בתוך חוט עבודה. גם אתה לא ניתן לשנות את DOM ישירות מחוט עובד.
עם זאת, אתה פחית להשתמש בממשקי API רבים שמתחת חלון
, לדוגמה הבטחה
ו אחזור
, בחוט העובד שלך (ראה רשימה מלאה).
אתה יכול גם חוטי עובדים מקוננים: חוטי עובדים שנוצרו מחוט עובדים אחר. עובד שנוצר על ידי אחד אחר נקרא a תת.
יש גם רב סוגים של עובדים. שני העיקריים הם עובדים מסורים ומשותפים.
עובדים מסורים שייכים לאותו הקשר גלישה כי פתיל העיקרי שלהם שייך. עובדים משותפים, לעומת זאת, הם נוכחים בהקשר גלישה אחר (לדוגמה, ב- iframe) מהסקריפט הראשי. בשני המקרים, את התסריט הראשי ואת העובדים חייב להיות באותו דומיין.
הדוגמה במדריך זה תהיה על עובד מסור, שהוא הסוג הנפוץ ביותר.
שיטות API
ראה דיאגרמה להלן עבור סקירה מהירה של כל השיטות העיקריות המהווים את ה- API של Web Workers.
ה Worker ()
בנאי יוצר חוט עובדים ייעודי ו מחזירה את אובייקט הייחוס שלה. לאחר מכן, אנו משתמשים באובייקט זה כדי לתקשר עם אותו עובד ספציפי.
ה הודעה ()
השיטה משמשת הן סקריפטים הראשי עובד לשלוח נתונים זה לזה. הנתונים שנשלחו לאחר מכן מתקבלים בצד השני על ידי בהודעה
מנהל אירועים.
ה לבטל, לסיים()
שיטה מסיים חוט עובד מהסקריפט הראשי. סיום זה הוא מיידי: כל ביצוע סקריפט הנוכחי סקריפטים בהמתנה יבוטל. ה סגור ()
השיטה עושה את אותו הדבר, אבל זה שנקרא על ידי פתיל עובד סגירת עצמו.
קוד לדוגמה
עכשיו, בוא נראה כמה קוד לדוגמה. ה index.html
הדף מחזיקה את התסריט הראשי בתוך א tag, while the worker script is held in a JavaScript file called
worker.js
.
אנחנו מתחילים עם יצירת חוט העובד מהתסריט הראשי.
w = עובד חדש ('worker.js');
ה Worker ()
בנאי לוקח את כתובת האתר של קובץ העובד כטיעון.
לאחר מכן, אנו מוסיפים מטפל אירוע עבור בהודעה
האירוע של המופע עובד החדש שנוצר לקבל נתונים ממנו. ה נתונים
רכוש של ה
האירוע יחזיק את הנתונים שהתקבלו.
w = עובד חדש ('worker.js'); w.onmessage = (e) => console.log ('התקבל מעובד: $ eddata');
עכשיו, אנחנו משתמשים הודעה ()
ל לשלוח כמה נתונים על חוט העובד בלחיצת כפתור. ה הודעה ()
השיטה יכולה לקחת שני ארגומנטים. הראשון יכול להיות מכל סוג שהוא (מחרוזת, מערך ...). זה הנתונים להישלח לחוט העובד (או לסקריפט הראשי, כאשר השיטה קיימת בחוט העובד).
הפרמטר השני, האופציונלי, הוא מערך של אובייקטים ניתן להשתמש על ידי החוטים עובד (אבל לא על ידי התסריט הראשי, או להיפך). חפצים מסוג זה נקראים ניתן להעברה
חפצים.
document.querySelector ('button') onclick = () => w.postMessage ('john');
אני רק שולח ערך מחרוזת על חוט העובד.
ב פתיל העובד, אנחנו צריכים להוסיף בהודעה
אירוע זה יקבלו את הנתונים שנשלח אליו על ידי התסריט הראשי בלחיצת כפתור. בתוך המטפל, אנחנו לשרשר את המחרוזת שהתקבלה עם אחר ולשלוח את התוצאה בחזרה את התסריט הראשי.
console.info ('עובד נוצר'); onmessage = (e) => postMessage ('$ $ e.data');
שלא כמו בסקריפט הראשי שבו היינו צריכים להשתמש w
אובייקט הפניה אל עיין בחוט העובד הספציפי שבו את התסריט ואז משתמש בהודעה
ו הודעה
שיטות, יש אין צורך באובייקט הפניה בחוט העובד כדי להצביע על החוט הראשי.
הקוד פועל באופן הבא. כאשר הדפדפן נטען index.html
, הקונסולה תציג את "עובד נוצר"
הודעה בהקדם האפשרי worker ()
הבנאי מבוצע בחוט הראשי, יצירת עובד חדש.
כאשר תלחץ על הלחצן בדף, תקבל את "קיבל מהעובד: היי ג 'ון"
הודעה במסוף, המהווה את המחרוזת שהיתה משורשר בחוט העובד עם הנתונים שנשלחו אליו, ואז היה נשלח בחזרה אל התסריט הראשי.