הודעות על הוצאה משימוש של (P)NaCl
לאור המומנטום של התמיכה ב-WebAssembly בדפדפנים שונים, אנחנו מתכננים להתמקד בקוד מקורי ב-WebAssembly מעכשיו והלאה, ולהסיר את התמיכה ב-PNaCl ברבעון הרביעי של 2019 (למעט אפליקציות Chrome). אנחנו מאמינים שהסביבה העסקית התוססת של WebAssembly מתאימה יותר לאפליקציות אינטרנט חדשות וקיימות עם ביצועים גבוהים, וששימוש ב-PNaCl נמוך מספיק כדי להצדיק הוצאה משימוש.
החל מגרסה 76 של Chrome, PNaCl באינטרנט הפתוח הועבר לגרסת Origin. זוהי מנגנון שמאפשר למפתחי אינטרנט להירשם ולקבל גישה לתכונה שלא מופעלת כברירת מחדל.
בדרך כלל מדובר בתכונה חדשה שמוצעת, אבל במקרה הזה מדובר בתכונה הוצאה משימוש.
מפתח יכול להירשם במסוף גרסת המקור לניסיון
ולקבל אסימון שאפשר להטמיע בדף ולהפעיל את התכונה בלי שהמשתמש יצטרך להשתמש בדגל.
(פרטים נוספים זמינים במדריך המקושר). תקופת הניסיון אמורה להימשך עד גרסה 78 של Chrome, בערך עד דצמבר 2019.
השינוי הזה לא אמור להשפיע על NaCl או על PNaCl באפליקציות או בתוספים של Chrome, וניתן להשתמש בדגל 'enable-nacl' בדף chrome://flags גם כדי להפעיל PNaCl באופן מקומי לצורך בדיקה (הדגל הזה שומר גם על הפונקציה הנוכחית שלו, שמאפשרת להפעיל NaCl 'מקורי' שאינו PNaCl בכל דף).
בנוסף, לאחרונה הודענו על הפסקת השימוש באפליקציות Chrome מחוץ ל-ChromeOS ברבעון הראשון של 2018.
ברוב תרחישי השימוש של (P)NaCl, מומלץ לעבור מ-NaCl SDK ל-Emscripten.
סביר להניח שההעברה תהיה פשוטה וחלקה
אם האפליקציה מאפשרת ניידות ב-Linux,
SDL או POSIX APIs.
למרות שהתמיכה הישירה בממשקי NaCl / Pepper API לא זמינה,
ניסינו לרשום רשימה מקבילה של Web API.
לבעיות ניוד מאתגרות יותר, אפשר לפנות אל
native-client-discuss@googlegroups.com
העברת API
כאן מפורט הסטטוס של חלופות Web Platform לכל אחד מממשקי ה-API שנחשפים ל-(P)NaCl.
בנוסף, בטבלה מפורטים הספרייה או האפשרות ב-Emscripten
שמציע את ההחלפה הקרובה ביותר.
אנחנו מצפים להוסיף תמיכה בשרשור של זיכרון משותף ל-WebAssembly בשנת 2017, כי שרשור חיוני להתאמה לתרחישים השימוש המעניינים ביותר של (P)NaCl. פריטי העברה שמבוססים על תמיכה בשרשורים עתידיים
מסומנות למטה. אם בקרת הזרימה של האפליקציה מסתמכת במידה רבה על חסימה
יכול להיות גם שנדרשת תמיכה בשרשורים כדי לאפשר ניוד נוח.
ניסינו להיות מדויקים בטבלה הזו, אבל ללא ספק יש שגיאות או השמטות.
אם נתקלת בבעיה, ניתן לפנות אלינו במספר
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
x |
SDL (חלקי) |
GAP (חלקי) – AudioWorkletNode ROUGHLY |
הבדיקה של AudioWorkletSpec הסתיימה, אבל AudioDeviceClient Client מתאים יותר ל-API הזה. ה- AudioDeviceClient עדיין בתהליך הוספה על ידי הקהילה. יכול להיות שה-worklet לא יהיה מקביל ל-API הזה. |
GetCurrentConfig |
|
SDL |
AudioContext.* (מקבלת בחזרה את ההגדרות שהועברו) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (פרמטר) |
מועברים בכל פעם במקום להיות מצורף למאגר הנתונים הזמני. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (פרמטר) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio משתמש רק בצף של 32 סיביות, PPAPI משתמש ב-int של 16 סיביות. |
PPAPI תומך באופן תיאורטי במספר גדלים של דגימה. בפועל, הוא תומך רק בדוגמאות של 16 ביט. לצערנו, המפתחים ביקשו גדלים של דגימות של 16 ביט כדי לחסוך בזיכרון. הגרסה הבאה של מפרט Web Audio תטמיע תמיכה בדוגמאות של 16 ביט. אפשר לבצע אופטימיזציה של AudioBuffer בדומה ל-Firefox באמצעות שימוש במאגר נתונים זמני של 16 ביט לאודיו שמקורו ב-decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
CreateStereo16Bit |
|
GAP |
GAP – יש תמיכה רק במדגמים של מספרים ממשיים (float) ב-32 ביט |
בגרסה הבאה של מפרט Web Audio תהיה תמיכה בקטעי אודיו של 16 ביט. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (ממבנה ברירת המחדל) |
כברירת מחדל, ל- AudioContext יהיה קצב דגימה מועדף שתואם לקצב הדגימה בפועל של התקן האודיו בחומרה. |
RecommendSampleFrameCount |
|
GAP |
GAP – הטיפול יתבצע באמצעות AudioDeviceClient המתוכנן |
יש בעיה פתוחה שמאפשר להשתמש בגודל שצוין על ידי משתמש, אבל הוא עדיין מוגדר. הדרך הטובה ביותר לעשות זאת היא להשתמש ב- AudioDeviceClient, כדי שתוכלו לדעת מה הגודל המתאים לחומרה הזו. |
PPB_Console
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יומן |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
ה-Play Console נחשב כהחלפה מלאה מספיק, אלא אם המפתחים העלו תרחישים ספציפיים לשימוש בפונקציונליות של LogWithSource. אפשר להשתמש במפות המקור של DevTools כדי לנפות באגים בקוד JavaScript שעבר טרנספייל בשפת המקור המקורית שלו. |
PPB_Core
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
אפשר ליצור סנכרון שווה ערך. |
PPB_FileIO
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
window.chooseFileSystemEntries() |
שימוש ביצירה ובפתיחה נעשה בצורה שונה, אבל הכוח של חלקיקים זהה. |
פתיחה |
|
FS (חלקי) |
window.chooseFileSystemEntries() |
|
שאילתה |
|
FS (חלקי) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.last modified |
GAP (חלקי) – אפשר להשתמש גם ב-Blob.type כדי לבדוק את סוג ה-MIME. לא ניתן לקבוע את סוג מערכת הקבצים, את זמן היצירה ואת זמן הגישה האחרונה באמצעות Native File System API. |
מגע |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
קריאה |
|
FS (חלקי) |
Blob.slice().arrayBuffer() |
|
כתיבה |
|
FS (חלקי) |
FileSystemWriter.write() |
|
SetLength |
|
FS (חלקי) |
FileSystemWriter.truncate() |
|
ישירה |
|
GAP (חלקי) |
GAP (חלקי) – הקבצים נמחקים כשמתבצעת קריאה ל-FileSystemWrite.close() |
זה תוכנן כך שקובצי Native File System API נחשפים למערכת ההפעלה, ולכן צריך לבצע בדיקת גלישה בטוחה לפני שהנתונים מוצגים למערכת ההפעלה. |
סגירה |
|
FS (חלקי) |
FileSystemWriter.close() |
לא מבטלת פעולות ממתינות, אך היא גורמת לכל הנתונים שנכתבו עד כה לדיסק. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() או Blob.arrayBuffer() |
מאפשרת קריאת כמה תת-טווח במקביל. |
PPB_FileRef
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (חלקי) |
FileSystem.type |
|
GetName |
|
FS (חלקי) |
File.name |
|
GetPath |
|
FS (חלקי) |
פער (חלקי) – באמצעות Native File System API, אפשר לקבוע את הנתיב היחסי של קובץ מהפניה לספרייה שמכילה את הקובץ באמצעות FileSystemHandle.resolve(FileSystemHandle) |
לא ניתן לקבוע את הנתיב המוחלט של קובץ, והמשתמש צריך להעניק הרשאה לגשת לספרייה שמכילה את הקובץ. |
GetParent |
|
FS (חלקי) |
GAP (חלקי) - באמצעות ממשק ה-API של Native File System (מערכת קבצים מקומית), ניתן לקבוע את הנתיב היחסי של קובץ מהפניה לספרייה שמכילה את הקובץ באמצעות FileSystemHandle.resolve(FileSystemHandle) |
המשתמש צריך להעניק הרשאה לגשת לספרייה שמכילה את הקובץ. |
MakeDirectory |
|
FS (חלקי) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
מגע |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
אפשר לשנות את זמן השינוי על ידי כתיבת קוד. |
מחיקה |
|
FS (חלקי) |
FileSystemDirectoryHandle.removeEntry() |
בשונה מה-PPAPI, הספריות לא חייבות להיות ריקות. |
שינוי השם |
|
FS (חלקי) |
GAP (חלקי) - באמצעות ממשק ה-API של Native File System, ניתן לכתוב את הקובץ עם השם החדש באמצעות שילוב של FileSystemFileHandle.getFile() עבור השם החדש ו-FileSystemFileHandle.createWriter().write() עם התוכן של הקובץ הישן. לאחר מכן FileSystemDirectoryHandle.removeEntry() כדי למחוק את הקובץ הישן. |
אין ממשק API ישיר שיעשה זאת בשלב אחד ב-Native File System API. |
שאילתה |
|
GAP (חלקי) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (חלקי) - ניתן להשתמש ב-blob.type גם כדי לבדוק את סוג ה-MIME. לא ניתן לקבוע את סוג מערכת הקבצים, את זמן היצירה ואת זמן הגישה האחרונה באמצעות Native File System API. |
ReadDirectoryEntries |
|
FS (חלקי) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
window.requestFileSystem |
ב-JS API הן מתבצעות בשלב אחד |
פתיחה |
|
GAP |
window.requestFileSystem |
JS API מבצע את שתי הפעולות בשלב אחד |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
דוגמה |
|
SDL |
Gamepad.* |
אובייקט Gamepad חושף חותמת זמן ביחס ל-navigationStart. הוא מתעדכן כשמתקבלים נתונים מהחומרה https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
Canvas.getContext('2d') |
|
תיאור |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
גלילה |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (חלקי) – אפשר להטמיע את הפתרון הזה על ידי ציור הלוח על עצמו, עם הזזה, באמצעות drawImage, ולאחר מכן מילוי שאר החלקים. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
ישירה |
|
GAP |
אין ערך מקביל ישיר |
GAP (חלקי) -
תמיד יש סימון מרומז בסוף של קוד השרטוט; זה לא סביר
כדי לשנות את המצב. עם זאת, השילוב של OffscreenCanvas ו-ImageBitmapRenderingContext מספק פונקציונליות דומה. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (חלקי) - החשיפה של WebGL 2.0 ו-Emscripten ל-OpenGL ES 3.0 תומכות בפריימים מרובי דגימה שהוגדרו על ידי המשתמש, שבהם ניתן להגדיר את כל הפרמטרים שניתנים להגדרה באמצעות PPAPI. |
יצירה |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
אין ערך מקביל ישיר |
GAP (חלקי) – תמיד יש שטיפה משתמעת בסוף קוד הציור, וזה לא צפוי להשתנות. עם זאת, השילוב של OffscreenCanvas ו-ImageBitmapRenderingContext מספק פונקציונליות דומה. |
PPB_ImageData
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetNativeImageDataFormat |
|
SDL |
ImageData מחייב סדר RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData ייפוי כוח על סדר RGBA |
|
יצירה |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
תיאור |
|
SDL |
ImageData אף פעם לא זמין |
|
מפה |
|
SDL |
ImageData.data |
|
ביטול המיפוי |
|
SDL |
ImageData.data |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
RequestInputEvents |
|
SDL |
אין ערך מקביל ישיר |
סביר להניח שהיעדר התכונה הזו רלוונטי פחות, כי JS/Wasm פועלים בשרשור הראשי ואפשר לסנן אירועים בצורה זולה יותר בלי לבצע נסיעה הלוך ושוב בין תהליכים. |
RequestFilteringInputEvents |
|
SDL |
עכבר* מקש* גלגל* מגע* יצירה* אירועים |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
צאצאים של מחלקה של אירוע |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick' לעומת 'mousedown' אירועים |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode מכיל את המידע הזה, אבל הוא חלקי. |
דיון קיים לגבי הטמעת API שלwheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode מכיל את המידע הזה, אבל הוא חלקי. |
דיון קיים לגבי הטמעת API שלwheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (כדי להבין זאת בעצמך) |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - אין ערך מקביל ישיר |
אפשר לאחזר את הנתונים האלה מ-CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP – No direct equivalent |
|
GetTargetSegment |
|
GAP |
GAP - אין ערך מקביל ישיר |
|
GetSelection |
|
GAP |
GAP – No direct equivalent |
|
PPB_Instance
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
BindGraphics |
|
SDL |
Canvas.getContext (לא רלוונטי כי הקישור הוא אוטומטי). |
|
IsFullFrame |
|
GAP |
GAP - אין ערך מקביל לרכיבי handler של סוג mime. |
אפשר לרשום אפליקציות NaCl כדי לטפל בסוג mime מסוים ולהיות הבעלים של המסמך כולו. |
DidCreate |
|
לא רלוונטי |
<Element>[key] |
גישה כללית ל-DOM מאפשרת לכם להבין את מאפייני התגים |
DidDestroy |
|
לא רלוונטי |
לא רלוונטי |
לא הופעל עבור NaCl |
DidChangeView |
|
לא רלוונטי |
אירוע 'resize' של רכיב |
|
DidChangeFocus |
|
לא רלוונטי |
אירועים של רכיב 'focus', 'focusin', 'focusout' |
|
HandleDocumentLoad |
|
לא רלוונטי |
GAP - No way to register as a mime type handler |
ניתן להגדיר מודולים של NaCl דרך אפליקציות + רשומת מניפסט כדי לטפל בסוגים מסוימים של mime. |
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
הגדרה |
|
GAP |
getUserMedia() |
האילוצים מ-getUserMedia() יכולים לספק את ערכי התצורה לשימוש ב-MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - אין ערך מקביל |
|
RecycleBuffer |
|
GAP |
GAP – No equivalent |
|
סגירה |
|
GAP |
MediaStreamTrack.stop() |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
צילום קנבס |
התכונה Canvas Capture מאפשרת להוסיף פריימים של וידאו באופן פרוגרמטי. |
הגדרה |
|
GAP |
applyConstraints(), getUserMedia() |
פער (חלקי) – היקף ההגדרות שזמין ב-Web API עשוי להיות שונה מזה של PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP – לא מקביל ל-PP_MEDIASTREAMVIDEOActivity_ATTRIB_BUFFERED_FRAMES |
לא ניתן לטעון מראש את MediaStream, ולכן אף פעם לא תתבצע אחסון זמני: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP – אין מקביל ל-PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - אין ערך מקביל |
|
RecycleFrame |
|
GAP |
GAP – No equivalent |
|
סגירה |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - אין ערך מקביל |
|
PutFrame |
|
GAP |
GAP – No equivalent |
|
PPB_MessageLoop
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
GetForMainThread |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
GetCurrent |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
AttachToCurrentThread |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
ריצה |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
PostWork |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
PostQuit |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
PPB_Messaging
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
PostMessage |
|
לא רלוונטי |
Window.postMessage |
|
RegisterMessageHandler |
|
לא רלוונטי |
Window.addEventListener |
|
UnregisterMessageHandler |
|
לא רלוונטי |
Window.removeEventListener |
|
PPB_MouseCursor
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
SetCursor |
|
SDL |
Element.style.cursor |
יש תמיכה באותה קבוצה של סמלי הסמן של מניות.
ניתן להגדיר סמנים מותאמים אישית באמצעות כתובת URL(..).
אפשר להגדיר סמנים דינמיים בהתאמה אישית באמצעות מזהי URI של נתונים.
ב-CSS3 יש תמיכה בציון הנקודה לשיתוף אינטרנט. |
PPB_MouseLock
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
כמה שיטות |
|
OpenGLES |
פונקציונליות קרובה ל-WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
SetTextInputType |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
חלק מהמפתחים ירצו להיות מסוגלים לרמוז באופן הזה, או מעדיפים את היכולת ליירט ולהציג אירועים / פלט של IME בתוך אזור העריכה. |
UpdateCaretPosition |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
new XMLHttpRequest(); |
|
פתיחה |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - אין ערך מקביל של XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
האירוע 'progress' של XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
עדיין לא פורסמה להם מפרט או הטמעה. https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
האירוע 'progress' של XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
עדיין לא פורסמה להם מפרט או הטמעה. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
תגובת אחזור.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (התשובה היא גוף) |
|
FinishStreamingToFile |
|
embind |
GAP – No direct equivalent |
גם XMLHttpRequest וגם אחזור הנתונים מתבססים על העברה בסטרימינג לזיכרון, ולא ישירות באחסון. |
סגירה |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal ו-AbortController |
|
PPB_URLRequestInfo
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
XMLHttpRequest |
|
|
|
embind |
בקשת אחזור |
|
SetProperty |
|
GAP |
GAP - אין ערך מקביל ישיר ל-XMLHttpRequest |
XMLHttpRequest לא מספק דרכים ישירות למגבלה לכל בקשה באמצעות הפניות אוטומטיות, סטרימינג לקובץ, הגדרת מדיניות של גורם מפנה או פרטי כניסה. |
|
|
embind |
בקשה.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - לשתיהן צריך להיות את כל הגוף, ולא מקטעים. |
|
|
embind |
אחזור(.., options:body) |
|
AppendFileToBody |
|
GAP |
העלאה בסטרימינג של fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
לא רלוונטי |
<form> |
אפשר גם לקרוא באמצעות FileReader ולהעלות, אבל זה דומה יותר ל-AppendDataToBody |
PPB_URLResponseInfo
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + אחרים |
|
|
|
embind |
אחזור התגובה.* |
|
GetBodyAsFileRef |
|
embind |
תגובת אחזור (גוף) .blob() |
ההנחה היא ששכבת האחסון מבצעת אופטימיזציה של ההעברה. |
PPB_Var
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
לא רלוונטי |
לא רלוונטי |
|
VarToResource |
|
לא רלוונטי |
לא רלוונטי |
|
PPB_VarArray
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
קבל |
|
embind |
מערך[i] |
|
אפשר להתחיל? |
|
embind |
מערך[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
מפה |
|
GAP |
GAP – No direct equivalent |
מודולים של Asm.js / Wasm לא יכולים למפות אזורים של ArrayBuffer מלבד ערימת הזיכרון הלינארית הבודדת שלהם.
בעתיד, יכול להיות שאפשר יהיה לשפר את המצב באמצעות זיכרונות מרובים או מיפוי זיכרון. |
ביטול המיפוי |
|
GAP |
GAP – No direct equivalent |
|
PPB_VarDictionary
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
{} |
|
קבל |
|
embind |
<Object>[i] |
|
אפשר להתחיל? |
|
embind |
<Object>[i] = x |
|
מחיקה |
|
embind |
מחיקת <Object>[i] |
|
HasKey |
|
embind |
x ב-<Object> |
|
GetKeys |
|
embind |
עבור (k ב-<Object>) {} |
אין ערך מקביל מילולי, אבל אפשר ליצור אותו. |
PPB_VideoDecoder
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs באמצעות VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
התחלה |
|
GAP |
GAP - האם יטופלו עם ממשק ה-API המוצע של WebCodec באמצעות פרמטרים לאתחול VideoDecoder() (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. בעיצוב הנוכחי, התמונות יועברו אוטומטית למחזור והתהליך של פענוח הנתונים ימשיך. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
ישירה |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. ה-API יקרא ל-Flush(), אבל עדיין לא הוחלט איך הוא יתבצע ביחס לקריאות לפענוח. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
איפוס |
|
GAP |
GAP – הבעיה תטופל באמצעות ה-API המוצע של WebCodecs, על ידי השמדת המופע של VideoDecoder ויצירת מופע חדש. השיטה הזו לא תהיה יעילה כמו שיטת איפוס ייעודית, אבל עדיין מתוארת הסמנטיקה של איפוס API ל-אתחול. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (חלקי) – navigator.mediaCapabilities.encodingInfo() |
צריך לבדוק את הפרופילים הנתמכים אחד אחרי השני. |
הפעלה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות פרמטרים לאתחול VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP – No equivalent |
סביר להניח שמאגר המסגרות שמשמש באופן פנימי את Web Codecs API לא נחשף. |
GetFrameCodedSize |
|
GAP |
GAP – No equivalent |
לא סביר שמאגר הפריימים שמשמש באופן פנימי את Web Codecs API נחשף. |
GetVideoFrame |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs באמצעות ReadableStream.pipeThrough(VideoEncoder). הפעולה הזו תקודד ישירות את הנתונים בזרם הקריא במקום ללחוץ על פריים אחד שימלא בנתונים לפני הקידוד. |
|
קידוד |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. העיצוב הנוכחי יעבור אוטומטית דרך מאגר הנתונים הזמני המקודד שמעבירים בסטרימינג. |
נכון לעכשיו, WebCodecs API מניח שאפשר להעתיק את מאגר הביטים במקום להוסיף אותו למאגר, כך שלא יהיה צורך במחזור. |
RecycleBitstreamBuffer |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. העיצוב הנוכחי ממחזר באופן אוטומטי את מאגר הנתונים הזמני כדי שתהליך הקידוד ימשיך להתבצע. |
לא סביר להניח שזה ישתנה בעתיד, כי השלכות על הביצועים הן קטנות יותר. |
RequestEncodingParametersChange |
|
GAP |
GAP – הבעיה הזו תטופל באמצעות Web Codecs API המוצע. פרמטרים מסוימים ניתן לשנות בזמן אמת, ואחרים מחייבים ניתוק של המקודד. |
|
סגירה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות VideoEncoder.Close() |
|
PPB_VideoFrame
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetTimestamp |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
SetTimestamp |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetFormat |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
GetSize |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetDataBuffer |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetDataBufferSize |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
PPB_View
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
נשמר במסמך במקום ברכיב אחד בלבד. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetwidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
WebSocket.WebSocket |
|
התחברות |
|
GAP |
WebSocket.WebSocket(url, ...)
אירוע 'פתיחה' ב-WebSocket |
|
סגירה |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
'הודעה' של WebSocket האירוע
'שגיאה' של WebSocket האירוע
'סגירה' של WebSocket האירוע |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
Graphics3DContextLost |
|
SDL |
קנבס 'webglcontextlost' האירוע |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
DidCreate |
|
לא רלוונטי |
<Element>[key] |
גישה כללית ל-DOM מאפשרת לכם להבין את מאפייני התגים |
DidDestroy |
|
לא רלוונטי |
לא רלוונטי |
לא הופעל עבור NaCl |
DidChangeView |
|
לא רלוונטי |
אירוע 'resize' של רכיב |
|
DidChangeFocus |
|
לא רלוונטי |
אירועים של רכיב 'focus', 'focusin', 'focusout' |
|
HandleDocumentLoad |
|
לא רלוונטי |
GAP - אין דרך להירשם כ-handler של סוג MIME |
ניתן להגדיר מודולי NaCl דרך אפליקציות + רשומת מניפסט כדי לטפל בסוגים מסוימים של mime. |
PPP_MessageHandler
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleMessage |
|
embind |
MessagePort 'message' האירוע
'הודעה' בחלון האירוע |
|
HandleBlockingMessage |
|
לא רלוונטי |
GAP – No direct equivalent |
אפשר לבצע סנכרון דומה מחוץ ל-thread הראשי באמצעות Atomics.wait. התכונה הזו נוספה כדי לתמוך בהדמיה של ממשקי API של יישומי פלאגין סינכרוניים. |
PPP_Messaging
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleMessage |
|
embind |
אירוע 'message' של MessagePort
אירוע 'message' של Window |
|
PPP_MouseLock
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
MouseLockLost |
|
SDL |
הרכיב 'pointerlockchange', 'pointerlockerror' אירועים |
|
IRT
PPB_Audio
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
x |
SDL (חלקי) |
GAP (חלקי) – AudioWorkletNode ROUGHLY |
הבדיקה של AudioWorkletSpec הסתיימה, אבל AudioDeviceClient Client מתאים יותר ל-API הזה. ה- AudioDeviceClient עדיין בתהליך הוספה על ידי הקהילה. יכול להיות שה-worklet לא יהיה מקביל ל-API הזה. |
GetCurrentConfig |
|
SDL |
AudioContext.* (מקבלת בחזרה את ההגדרות שהועברו) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (פרמטר) |
מועברים בכל פעם במקום להיות מצורף למאגר הנתונים הזמני. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (פרמטר) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio משתמש רק בצף של 32 סיביות, PPAPI משתמש ב-int של 16 סיביות. |
PPAPI תומך באופן תיאורטי במספר גדלים של דגימה. בפועל, הוא תומך רק בדוגמאות של 16 ביט. לצערנו, המפתחים ביקשו גדלים של דגימות של 16 ביט כדי לחסוך בזיכרון. הגרסה הבאה של מפרט Web Audio תטמיע תמיכה בדוגמאות של 16 ביט. אפשר לבצע אופטימיזציה של AudioBuffer בדומה ל-Firefox באמצעות שימוש במאגר נתונים זמני של 16 ביט לאודיו שמקורו ב-decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
CreateStereo16Bit |
|
GAP |
GAP – יש תמיכה רק במדגמים של מספרים ממשיים (float) ב-32 ביט |
בגרסה הבאה של מפרט Web Audio תהיה תמיכה בקטעי אודיו של 16 ביט. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (ממבנה ברירת המחדל) |
כברירת מחדל, ל- AudioContext יהיה קצב דגימה מועדף שתואם לקצב הדגימה בפועל של התקן האודיו בחומרה. |
RecommendSampleFrameCount |
|
GAP |
GAP – הטיפול יתבצע באמצעות AudioDeviceClient המתוכנן |
יש בעיה פתוחה שמאפשר להשתמש בגודל שצוין על ידי משתמש, אבל הוא עדיין מוגדר. הדרך הטובה ביותר לעשות זאת היא להשתמש ב- AudioDeviceClient, כדי שתוכלו לדעת מה הגודל המתאים לחומרה הזו. |
PPB_Console
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יומן |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
ה-Play Console נחשב כהחלפה מלאה מספיק, אלא אם המפתחים העלו תרחישים ספציפיים לשימוש בפונקציונליות של LogWithSource. אפשר להשתמש במפות המקור של DevTools כדי לנפות באגים בקוד JavaScript שעבר טרנספייל בשפת המקור המקורית שלו. |
PPB_Core
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
אפשר ליצור סנכרון שווה ערך. |
PPB_FileIO
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
window.chooseFileSystemEntries() |
שימוש ביצירה ובפתיחה נעשה בצורה שונה, אבל הכוח של חלקיקים זהה. |
פתיחה |
|
FS (חלקי) |
window.chooseFileSystemEntries() |
|
שאילתה |
|
FS (חלקי) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.last modified |
GAP (חלקי) – אפשר להשתמש גם ב-Blob.type כדי לבדוק את סוג ה-MIME. לא ניתן לקבוע את סוג מערכת הקבצים, את זמן היצירה ואת זמן הגישה האחרונה באמצעות Native File System API. |
מגע |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
קריאה |
|
FS (חלקי) |
Blob.slice().arrayBuffer() |
|
כתיבה |
|
FS (חלקי) |
FileSystemWriter.write() |
|
SetLength |
|
FS (חלקי) |
FileSystemWriter.truncate() |
|
ישירה |
|
GAP (חלקי) |
GAP (חלקי) – הקבצים נמחקים כשמתבצעת קריאה ל-FileSystemWrite.close() |
זה תוכנן כך שקובצי Native File System API נחשפים למערכת ההפעלה, ולכן צריך לבצע בדיקת גלישה בטוחה לפני שהנתונים מוצגים למערכת ההפעלה. |
סגירה |
|
FS (חלקי) |
FileSystemWriter.close() |
לא מבטלת פעולות ממתינות, אך היא גורמת לכל הנתונים שנכתבו עד כה לדיסק. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() או Blob.arrayBuffer() |
מאפשרת קריאת כמה תת-טווח במקביל. |
PPB_FileRef
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (חלקי) |
FileSystem.type |
|
GetName |
|
FS (חלקי) |
File.name |
|
GetPath |
|
FS (חלקי) |
פער (חלקי) – באמצעות Native File System API, אפשר לקבוע את הנתיב היחסי של קובץ מהפניה לספרייה שמכילה את הקובץ באמצעות FileSystemHandle.resolve(FileSystemHandle) |
לא ניתן לקבוע את הנתיב המוחלט של קובץ, והמשתמש צריך להעניק הרשאה לגשת לספרייה שמכילה את הקובץ. |
GetParent |
|
FS (חלקי) |
GAP (חלקי) - באמצעות ממשק ה-API של Native File System (מערכת קבצים מקומית), ניתן לקבוע את הנתיב היחסי של קובץ מהפניה לספרייה שמכילה את הקובץ באמצעות FileSystemHandle.resolve(FileSystemHandle) |
המשתמש צריך להעניק הרשאה לגשת לספרייה שמכילה את הקובץ. |
MakeDirectory |
|
FS (חלקי) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
מגע |
|
FS (חלקי) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
אפשר לשנות את זמן השינוי על ידי כתיבת קוד. |
מחיקה |
|
FS (חלקי) |
FileSystemDirectoryHandle.removeEntry() |
בשונה מה-PPAPI, הספריות לא חייבות להיות ריקות. |
שינוי השם |
|
FS (חלקי) |
GAP (חלקי) - באמצעות ממשק ה-API של Native File System, ניתן לכתוב את הקובץ עם השם החדש באמצעות שילוב של FileSystemFileHandle.getFile() עבור השם החדש ו-FileSystemFileHandle.createWriter().write() עם התוכן של הקובץ הישן. לאחר מכן FileSystemDirectoryHandle.removeEntry() כדי למחוק את הקובץ הישן. |
אין ממשק API ישיר שיעשה זאת בשלב אחד ב-Native File System API. |
שאילתה |
|
GAP (חלקי) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (חלקי) - ניתן להשתמש ב-blob.type גם כדי לבדוק את סוג ה-MIME. לא ניתן לקבוע את סוג מערכת הקבצים, את זמן היצירה ואת זמן הגישה האחרונה באמצעות Native File System API. |
ReadDirectoryEntries |
|
FS (חלקי) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
FS (חלקי) |
window.requestFileSystem |
ב-JS API הן מתבצעות בשלב אחד |
פתיחה |
|
GAP |
window.requestFileSystem |
JS API מבצע את שתי הפעולות בשלב אחד |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
דוגמה |
|
SDL |
Gamepad.* |
אובייקט Gamepad חושף חותמת זמן ביחס ל-navigationStart. הוא מתעדכן כשמתקבלים נתונים מהחומרה https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
Canvas.getContext('2d') |
|
תיאור |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
גלילה |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (חלקי) – אפשר להטמיע את הפתרון הזה על ידי ציור הלוח על עצמו, עם הזזה, באמצעות drawImage, ולאחר מכן מילוי שאר החלקים. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
ישירה |
|
GAP |
אין ערך מקביל ישיר |
GAP (חלקי) -
תמיד יש סימון מרומז בסוף של קוד השרטוט; זה לא סביר
כדי לשנות את המצב. עם זאת, השילוב של OffscreenCanvas ו-ImageBitmapRenderingContext מספק פונקציונליות דומה. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (חלקי) - החשיפה של WebGL 2.0 ו-Emscripten ל-OpenGL ES 3.0 תומכות בפריימים מרובי דגימה שהוגדרו על ידי המשתמש, שבהם ניתן להגדיר את כל הפרמטרים שניתנים להגדרה באמצעות PPAPI. |
יצירה |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
אין ערך מקביל ישיר |
GAP (חלקי) -
תמיד יש סימון מרומז בסוף של קוד השרטוט; זה לא סביר
כדי לשנות את המצב. עם זאת, השילוב של OffscreenCanvas ו-ImageBitmapRenderingContext מספק פונקציונליות דומה. |
PPB_ImageData
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetNativeImageDataFormat |
|
SDL |
ImageData מחייב סדר RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData ייפוי כוח על סדר RGBA |
|
יצירה |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
תיאור |
|
SDL |
ImageData אף פעם לא זמין |
|
מפה |
|
SDL |
ImageData.data |
|
ביטול המיפוי |
|
SDL |
ImageData.data |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
RequestInputEvents |
|
SDL |
אין ערך מקביל ישיר |
סביר להניח שהיעדר התכונה הזו רלוונטי פחות, כי JS/Wasm פועלים בשרשור הראשי ואפשר לסנן אירועים בצורה זולה יותר בלי לבצע נסיעה הלוך ושוב בין תהליכים. |
RequestFilteringInputEvents |
|
SDL |
עכבר* מקש* גלגל* מגע* יצירה* אירועים |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
צאצאים של מחלקה של אירוע |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick' לעומת 'mousedown' אירועים |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode מכיל את המידע הזה, אבל הוא חלקי. |
דיון קיים לגבי הטמעת API שלwheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode מכיל את המידע הזה, אבל הוא חלקי. |
דיון קיים לגבי הטמעת API שלwheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (כדי להבין זאת בעצמך) |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - אין ערך מקביל ישיר |
אפשר לאחזר את הנתונים האלה מ-CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP – No direct equivalent |
|
GetTargetSegment |
|
GAP |
GAP - אין ערך מקביל ישיר |
|
GetSelection |
|
GAP |
GAP – No direct equivalent |
|
PPB_Instance
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
BindGraphics |
|
SDL |
Canvas.getContext (לא רלוונטי כי הקישור הוא אוטומטי). |
|
IsFullFrame |
|
GAP |
GAP - אין ערך מקביל לרכיבי handler של סוג mime. |
אפשר לרשום אפליקציות NaCl כדי לטפל בסוג mime מסוים ולהיות הבעלים של המסמך כולו. |
DidCreate |
|
לא רלוונטי |
<Element>[key] |
גישה כללית ל-DOM מאפשרת לכם להבין את מאפייני התגים |
DidDestroy |
|
לא רלוונטי |
לא רלוונטי |
לא הופעל עבור NaCl |
DidChangeView |
|
לא רלוונטי |
אירוע 'resize' של רכיב |
|
DidChangeFocus |
|
לא רלוונטי |
אירועים של רכיב 'focus', 'focusin', 'focusout' |
|
HandleDocumentLoad |
|
לא רלוונטי |
GAP - No way to register as a mime type handler |
ניתן להגדיר מודולים של NaCl דרך אפליקציות + רשומת מניפסט כדי לטפל בסוגים מסוימים של mime. |
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
הגדרה |
|
GAP |
getUserMedia() |
האילוצים מ-getUserMedia() יכולים לספק את ערכי התצורה לשימוש ב-MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - אין ערך מקביל |
|
RecycleBuffer |
|
GAP |
GAP – No equivalent |
|
סגירה |
|
GAP |
MediaStreamTrack.stop() |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
צילום קנבס |
התכונה Canvas Capture מאפשרת להוסיף פריימים של וידאו באופן פרוגרמטי. |
הגדרה |
|
GAP |
applyConstraints(), getUserMedia() |
פער (חלקי) – היקף ההגדרות שזמין ב-Web API עשוי להיות שונה מזה של PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP – לא מקביל ל-PP_MEDIASTREAMVIDEOActivity_ATTRIB_BUFFERED_FRAMES |
לא ניתן לטעון מראש את MediaStream, ולכן אף פעם לא תתבצע אחסון זמני: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP – אין מקביל ל-PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - אין ערך מקביל |
|
RecycleFrame |
|
GAP |
GAP – No equivalent |
|
סגירה |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - אין ערך מקביל |
|
PutFrame |
|
GAP |
GAP – No equivalent |
|
PPB_MessageLoop
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
GetForMainThread |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
GetCurrent |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
AttachToCurrentThread |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
ריצה |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
PostWork |
|
לא רלוונטי |
ברוב המקרים, לעובדים יש לולאת אירועים משתמעת. |
|
PostQuit |
|
לא רלוונטי |
לרוב, העובדים מקבלים לולאת אירועים מרומזת. |
|
PPB_Messaging
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
PostMessage |
|
לא רלוונטי |
Window.postMessage |
|
RegisterMessageHandler |
|
לא רלוונטי |
Window.addEventListener |
|
UnregisterMessageHandler |
|
לא רלוונטי |
Window.removeEventListener |
|
PPB_MouseCursor
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
SetCursor |
|
SDL |
Element.style.cursor |
יש תמיכה באותה קבוצה של סמלי הסמן של מניות.
ניתן להגדיר סמנים מותאמים אישית באמצעות כתובת URL(..).
אפשר להגדיר סמנים דינמיים בהתאמה אישית באמצעות מזהי URI של נתונים.
ב-CSS3 יש תמיכה בציון הנקודה לשיתוף אינטרנט. |
PPB_MouseLock
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
כמה שיטות |
|
OpenGLES |
פונקציונליות קרובה ל-WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
SetTextInputType |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
חלק מהמפתחים ירצו להיות מסוגלים לרמוז באופן הזה, או מעדיפים את היכולת ליירט ולהציג אירועים / פלט של IME בתוך אזור העריכה. |
UpdateCaretPosition |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – יכול להיות שיתמלא על ידי Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
new XMLHttpRequest(); |
|
פתיחה |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - אין ערך מקביל של XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
האירוע 'progress' של XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
עדיין לא פורסמה להם מפרט או הטמעה. https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
האירוע 'progress' של XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
עדיין לא פורסמה להם מפרט או הטמעה. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
תגובת אחזור.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (התשובה היא גוף) |
|
FinishStreamingToFile |
|
embind |
GAP – No direct equivalent |
גם XMLHttpRequest וגם אחזור הנתונים מתבססים על העברה בסטרימינג לזיכרון, ולא ישירות באחסון. |
סגירה |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal ו-AbortController |
|
PPB_URLRequestInfo
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
XMLHttpRequest |
|
|
|
embind |
בקשת אחזור |
|
SetProperty |
|
GAP |
GAP - אין ערך מקביל ישיר ל-XMLHttpRequest |
XMLHttpRequest לא מספק דרכים ישירות למגבלה לכל בקשה באמצעות הפניות אוטומטיות, סטרימינג לקובץ, הגדרת מדיניות של גורם מפנה או פרטי כניסה. |
|
|
embind |
בקשה.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - לשתיהן צריך להיות את כל הגוף, ולא מקטעים. |
|
|
embind |
אחזור(.., options:body) |
|
AppendFileToBody |
|
GAP |
העלאה בסטרימינג של fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
לא רלוונטי |
<form> |
אפשר גם לקרוא באמצעות FileReader ולהעלות, אבל זה דומה יותר ל-AppendDataToBody |
PPB_URLResponseInfo
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + אחרים |
|
|
|
embind |
אחזור התגובה.* |
|
GetBodyAsFileRef |
|
embind |
תגובת אחזור (גוף) .blob() |
ההנחה היא ששכבת האחסון מבצעת אופטימיזציה של ההעברה. |
PPB_Var
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
לא רלוונטי |
לא רלוונטי |
|
VarToResource |
|
לא רלוונטי |
לא רלוונטי |
|
PPB_VarArray
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
קבל |
|
embind |
מערך[i] |
|
אפשר להתחיל? |
|
embind |
מערך[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
מפה |
|
GAP |
GAP – No direct equivalent |
מודולים של Asm.js / Wasm לא יכולים למפות אזורים של ArrayBuffer מלבד ערימת הזיכרון הלינארית הבודדת שלהם.
בעתיד, יכול להיות שאפשר יהיה לשפר את המצב באמצעות זיכרונות מרובים או מיפוי זיכרון. |
ביטול המיפוי |
|
GAP |
GAP – No direct equivalent |
|
PPB_VarDictionary
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
embind |
{} |
|
קבל |
|
embind |
<Object>[i] |
|
אפשר להתחיל? |
|
embind |
<Object>[i] = x |
|
מחיקה |
|
embind |
מחיקת <Object>[i] |
|
HasKey |
|
embind |
x ב-<Object> |
|
GetKeys |
|
embind |
עבור (k ב-<Object>) {} |
אין ערך מקביל מילולי, אבל אפשר ליצור אותו. |
PPB_VideoDecoder
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs באמצעות VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
התחלה |
|
GAP |
GAP - האם יטופלו עם ממשק ה-API המוצע של WebCodec באמצעות פרמטרים לאתחול VideoDecoder() (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. בעיצוב הנוכחי, התמונות יועברו אוטומטית למחזור והתהליך של פענוח הנתונים ימשיך. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
ישירה |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. ה-API יקרא ל-Flush(), אבל עדיין לא הוחלט איך הוא יתבצע ביחס לקריאות לפענוח. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
איפוס |
|
GAP |
GAP – הבעיה תטופל באמצעות ה-API המוצע של WebCodecs, על ידי השמדת המופע של VideoDecoder ויצירת מופע חדש. השיטה הזו לא תהיה יעילה כמו שיטת איפוס ייעודית, אבל עדיין מתוארת הסמנטיקה של איפוס API ל-אתחול. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (חלקי) – navigator.mediaCapabilities.encodingInfo() |
צריך לבדוק את הפרופילים הנתמכים אחד אחרי השני. |
הפעלה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות פרמטרים לאתחול VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP – No equivalent |
סביר להניח שמאגר המסגרות שמשמש באופן פנימי את Web Codecs API לא נחשף. |
GetFrameCodedSize |
|
GAP |
GAP – No equivalent |
לא סביר שמאגר הפריימים שמשמש באופן פנימי את Web Codecs API נחשף. |
GetVideoFrame |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs באמצעות ReadableStream.pipeThrough(VideoEncoder). הפעולה הזו תקודד ישירות את הנתונים בזרם הקריא במקום ללחוץ על פריים אחד שימלא בנתונים לפני הקידוד. |
|
קידוד |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. העיצוב הנוכחי יעבור אוטומטית דרך מאגר הנתונים הזמני המקודד שמעבירים בסטרימינג. |
נכון לעכשיו, WebCodecs API מניח שאפשר להעתיק את מאגר הביטים במקום להוסיף אותו למאגר, כך שלא יהיה צורך במחזור. |
RecycleBitstreamBuffer |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. העיצוב הנוכחי ממחזר באופן אוטומטי את מאגר הנתונים הזמני כדי שתהליך הקידוד ימשיך להתבצע. |
לא סביר להניח שזה ישתנה בעתיד, כי השלכות על הביצועים הן קטנות יותר. |
RequestEncodingParametersChange |
|
GAP |
GAP – הבעיה הזו תטופל באמצעות Web Codecs API המוצע. פרמטרים מסוימים ניתן לשנות בזמן אמת, ואחרים מחייבים ניתוק של המקודד. |
|
סגירה |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec באמצעות VideoEncoder.Close() |
|
PPB_VideoFrame
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetTimestamp |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
SetTimestamp |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetFormat |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
GetSize |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetDataBuffer |
|
GAP |
GAP – הבעיה תטופל באמצעות ממשק ה-API המוצע של WebCodecs. |
|
GetDataBufferSize |
|
GAP |
GAP - יטופל עם ממשק ה-API המוצע של WebCodec. |
|
PPB_View
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
נשמר במסמך במקום ברכיב אחד בלבד. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetwidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
|
GAP |
WebSocket.WebSocket |
|
התחברות |
|
GAP |
WebSocket.WebSocket(url, ...)
אירוע 'פתיחה' ב-WebSocket |
|
סגירה |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
'הודעה' של WebSocket האירוע
'שגיאה' של WebSocket האירוע
'סגירה' של WebSocket האירוע |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
Graphics3DContextLost |
|
SDL |
קנבס 'webglcontextlost' האירוע |
|
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
DidCreate |
|
לא רלוונטי |
<Element>[key] |
גישה כללית ל-DOM מאפשרת לכם להבין את מאפייני התגים |
DidDestroy |
|
לא רלוונטי |
לא רלוונטי |
לא הופעל עבור NaCl |
DidChangeView |
|
לא רלוונטי |
אירוע 'resize' של רכיב |
|
DidChangeFocus |
|
לא רלוונטי |
אירועים של רכיב 'focus', 'focusin', 'focusout' |
|
HandleDocumentLoad |
|
לא רלוונטי |
GAP - אין דרך להירשם כ-handler של סוג MIME |
ניתן להגדיר מודולי NaCl דרך אפליקציות + רשומת מניפסט כדי לטפל בסוגים מסוימים של mime. |
PPP_MessageHandler
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleMessage |
|
embind |
MessagePort 'message' האירוע
'הודעה' בחלון האירוע |
|
HandleBlockingMessage |
|
לא רלוונטי |
GAP – No direct equivalent |
אפשר לבצע סנכרון דומה מחוץ ל-thread הראשי באמצעות Atomics.wait. התכונה הזו נוספה כדי לתמוך בהדמיה של ממשקי API של יישומי פלאגין סינכרוניים. |
PPP_Messaging
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
HandleMessage |
|
embind |
אירוע 'message' של MessagePort
אירוע 'message' של Window |
|
PPP_MouseLock
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
MouseLockLost |
|
SDL |
הרכיב 'pointerlockchange', 'pointerlockerror' אירועים |
|
PPAPI (אפליקציות)
PPB_HostResolver
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
לפתרון הבעיה |
x |
GAP |
GAP (partial) – No direct equivalent |
|
GetCanonicalName |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
GetNetAddressCount |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
GetNetAddress |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
PPB_NetAddress
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
CreateFromIPv4Address |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
CreateFromIPv6Address |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
GetFamily |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
DescribeAsString |
x |
GAP |
GAP (חלקי) - אין ערך מקביל ישיר |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (partial) – No direct equivalent |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (partial) – No direct equivalent |
|
PPB_NetworkList
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetCount |
x |
GAP |
GAP - אין ערך מקביל ישיר |
|
GetName |
x |
GAP |
GAP - אין ערך מקביל ישיר |
|
GetType |
x |
GAP |
GAP – No direct equivalent |
|
GetState |
x |
GAP |
GAP – No direct equivalent |
|
GetIpAddress |
x |
GAP |
GAP – No direct equivalent |
|
GetDisplayName |
x |
GAP |
GAP – No direct equivalent |
|
GetMTU |
x |
GAP |
GAP - אין ערך מקביל ישיר |
|
PPB_NetworkMonitor
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
יצירה |
x |
GAP |
GAP – No direct equivalent |
|
UpdateNetworkList |
x |
GAP |
GAP – No direct equivalent |
|
PPB_NetworkProxy
שיטת PPAPI |
מתבססת על ההנחה שהשרשורים |
Emscripten |
Web API |
הגבלות |
GetProxyForURL |
x |
GAP |
GAP – No direct equivalent |
|
PPB_TCPSocket ו-PPB_UDPSocket
אין מיפוי ישיר של 1:1 להעברה. במקום זאת,
בתרחישי המשתמש שבהמשך ומהו נתיב ההעברה המומלץ.
תרחיש לדוגמה |
המלצות |
שיתוף מסך |
getDisplayMedia ו-WebRTC (דמו)
|
טעינה מתוך
שרת מקומי כדי לצמצם את השימוש ברוחב פס |
XHR, Fetch, Streams, Service Worker, Cache API |
טעינה מתוך
מופע מקומי של אפליקציית אינטרנט / התחברות למופע מקומי של אפליקציית אינטרנט |
WebRTC |
צ'אט |
WebSocket*
|
תקשורת אודיו/וידאו בזמן אמת |
WebRTC |
שיתוף פעולה |
WebSocket*
|
פעילות בזמן אמת
משחקים רבי-משתתפים |
WebTransport**
אלא אם כן P2P במקרה כזה WebRTC (או
WebTransport באמצעות RTCIceTransport)
|
סטרימינג אינטראקטיבי בזמן אמת |
WebTransport**
|
תקשורת
עם שרת מדור קודם |
שרת proxy או תוכנה לעיבוד נתונים ביניים (middleware) כדי לבצע המרה של פרוטוקול. שליחת משוב אל
bit.ly/network-api-gaps
|
*: או WebTransport בעתיד
**: מידע על הזמינות אפשר למצוא ב-chromestatus