אחת מהיכולות המיוחדות של האינטרנט היא היכולת שלו להרכיב דברים. דפי אינטרנט כוללים מגוון משאבים שונים, שיכולים להגיע מכמה מקורות.
Blink משמש כמנוע העיבוד לדפדפנים שמבוססים על Chromium, כולל Chrome, Android WebView, Microsoft Edge, Opera ו-Brave.
מנוע עיבוד הוא הרכיב בדפדפן אינטרנט שממיר קוד HTML, CSS ו-JavaScript – יחד עם תמונות ומשאבים אחרים – לדפי אינטרנט שאפשר לצפות בהם ולקיים איתם אינטראקציה.
איך Blink מעבד דף אינטרנט?
תהליך הרינדור מתחיל ב-Blink באיסוף כל המשאבים הנדרשים, כמו HTML, CSS, JavaScript, סרטונים ותמונות. כדי לאחזר את המשאבים האלה, Blink מנהל אינטראקציות עם מחסנית הרשת, ב-Chromium ובמערכת ההפעלה הבסיסית.
ברגע שקובצי ה-CSS וה-HTML נטענים, Blink יכול להפוך את הקוד הזה, בצורה של טקסט, לייצוג שהוא יכול לעבוד איתו. הפעולה הזו נקראת ניתוח. צריך גם לנתח את JavaScript ואז להריץ אותו.
אחרי שכל זה קורה, Blink מתחיל ברינדור. רינדור הוא תהליך של פריסה והצגה של דפי אינטרנט שאתם צופים בהם ויוצרים איתם אינטראקציה.
בתרשים הבא מוצגים השלבים בפייפליין של משימות הרינדור, כולל הרכיבים, התהליכים והמשאבים שמעורבים בכל שלב. ל-Blink יש הרבה עבודה לעשות!
עיבוד גרפיקה
Blink משתמש במנוע הגרפיקה Skia בקוד פתוח כדי ליצור אינטראקציה עם חומרת הגרפיקה הבסיסית של מחשב או מכשיר נייד.
Skia מספקת ממשקי API משותפים שפועלים במגוון פלטפורמות חומרה ותוכנה. הוא משמש כמנוע הגרפיקה של Google Chrome ושל מוצרים רבים אחרים.
במקום לנסות לתמוך במערכות הפעלה ובמכשירים שונים, תוך התעדכנות בשינויים בפלטפורמה, Skia משתמשת בספריות גרפיקה, כולל OpenGL, Vulkan ו-DirectX. הספרייה שבה נעשה שימוש ב-Skia תלויה בפלטפורמה שבה היא פועלת, כמו Android בנייד או Windows במחשב.
ניתוח והרצה של JavaScript
כדי לנתח ולהריץ קוד JavaScript ו-WebAssembly, Blink משתמש ב-V8, מנוע קוד פתוח שפותח על ידי פרויקטי Chromium.
V8 מאפשר למפתחים להשתמש בקוד JavaScript או WebAssembly כדי לגשת ליכולות של הדפדפן הבסיסי. לדוגמה: כדי לבצע מניפולציה בDocument Object Model, שהוא הייצוג הפנימי של מסמך ש-Blink בונה מקוד HTML.
V8 מעבד JavaScript בהתאם לתקן JavaScript, שנקרא ECMAScript.
עיבוד לפי תקנים
מנוע V8 מעבד JavaScript בהתאם לתקן JavaScript, שנקרא ECMAScript. מנועי עיבוד כמו Blink מתוכננים להטמיע סטנדרטים של האינטרנט באופן שמאפשר פעולה הדדית. תקני האינטרנט מאפשרים למפתחים ולמשתמשי קצה להיות בטוחים שדפי האינטרנט פועלים בצורה טובה, לא משנה באיזה דפדפן הם משתמשים.
Blink פועל לפי המפרטים של תכונות הדפדפן והשפה שמוגדרות בתקני האינטרנט, כולל HTML, CSS ו-DOM.
HTML ו-DOM
תקן ה-HTML מגדיר איך מהנדסי דפדפנים צריכים להטמיע רכיבי HTML. המפרט של כל רכיב HTML כולל קטע שמגדיר את ממשק ה-DOM של הרכיב. הפרטים האלה מסבירים איך הדפדפן צריך להטמיע את JavaScript כדי לאפשר אינטראקציה עם הרכיב באופן שתואם לתקנים במכשירים ובפלטפורמות שונים.
מפרט הממשק כתוב ב-WebIDL: שפת הגדרה לבניית ממשק אינטרנט. הקוד הבא ב-WebIDL הוא חלק מההגדרה של HTMLImageElement בתקן HTML.
[Exposed=Window,
LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned
long height)]
interface HTMLImageElement : HTMLElement {
[HTMLConstructor] constructor();
[CEReactions] attribute DOMString alt;
[CEReactions] attribute USVString src;
[CEReactions] attribute USVString srcset;
[CEReactions] attribute DOMString sizes;
[CEReactions] attribute DOMString? crossOrigin;
[CEReactions] attribute DOMString useMap;
[CEReactions] attribute boolean isMap;
[CEReactions] attribute unsigned long width;
[CEReactions] attribute unsigned long height;
readonly attribute unsigned long naturalWidth;
readonly attribute unsigned long naturalHeight;
readonly attribute boolean complete;
readonly attribute USVString currentSrc;
[CEReactions] attribute DOMString referrerPolicy;
[CEReactions] attribute DOMString decoding;
[CEReactions] attribute DOMString loading;
[CEReactions] attribute DOMString fetchPriority;
Promise<undefined> decode();
// also has obsolete members
};
WebIDL היא דרך סטנדרטית לתאר ממשקים פונקציונליים, כמו אלה שמרכיבים את רוב תקני האינטרנט.
כדי להטמיע תכונה, מהנדסים מכניסים את קוד WebIDL לקובץ, והוא עובר טרנספורמציה אוטומטית על ידי Blink כדי לספק למפתחים ממשק לתכונה הזו. אחרי שמגדירים את הממשק באמצעות WebIDL, מהנדסים יכולים ליצור את ההטמעות שמגיבות לקריאות לממשק.
html_image_element.idl במקור של Chromium.ספריות של צד שלישי
Blink משתמש בספריות רבות של צד שלישי. לדוגמה, נעשה שימוש ב-WebGL כדי לעבד גרפיקה אינטראקטיבית דו-ממדית ותלת-ממדית.
ספריות כמו WebGL עוברות אופטימיזציה גבוהה ובדיקות קפדניות. הם מאפשרים ל-Blink לגשת לתכונות ולפונקציות חשובות, בלי הצורך להמציא את הגלגל מחדש. ממשק WebGL IDL מוגדר, והמהנדסים של Blink מקשרים את ממשק האינטרנט הזה לקוד ולספריות בקצה העורפי שמשמשים לעיבוד של הרבה אלמנטים שונים .
אם אתם רוצים לראות את WebGL בפעולה, כדאי לכם לבדוק את אפליקציית העיבוד של פרקטלים Fractious, שמשתמשת ב-WebGL.
רינדור בפלטפורמות שונות
יכול להיות שאתם תוהים אם Chrome משתמש ב-Blink בכל מקום, בכל מערכות ההפעלה ובכל המכשירים.
ב-iOS וב-iPadOS, Chrome משתמש ב-WebKit כמנוע העיבוד שלו. WebKit הוא למעשה פיצול של פרויקט אחר, KDE, שהתחיל בשנת 1998. למעשה, גם Safari וגם Chromium התבססו בהתחלה על WebKit. נכון להיום, דפדפן Safari וכל הדפדפנים במערכת האקולוגית של אפל משתמשים ב-WebKit, בהתאם לדרישות של אפל לגבי App Store.
עם הזמן, פרויקטי Chromium פיתחו ארכיטקטורת תוכנה שונה מרובת תהליכים, כי התחזוקה של שתי ארכיטקטורות נפרדות בבסיס קוד אחד הפכה לבעייתית.
בנוסף, ב-Chromium רצו להשתמש בתכונות שלא נבנו ב-WebKit. לכן, החל מגרסה 28, מהנדסי Chromium החליטו להתחיל לעבוד על מנוע רינדור משלהם. הם יצרו fork של הקוד שלהם מ-WebKit וקראו לו Blink. יש שמועות שלפיהן השם Blink נגזר מהתג <blink> (לא כל כך) האהוב שהיה זמין בדפדפן Netscape Navigator כדי לגרום לטקסט להבהב.
לסיכום: דפדפנים ומסגרות אחרים שמבוססים על Chromium, כמו Chrome, Microsoft Edge, Opera, Vivaldi, Arc ו-Brave, משתמשים ב-Blink. דפדפן Safari וחלק מהדפדפנים האחרים משתמשים ב-WebKit, יחד עם כל הדפדפנים ב-iOS וב-iPadOS, כולל Chrome. Firefox משתמש במנוע עיבוד שנקרא Gecko.