Ankündigungen zur Einstellung von (P)NaCl
Angesichts der Entwicklung von browserübergreifendem WebAssembly-Support möchten wir uns darauf konzentrieren,
für WebAssembly entwickelt. Wir planen, die Unterstützung für
PNaCl im 4. Quartal 2019 (außer Chrome-Apps) Wir sind der Meinung, dass das dynamische WebAssembly-Ökosystem es besser für neue und bestehende leistungsstarke Web-Apps geeignet macht und dass die Nutzung von PNaCl so gering ist, dass eine Einstellung gerechtfertigt ist.
Ab Chrome 76 ist PNaCl im offenen Web nur noch über einen Ursprungstest verfügbar. Webentwickler können sich damit registrieren und Zugriff auf eine Funktion erhalten, die standardmäßig nicht aktiviert ist.
In der Regel handelt es sich hierbei um eine neu vorgeschlagene Funktion, die in diesem Fall jedoch nicht mehr unterstützt wird.
Entwickler können sich in der Origin Trial Console registrieren und ein Token erhalten, das in eine Seite eingebettet werden kann. Dadurch wird die Funktion aktiviert, ohne dass der Nutzer ein Flag verwenden muss.
Weitere Informationen finden Sie in der verlinkten Anleitung. Der Testzeitraum läuft ungefähr bis Dezember 2019 und läuft bis Chrome 78.
Diese Änderung soll sich nicht auf NaCl oder PNaCl in Chrome-Apps oder ‑Erweiterungen auswirken. Mit dem Flag „enable-nacl“ unter chrome://flags kann PNaCl auch lokal für Tests aktiviert werden. Dieses Flag behält auch seine aktuelle Funktion bei, mit der „native“ NaCl ohne PNaCl auf jeder Seite aktiviert wird.
Außerdem haben wir kürzlich angekündigt, dass
Chrome-Apps
außerhalb von ChromeOS.
Für die meisten (P)NaCl-Anwendungsfälle empfehlen wir die Umstellung vom NaCl SDK auf Emscripten.
Die Migration ist wahrscheinlich relativ einfach.
falls Ihre Anwendung zu Linux portierbar ist, verwendet
SDL- oder POSIX-APIs.
Eine direkte Unterstützung für NaCl-/Pepper-APIs ist nicht verfügbar. Wir haben jedoch versucht, Web API-Äquivalente aufzulisten.
Bei schwierigeren Migrationsfällen wenden Sie sich bitte unter native-client-discuss@googlegroups.com an uns.
API-Migration
Hier finden Sie den Status der Webplattform-Ersatzoptionen für jede der APIs, die (P)NaCl verwenden.
Außerdem enthält die Tabelle die Bibliothek oder die Option in Emscripten.
das den nächsten Ersatz bietet.
Wir gehen davon aus, dass wir WebAssembly 2017 die Unterstützung für Threads mit gemeinsam genutztem Arbeitsspeicher hinzufügen werden, da Threads für die interessantesten Anwendungsfälle von (P)NaCl entscheidend sind. Migrationselemente, die davon ausgehen, dass zukünftige Threads unterstützt werden, sind unten gekennzeichnet. Wenn die Ablaufsteuerung Ihrer Anwendung stark auf blockierende APIs angewiesen ist, ist möglicherweise auch die Unterstützung von Threads für eine einfache Portierung erforderlich.
Wir haben zwar versucht,
die Daten in dieser Tabelle möglichst genau
gibt es keine Zweifel an Fehlern oder Auslassungen.
Wenn Sie Probleme feststellen, wenden Sie sich bitte unter native-client-discuss@googlegroups.com an uns.
PPAPI
PPB_Audio
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
x |
SDL (teilweise) |
GAP (teilweise) – ungefährer AudioWorkletNode-Äquivalent |
Die AudioWorkletSpec ist fertig, aber AudioDeviceClient ist für diese API möglicherweise besser geeignet. Der AudioDeviceClient wird noch von der Community angegeben. Das Worklet ist möglicherweise nicht der ungefähre Equivalent für diese API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (gibt übergebene Einstellungen zurück) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (Parameter) |
Sie werden jedes Mal übergeben, anstatt an den Puffer angehängt zu werden. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (Parameter) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio verwendet nur 32-Bit-Float, PPAPI 16-Bit-Int. |
PPAPI unterstützt theoretisch mehrere Stichprobengrößen. In der Praxis werden nur 16-Bit-Samples unterstützt. Leider haben Entwickler 16-Bit-Stichprobengrößen angefordert, um Speichernutzung zu sparen. Die nächste Version der Web Audio-Spezifikation wird die Unterstützung für 16-Bit-Samples implementieren. Eine Optimierung für AudioBuffer könnte ähnlich wie bei Firefox implementiert werden, indem ein 16-Bit-Puffer für Audioelemente verwendet wird, die von decodeAudioData stammen. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
CreateStereo16Bit |
|
GAP |
GAP - Nur 32-Bit-Float-Samples werden unterstützt |
In der nächsten Version der Web Audio-Spezifikation werden 16-Bit-Samples unterstützt. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (aus dem Standardkonstrukt) |
Eine AudioContext hat standardmäßig die bevorzugte Abtastrate, die der tatsächlichen Abtastrate des Hardware-Audiogeräts entspricht. |
RecommendSampleFrameCount |
|
GAP |
Lücke – wird mit dem geplanten AudioDeviceClient behandelt |
Beim Zulassen einer benutzerdefinierten Größe gibt es ein offenes Problem, das aber noch definiert wird. Dies lässt sich am besten mit AudioDeviceClient handhaben, da er Ihnen die entsprechende Größe für die jeweilige Hardware mitteilen kann. |
PPB_Console
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Die Console API gilt als ausreichender Ersatz, es sei denn, Entwickler haben bestimmte Anwendungsfälle für die von LogWithSource bereitgestellten Funktionen. Mithilfe von Quellzuordnungen in den Entwicklertools können Sie transpilierten JavaScript-Code in der ursprünglichen Quellsprache debuggen. |
PPB_Core
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefiniert |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Eine entsprechende Synchronisierung kann erstellt werden. |
PPB_FileIO
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FV (teilweise) |
window.chooseFileSystemEntries() |
„Erstellen“ und „Öffnen“ werden unterschiedlich verwendet, haben aber dieselbe Bedeutung. |
Öffnen |
|
FS (teilweise) |
window.chooseFileSystemEntries() |
|
Abfrage |
|
FS (teilweise) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
Lücke (teilweise) – Mit „Blob.type“ kann auch der MIME-Typ geprüft werden. Der Dateisystemtyp, die Erstellungszeit und die letzte Zugriffszeit können mit der Native File System API nicht ermittelt werden. |
Berührung |
|
FV (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Lesen |
|
FV (teilweise) |
Blob.slice().arrayBuffer() |
|
Schreiben |
|
FV (teilweise) |
FileSystemWriter.write() |
|
SetLength |
|
FS (teilweise) |
FileSystemWriter.truncate() |
|
Leeren |
|
GAP (teilweise) |
Lücke (teilweise) – Dateien werden geleert, wenn FileSystemWrite.close() aufgerufen wird |
Dies ist beabsichtigt, da die Dateien der Native File System API dem Betriebssystem zugänglich gemacht werden. Daher muss eine Safe Browsing-Prüfung durchgeführt werden, bevor dem Betriebssystem Daten angezeigt werden. |
Schließen |
|
FS (teilweise) |
FileSystemWriter.close() |
Bricht ausstehende Vorgänge nicht ab, löscht aber alle bisher auf das Laufwerk geschriebenen Daten. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() oder Blob.arrayBuffer() |
Ermöglicht mehrere Lesevorgänge für Unterbereiche gleichzeitig. |
PPB_FileRef
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FS (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (teilweise) |
FileSystem.type |
|
GetName |
|
FV (teilweise) |
File.name |
|
GetPath |
|
FS (teilweise) |
Lücke (teilweise) – Mit der Native File System API kann der relative Pfad einer Datei anhand einer Referenz auf ein Verzeichnis, das die Datei enthält, mit FileSystemHandle.resolve(FileSystemHandle) ermittelt werden. |
Der absolute Pfad einer Datei kann nicht ermittelt werden und der Nutzer muss die Berechtigung für den Zugriff auf das Verzeichnis mit der Datei erteilen. |
GetParent |
|
FS (teilweise) |
GAP (teilweise) - Mit der Native File System API kann der relative Pfad einer Datei mithilfe von FileSystemHandle.resolve(FileSystemHandle) aus einem Verweis auf ein Verzeichnis ermittelt werden, das die Datei enthält. |
Der Nutzer muss Zugriff auf das Verzeichnis mit der Datei gewähren. |
MakeDirectory |
|
FS (teilweise) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Berührung |
|
FV (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Die Änderungszeit kann durch Schreiben verschoben werden. |
Löschen |
|
FV (teilweise) |
FileSystemDirectoryHandle.removeEntry() |
Im Gegensatz zur PPAPI müssen Verzeichnisse nicht leer sein. |
Umbenennen |
|
FS (teilweise) |
GAP (teilweise) - Mit der Native File System API kann die Datei mit dem neuen Namen geschrieben werden, indem eine Kombination aus FileSystemFileHandle.getFile() für den neuen Namen und FileSystemFileHandle.createWriter().write() mit dem Inhalt der alten Datei verwendet wird. Verwenden Sie dann FileSystemDirectoryHandle.removeEntry(), um die alte Datei zu löschen. |
In der Native File System API gibt es keine direkte API, für die dies in einem Schritt erledigt wird. |
Abfrage |
|
GAP (teilweise) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (teilweise): Blob.type kann auch zur Überprüfung des MIME-Typs verwendet werden. Der Dateisystemtyp, die Erstellungszeit und die letzte Zugriffszeit können mit der Native File System API nicht ermittelt werden. |
ReadDirectoryEntries |
|
FV (teilweise) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FV (teilweise) |
window.requestFileSystem |
JS API ermöglicht beides in einem Schritt |
Öffnen |
|
GAP |
window.requestFileSystem |
JS API führt beides in einem Schritt aus |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Beispiel |
|
SDL |
Gamepad.* |
Das Gamepad-Objekt stellt einen Zeitstempel in Bezug auf „navigationStart“ bereit. Es wird aktualisiert, wenn Daten von der Hardware empfangen werden: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
Canvas.getContext('2d') |
|
Beschreiben |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scrollen |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
Lücke (teilweise) – Kann implementiert werden, indem die Leinwand mit einem Versatz mit drawImage auf sich selbst gezeichnet und dann der Rest ausgefüllt wird. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Leeren |
|
GAP |
Keine direkte Entsprechung |
GAP (teilweise) -
Es gibt immer einen impliziten Leerung am Ende des Zeichencodes. Das ist unwahrscheinlich
ändern können. Die Kombination aus
OffscreenCanvas
und
ImageBitmapRenderingContext
ähnliche Funktionen. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
Lücke (teilweise) – WebGL 2.0 und die OpenGL ES 3.0-API von Emscripten unterstützen benutzerdefinierte Multisample-Framebuffer, in denen alle über PPAPI konfigurierbaren Parameter festgelegt werden können. |
Erstellen |
|
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 |
Keine direkte Entsprechung |
Lücke (teilweise) – Am Ende des Zeichencodes erfolgt immer eine implizite Flush-Operation. Das wird sich wahrscheinlich nicht ändern. Die Kombination aus
OffscreenCanvas
und
ImageBitmapRenderingContext
ähnliche Funktionen. |
PPB_ImageData
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetNativeImageDataFormat |
|
SDL |
ImageData erfordert die RGBA-Reihenfolge |
|
IsImageDataFormatSupported |
|
SDL |
ImageData erfordert die RGBA-Reihenfolge |
|
Erstellen |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Beschreiben |
|
SDL |
ImageData hat nie einen Schritt. |
|
Karte |
|
SDL |
ImageData.data |
|
Zuordnung aufheben |
|
SDL |
ImageData.data |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
RequestInputEvents |
|
SDL |
Keine direkte Entsprechung |
Das Fehlen dieser Funktion ist wahrscheinlich weniger relevant, da JS / Wasm im Hauptthread ausgeführt wird und Ereignisse kostengünstiger filtern kann, ohne einen prozessübergreifenden Umlauf zu verursachen. |
RequestFilteringInputEvents |
|
SDL |
Maus* Taste* Rad* Touch* Komposition* Ereignisse |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Nachkommen der Ereignisklasse |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
„dblclick“ und „mousedown“ |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode enthält diese Informationen, aber unvollständig. |
Die Implementierung einer WheelEvent.deltaMode API wird unter https://github.com/w3c/uievents/issues/181#issuecomment-537811017 diskutiert. |
GetScrollByPage |
|
GAP |
GAP - deltaMode enthält diese Informationen, aber unvollständig. |
Es gibt eine Diskussion zur Implementierung einer WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.Einzug (um dies selbst zu ermitteln) |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Kein direktes Äquivalent |
Diese Daten können potenziell aus CompositionEvent.data abgerufen werden. |
GetSegmentOffset |
|
GAP |
GAP - Kein direktes Äquivalent |
|
GetTargetSegment |
|
GAP |
GAP - Kein direktes Äquivalent |
|
GetSelection |
|
GAP |
Lücke – kein direktes Äquivalent |
|
PPB_Instance
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
BindGraphics |
|
SDL |
Canvas.getContext (angegeben, da die Bindung automatisch erfolgt). |
|
IsFullFrame |
|
GAP |
GAP - Kein Äquivalent zu MIME-Typ-Handlern. |
NaCl-Apps können so registriert werden, dass sie einen bestimmten MIME-Typ verarbeiten und Eigentümer des gesamten Dokuments sind. |
DidCreate |
|
– |
<Element>[key] |
Mit allgemeinem DOM-Zugriff können Sie Tag-Attribute abrufen |
DidDestroy |
|
– |
– |
Nicht für NaCl ausgelöst |
DidChangeView |
|
– |
Ereignis „Element 'resize'“ |
|
DidChangeFocus |
|
– |
Element-Ereignisse „focus“, „focusin“ und „focusout“ |
|
HandleDocumentLoad |
|
– |
GAP - No way to register as a mime type handler |
NaCl-Module über Apps und ein Manifesteintrag können für bestimmte MIME-Typen eingerichtet werden. |
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Konfigurieren |
|
GAP |
getUserMedia() |
Die Einschränkungen von getUserMedia() können die Konfigurationswerte für MediaStreamTrack liefern. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP – kein Äquivalent |
|
RecycleBuffer |
|
GAP |
GAP - Kein Äquivalent |
|
Schließen |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Leinwandaufnahme |
Mit Canvas Capture können Videoframes programmatisch eingefügt werden. |
Konfigurieren |
|
GAP |
applyConstraints(), getUserMedia() |
Lücke (teilweise) – Die Anzahl der Konfigurationen, die in der Web API verfügbar sind, kann von der PPAPI abweichen. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
Lücke – kein Äquivalent zu PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream kann nicht vorab geladen werden und wird daher nie gepuffert: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
Lücke – kein Äquivalent zu PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Kein Äquivalent |
|
RecycleFrame |
|
GAP |
GAP - Kein Äquivalent |
|
Schließen |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP – kein Äquivalent |
|
PutFrame |
|
GAP |
GAP - Kein Äquivalent |
|
PPB_MessageLoop
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
– |
Im Grunde genommen unerheblich, da Worker eine implizite Ereignisschleife erhalten. |
|
GetForMainThread |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
GetCurrent |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
AttachToCurrentThread |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
Ausführen |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
PostWork |
|
– |
Im Grunde genommen unerheblich, da Worker eine implizite Ereignisschleife erhalten. |
|
PostQuit |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
PPB_Messaging
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
PostMessage |
|
– |
Window.postMessage |
|
RegisterMessageHandler |
|
– |
window.addEventListener |
|
UnregisterMessageHandler |
|
– |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
SetCursor |
|
SDL |
Element.style.cursor |
Es werden dieselben Standardcursor unterstützt.
Benutzerdefinierte Cursor können mit url(..) erstellt werden.
Dynamische benutzerdefinierte Cursor können mit Daten-URIs verwendet werden.
CSS3 unterstützt die Angabe des Hotspots. |
PPB_MouseLock
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Verschiedene Methoden |
|
OpenGLES |
Funktionalität von WebGL 1.0 ähnlich. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
SetTextInputType |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
Einige Entwickler möchten entweder auf diese Weise Hinweise geben oder vorzugsweise IME-Ereignisse/-Ausgaben inline in einem Canvas abfangen und anzeigen. |
UpdateCaretPosition |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
new XMLHttpRequest() |
|
Öffnen |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Kein XMLHTTPRequest-Äquivalent |
|
GetUploadProgress |
|
embind |
XMLHttpRequest-Ereignis „progress“ |
|
|
|
GAP |
FetchObserver |
Noch nicht spezifiziert oder implementiert; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest-Ereignis „progress“ |
|
|
|
GAP |
FetchObserver |
Noch nicht spezifiziert oder implementiert; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Antwort abrufen.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Text.* (Antwort ist ein Text) |
|
FinishStreamingToFile |
|
embind |
GAP - Kein direktes Äquivalent |
XMLHttpRequest und Fetch gehen davon aus, dass das Streaming in den Arbeitsspeicher und nicht direkt in einen Speicher erfolgt. |
Schließen |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal und AbortController |
|
PPB_URLRequestInfo
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Abrufanfrage |
|
SetProperty |
|
GAP |
GAP - Kein direktes Äquivalent für XMLHttpRequest |
XMLHttpRequest bietet keine direkten Möglichkeiten, um Begrenzungen auf Anfragen basierend auf Weiterleitungen zu beschränken, in eine Datei zu streamen oder eine Verweis-URL oder Richtlinie für Anmeldedaten festzulegen. |
|
|
embind |
Anfrage.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - Beide müssen den ganzen Körper haben, nicht nur einen Teil. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
fetch()-Upload-Streaming |
https://www.chromestatus.com/features/5274139738767360 |
|
|
– |
<form> |
Sie können auch mit FileReader lesen und hochladen, aber das entspricht eher AppendDataToBody |
PPB_URLResponseInfo
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders und andere |
|
|
|
embind |
Antwort abrufen.* |
|
GetBodyAsFileRef |
|
embind |
Fetch Response (Body) .blob() |
Es wird davon ausgegangen, dass die Speicherschicht die Übertragung optimiert. |
PPB_Var
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
– |
– |
|
VarToResource |
|
– |
– |
|
PPB_VarArray
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Get |
|
embind |
Matrix[i] |
|
Fertig |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Karte |
|
GAP |
GAP - Kein direktes Äquivalent |
Asm.js-/Wasm-Module können Regionen eines ArrayBuffers nur ihrem einzelnen linearen Speicher-Heap zuordnen.
Die zukünftige Zuordnung mehrerer Erinnerungen oder die Zuordnung von Arbeitsspeicherdaten könnten dies verbessern. |
Zuordnung aufheben |
|
GAP |
GAP - Kein direktes Äquivalent |
|
PPB_VarDictionary
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Fertig |
|
embind |
<Objekt>[i] = x |
|
Löschen |
|
embind |
<Object>[i] löschen |
|
HasKey |
|
embind |
x in <Object> |
|
GetKeys |
|
embind |
für (k in <Object>) {} |
Keine wörtliche Entsprechung, kann aber erstellt werden. |
PPB_VideoDecoder
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API mit VideoDecoder() verarbeitet |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Initialisieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mithilfe der Initialisierungsparameter von VideoDecoder() (VideoDecoderInitParameters) verarbeitet. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP – Wird mit der vorgeschlagenen WebCodecs API unter Verwendung von ReadableStream.pipeThrough(VideoDecoder) verarbeitet. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) verarbeitet |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API behandelt. Beim aktuellen Design werden die Bilder automatisch recycelt und die Decodierung wird fortgesetzt. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Leeren |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API behandelt. Die API wird als Flush() aufgerufen. Es wird jedoch noch diskutiert, wie sie in Bezug auf Dekodierungsaufrufe sequenziert wird. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Zurücksetzen |
|
GAP |
GAP: Wird mit dem vorgeschlagenen WebCodecs-API verarbeitet, indem die VideoDecoder-Instanz zerstört und eine neue erstellt wird. Das ist nicht so effizient wie eine spezielle Zurücksetzungsmethode, aber die Semantik für eine Reset() API wird noch diskutiert. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit VideoEncoder() verarbeitet |
|
GetSupportedProfiles |
|
GAP |
GAP (teilweise) – navigator.mediaCapabilities.encodingInfo() |
Die unterstützten Profile müssen einzeln aktiviert werden. |
Initialisieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit den Initialisierungsparametern von VideoEncoder() verarbeitet |
|
GetFramesRequired |
|
GAP |
GAP – kein Äquivalent |
Es ist unwahrscheinlich, dass der von der Web Codecs API intern verwendete Frame-Pool freigegeben wird. |
GetFrameCodedSize |
|
GAP |
GAP – kein Äquivalent |
Es ist unwahrscheinlich, dass der Frame-Pool, der intern von der Web Codecs API verwendet wird, freigegeben wird. |
GetVideoFrame |
|
GAP |
GAP: Wird mit dem vorgeschlagenen WebCodecs-API über ReadableStream.pipeThrough(VideoEncoder) verarbeitet. Dadurch werden die Daten direkt im lesbaren Stream codiert, anstatt vor der Codierung einen einzelnen Frame zu erfassen, der mit Daten gefüllt wird. |
|
Codieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit ReadableStream.pipeThrough(VideoEncoder) verarbeitet |
|
GetBitstreamBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. Das aktuelle Design durchläuft automatisch den codierten Bitstream-Zwischenspeicher, durch den geleitet wird. |
Das WebCodecs-API geht derzeit davon aus, dass der Bitstream-Zwischenspeicher kopiert und nicht in einem Pool zusammengefasst werden kann. Daher muss er nicht wiederverwendet werden. |
RecycleBitstreamBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. Beim aktuellen Design wird der Puffer automatisch wiederverwendet, um den Codierungsprozess fortzusetzen. |
Da die Auswirkungen auf die Leistung kleiner sind, wird sich das in Zukunft voraussichtlich nicht ändern. |
RequestEncodingParametersChange |
|
GAP |
GAP – Wird von der vorgeschlagenen Web Codecs API verarbeitet. Bestimmte Parameter können spontan geändert werden, bei anderen muss der Encoder deaktiviert werden. |
|
Schließen |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API über VideoEncoder.Close() verarbeitet |
|
PPB_VideoFrame
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetTimestamp |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API verarbeitet. |
|
SetTimestamp |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetFormat |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API verarbeitet. |
|
GetSize |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetDataBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetDataBufferSize |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
PPB_View
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Bezieht sich auf das Dokument und nicht nur auf ein einzelnes Element. |
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-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
WebSocket.WebSocket |
|
Verbinden |
|
GAP |
WebSocket.WebSocket(URL, ...)
WebSocket "offen" Ereignis |
|
Schließen |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket-Ereignis „message“
WebSocket-Ereignis „error“
WebSocket-Ereignis „close“ |
|
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-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Graphics3DContextLost |
|
SDL |
Canvas-Ereignis „webglcontextlost“ |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
DidCreate |
|
– |
<Element>[key] |
Mit allgemeinem DOM-Zugriff können Sie Tag-Attribute abrufen |
DidDestroy |
|
– |
– |
Nicht für NaCl ausgelöst |
DidChangeView |
|
– |
Ereignis „Element 'resize'“ |
|
DidChangeFocus |
|
– |
Element-Ereignisse „focus“, „focusin“ und „focusout“ |
|
HandleDocumentLoad |
|
– |
GAP - Keine Möglichkeit zur Registrierung als MIME-Typ-Handler |
NaCl-Module können über Apps und einen Manifesteintrag so eingerichtet werden, dass sie bestimmte MIME-Typen verarbeiten. |
PPP_MessageHandler
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleMessage |
|
embind |
MessagePort-Ereignis „message“
Window-Ereignis „message“ |
|
HandleBlockingMessage |
|
– |
GAP - Kein direktes Äquivalent |
Eine ähnliche Synchronisierung kann mit Atomics.wait außerhalb des Hauptthreads erfolgen. Dies wurde hinzugefügt, um die Emulation synchroner Plug-in-APIs zu unterstützen. |
PPP_Messaging
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleMessage |
|
embind |
MessagePort „message“ Ereignis
Fenster "Nachricht" Ereignis |
|
PPP_MouseLock
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
MouseLockLost |
|
SDL |
Element „pointerlockchange“, „pointerlockerror“ Veranstaltungen |
|
IRT
PPB_Audio
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
x |
SDL (teilweise) |
GAP (teilweise) – ungefährer AudioWorkletNode-Äquivalent |
Die AudioWorkletSpec ist fertig, aber AudioDeviceClient ist für diese API möglicherweise besser geeignet. Der AudioDeviceClient wird noch von der Community angegeben. Das Worklet ist möglicherweise nicht der ungefähre Equivalent für diese API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (gibt übergebene Einstellungen zurück) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (Parameter) |
Sie werden jedes Mal übergeben, anstatt an den Puffer angehängt zu werden. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (Parameter) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio verwendet nur 32-Bit-Float, PPAPI 16-Bit-Int. |
PPAPI unterstützt theoretisch mehrere Stichprobengrößen. In der Praxis werden nur 16-Bit-Samples unterstützt. Leider haben Entwickler 16-Bit-Stichprobengrößen angefordert, um Speichernutzung zu sparen. Die nächste Version der Web Audio-Spezifikation wird die Unterstützung für 16-Bit-Samples implementieren. Eine Optimierung für AudioBuffer könnte ähnlich wie bei Firefox implementiert werden, indem ein 16-Bit-Puffer für Audioelemente verwendet wird, die von decodeAudioData stammen. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
CreateStereo16Bit |
|
GAP |
GAP - Nur 32-Bit-Float-Samples werden unterstützt |
In der nächsten Version der Web Audio-Spezifikation werden 16-Bit-Samples unterstützt. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (aus dem Standardkonstrukt) |
Eine AudioContext hat standardmäßig die bevorzugte Abtastrate, die der tatsächlichen Abtastrate des Hardware-Audiogeräts entspricht. |
RecommendSampleFrameCount |
|
GAP |
Lücke – wird mit dem geplanten AudioDeviceClient behandelt |
Beim Zulassen einer benutzerdefinierten Größe gibt es ein offenes Problem, das aber noch definiert wird. Dies lässt sich am besten mit AudioDeviceClient handhaben, da er Ihnen die entsprechende Größe für die jeweilige Hardware mitteilen kann. |
PPB_Console
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Die Console API gilt als ausreichender Ersatz, es sei denn, Entwickler haben bestimmte Anwendungsfälle für die von LogWithSource bereitgestellten Funktionen. Mithilfe von Quellzuordnungen in den Entwicklertools können Sie transpilierten JavaScript-Code in der ursprünglichen Quellsprache debuggen. |
PPB_Core
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefiniert |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Eine entsprechende Synchronisierung kann erstellt werden. |
PPB_FileIO
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FV (teilweise) |
window.chooseFileSystemEntries() |
„Erstellen“ und „Öffnen“ werden unterschiedlich verwendet, haben aber dieselbe Bedeutung. |
Öffnen |
|
FS (teilweise) |
window.chooseFileSystemEntries() |
|
Abfrage |
|
FS (teilweise) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
Lücke (teilweise) – Mit „Blob.type“ kann auch der MIME-Typ geprüft werden. Der Dateisystemtyp, die Erstellungszeit und die letzte Zugriffszeit können mit der Native File System API nicht ermittelt werden. |
Berührung |
|
FV (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Lesen |
|
FV (teilweise) |
Blob.slice().arrayBuffer() |
|
Schreiben |
|
FV (teilweise) |
FileSystemWriter.write() |
|
SetLength |
|
FS (teilweise) |
FileSystemWriter.truncate() |
|
Leeren |
|
GAP (teilweise) |
Lücke (teilweise) – Dateien werden geleert, wenn FileSystemWrite.close() aufgerufen wird |
Dies ist beabsichtigt, da die Dateien der Native File System API dem Betriebssystem zugänglich gemacht werden. Daher muss eine Safe Browsing-Prüfung durchgeführt werden, bevor dem Betriebssystem Daten angezeigt werden. |
Schließen |
|
FS (teilweise) |
FileSystemWriter.close() |
Bricht ausstehende Vorgänge nicht ab, löscht aber alle bisher auf das Laufwerk geschriebenen Daten. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() oder Blob.arrayBuffer() |
Ermöglicht mehrere Lesevorgänge für Unterbereiche gleichzeitig. |
PPB_FileRef
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FS (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (teilweise) |
FileSystem.type |
|
GetName |
|
FV (teilweise) |
File.name |
|
GetPath |
|
FS (teilweise) |
Lücke (teilweise) – Mit der Native File System API kann der relative Pfad einer Datei anhand einer Referenz auf ein Verzeichnis, das die Datei enthält, mit FileSystemHandle.resolve(FileSystemHandle) ermittelt werden. |
Der absolute Pfad einer Datei kann nicht ermittelt werden und der Nutzer muss die Berechtigung für den Zugriff auf das Verzeichnis mit der Datei erteilen. |
GetParent |
|
FS (teilweise) |
GAP (teilweise) - Mit der Native File System API kann der relative Pfad einer Datei mithilfe von FileSystemHandle.resolve(FileSystemHandle) aus einem Verweis auf ein Verzeichnis ermittelt werden, das die Datei enthält. |
Der Nutzer muss Zugriff auf das Verzeichnis mit der Datei gewähren. |
MakeDirectory |
|
FS (teilweise) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Berührung |
|
FV (teilweise) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Die Änderungszeit kann durch Schreiben verschoben werden. |
Löschen |
|
FV (teilweise) |
FileSystemDirectoryHandle.removeEntry() |
Im Gegensatz zur PPAPI müssen Verzeichnisse nicht leer sein. |
Umbenennen |
|
FS (teilweise) |
GAP (teilweise) - Mit der Native File System API kann die Datei mit dem neuen Namen geschrieben werden, indem eine Kombination aus FileSystemFileHandle.getFile() für den neuen Namen und FileSystemFileHandle.createWriter().write() mit dem Inhalt der alten Datei verwendet wird. Verwenden Sie dann FileSystemDirectoryHandle.removeEntry(), um die alte Datei zu löschen. |
In der Native File System API gibt es keine direkte API, für die dies in einem Schritt erledigt wird. |
Abfrage |
|
GAP (teilweise) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (teilweise): Blob.type kann auch zur Überprüfung des MIME-Typs verwendet werden. Der Dateisystemtyp, die Erstellungszeit und die letzte Zugriffszeit können mit der Native File System API nicht ermittelt werden. |
ReadDirectoryEntries |
|
FV (teilweise) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
FV (teilweise) |
window.requestFileSystem |
JS API ermöglicht beides in einem Schritt |
Öffnen |
|
GAP |
window.requestFileSystem |
JS API führt beides in einem Schritt aus |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Beispiel |
|
SDL |
Gamepad.* |
Das Gamepad-Objekt stellt einen Zeitstempel in Bezug auf „navigationStart“ bereit. Es wird aktualisiert, wenn Daten von der Hardware empfangen werden: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
Canvas.getContext('2d') |
|
Beschreiben |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scrollen |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
Lücke (teilweise) – Kann implementiert werden, indem die Leinwand mit einem Versatz mit drawImage auf sich selbst gezeichnet und dann der Rest ausgefüllt wird. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Leeren |
|
GAP |
Keine direkte Entsprechung |
GAP (teilweise) -
Es gibt immer einen impliziten Leerung am Ende des Zeichencodes. Das ist unwahrscheinlich
ändern können. Die Kombination aus
OffscreenCanvas
und
ImageBitmapRenderingContext
ähnliche Funktionen. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
Lücke (teilweise) – WebGL 2.0 und die OpenGL ES 3.0-API von Emscripten unterstützen benutzerdefinierte Multisample-Framebuffer, in denen alle über PPAPI konfigurierbaren Parameter festgelegt werden können. |
Erstellen |
|
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 |
Keine direkte Entsprechung |
GAP (teilweise) -
Es gibt immer einen impliziten Leerung am Ende des Zeichencodes. Das ist unwahrscheinlich
ändern können. Die Kombination aus OffscreenCanvas und ImageBitmapRenderingContext bietet jedoch ähnliche Funktionen. |
PPB_ImageData
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetNativeImageDataFormat |
|
SDL |
ImageData erfordert die RGBA-Reihenfolge |
|
IsImageDataFormatSupported |
|
SDL |
ImageData erfordert die RGBA-Reihenfolge |
|
Erstellen |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Beschreiben |
|
SDL |
ImageData hat nie einen Schritt. |
|
Karte |
|
SDL |
ImageData.data |
|
Zuordnung aufheben |
|
SDL |
ImageData.data |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
RequestInputEvents |
|
SDL |
Keine direkte Entsprechung |
Das Fehlen dieser Funktion ist wahrscheinlich weniger relevant, da JS / Wasm im Hauptthread ausgeführt wird und Ereignisse kostengünstiger filtern kann, ohne einen prozessübergreifenden Umlauf zu verursachen. |
RequestFilteringInputEvents |
|
SDL |
Maus* Taste* Rad* Touch* Komposition* Ereignisse |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Nachkommen der Ereignisklasse |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
„dblclick“ und „mousedown“ |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode enthält diese Informationen, aber unvollständig. |
Die Implementierung einer WheelEvent.deltaMode API wird unter https://github.com/w3c/uievents/issues/181#issuecomment-537811017 diskutiert. |
GetScrollByPage |
|
GAP |
GAP - deltaMode enthält diese Informationen, aber unvollständig. |
Es gibt eine Diskussion zur Implementierung einer WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.Einzug (um dies selbst zu ermitteln) |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Kein direktes Äquivalent |
Diese Daten können potenziell aus CompositionEvent.data abgerufen werden. |
GetSegmentOffset |
|
GAP |
GAP - Kein direktes Äquivalent |
|
GetTargetSegment |
|
GAP |
GAP - Kein direktes Äquivalent |
|
GetSelection |
|
GAP |
Lücke – kein direktes Äquivalent |
|
PPB_Instance
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
BindGraphics |
|
SDL |
Canvas.getContext (angegeben, da die Bindung automatisch erfolgt). |
|
IsFullFrame |
|
GAP |
GAP - Kein Äquivalent zu MIME-Typ-Handlern. |
NaCl-Apps können so registriert werden, dass sie einen bestimmten MIME-Typ verarbeiten und Eigentümer des gesamten Dokuments sind. |
DidCreate |
|
– |
<Element>[key] |
Mit allgemeinem DOM-Zugriff können Sie Tag-Attribute abrufen |
DidDestroy |
|
– |
– |
Nicht für NaCl ausgelöst |
DidChangeView |
|
– |
Ereignis „Element 'resize'“ |
|
DidChangeFocus |
|
– |
Element-Ereignisse „focus“, „focusin“ und „focusout“ |
|
HandleDocumentLoad |
|
– |
GAP - No way to register as a mime type handler |
NaCl-Module über Apps und ein Manifesteintrag können für bestimmte MIME-Typen eingerichtet werden. |
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Konfigurieren |
|
GAP |
getUserMedia() |
Die Einschränkungen von getUserMedia() können die Konfigurationswerte für MediaStreamTrack liefern. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP – kein Äquivalent |
|
RecycleBuffer |
|
GAP |
GAP - Kein Äquivalent |
|
Schließen |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Leinwandaufnahme |
Mit Canvas Capture können Videoframes programmatisch eingefügt werden. |
Konfigurieren |
|
GAP |
applyConstraints(), getUserMedia() |
Lücke (teilweise) – Die Anzahl der Konfigurationen, die in der Web API verfügbar sind, kann von der PPAPI abweichen. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
Lücke – kein Äquivalent zu PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream kann nicht vorab geladen werden und wird daher nie gepuffert: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
Lücke – kein Äquivalent zu PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Kein Äquivalent |
|
RecycleFrame |
|
GAP |
GAP - Kein Äquivalent |
|
Schließen |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP – kein Äquivalent |
|
PutFrame |
|
GAP |
GAP - Kein Äquivalent |
|
PPB_MessageLoop
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
– |
Im Grunde genommen unerheblich, da Worker eine implizite Ereignisschleife erhalten. |
|
GetForMainThread |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
GetCurrent |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
AttachToCurrentThread |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
Ausführen |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
PostWork |
|
– |
Im Grunde genommen unerheblich, da Worker eine implizite Ereignisschleife erhalten. |
|
PostQuit |
|
– |
Überwiegend irrelevant. Worker erhalten eine implizite Ereignisschleife. |
|
PPB_Messaging
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
PostMessage |
|
– |
Window.postMessage |
|
RegisterMessageHandler |
|
– |
window.addEventListener |
|
UnregisterMessageHandler |
|
– |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
SetCursor |
|
SDL |
Element.style.cursor |
Es werden dieselben Standardcursor unterstützt.
Benutzerdefinierte Cursor können mit url(..) erstellt werden.
Dynamische benutzerdefinierte Cursor können mit Daten-URIs verwendet werden.
CSS3 unterstützt die Angabe des Hotspots. |
PPB_MouseLock
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Verschiedene Methoden |
|
OpenGLES |
Funktionalität von WebGL 1.0 ähnlich. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
SetTextInputType |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
Einige Entwickler möchten entweder auf diese Weise Hinweise geben oder vorzugsweise IME-Ereignisse/-Ausgaben inline in einem Canvas abfangen und anzeigen. |
UpdateCaretPosition |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Potenziell durch die Input Method Editor API ausgefüllt |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
new XMLHttpRequest() |
|
Öffnen |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Kein XMLHTTPRequest-Äquivalent |
|
GetUploadProgress |
|
embind |
XMLHttpRequest-Ereignis „progress“ |
|
|
|
GAP |
FetchObserver |
Noch nicht spezifiziert oder implementiert; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest-Ereignis „progress“ |
|
|
|
GAP |
FetchObserver |
Noch nicht spezifiziert oder implementiert; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Antwort abrufen.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Text.* (Antwort ist ein Text) |
|
FinishStreamingToFile |
|
embind |
GAP - Kein direktes Äquivalent |
XMLHttpRequest und Fetch gehen davon aus, dass das Streaming in den Arbeitsspeicher und nicht direkt in einen Speicher erfolgt. |
Schließen |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal und AbortController |
|
PPB_URLRequestInfo
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Abrufanfrage |
|
SetProperty |
|
GAP |
GAP - Kein direktes Äquivalent für XMLHttpRequest |
XMLHttpRequest bietet keine direkten Möglichkeiten, um Begrenzungen auf Anfragen basierend auf Weiterleitungen zu beschränken, in eine Datei zu streamen oder eine Verweis-URL oder Richtlinie für Anmeldedaten festzulegen. |
|
|
embind |
Anfrage.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - Beide müssen den ganzen Körper haben, nicht nur einen Teil. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
fetch()-Upload-Streaming |
https://www.chromestatus.com/features/5274139738767360 |
|
|
– |
<form> |
Sie können auch mit FileReader lesen und hochladen, aber das entspricht eher AppendDataToBody |
PPB_URLResponseInfo
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders und andere |
|
|
|
embind |
Antwort abrufen.* |
|
GetBodyAsFileRef |
|
embind |
Fetch Response (Body) .blob() |
Es wird davon ausgegangen, dass die Speicherschicht die Übertragung optimiert. |
PPB_Var
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
– |
– |
|
VarToResource |
|
– |
– |
|
PPB_VarArray
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Get |
|
embind |
Matrix[i] |
|
Fertig |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Karte |
|
GAP |
GAP - Kein direktes Äquivalent |
Asm.js-/Wasm-Module können Regionen eines ArrayBuffers nur ihrem einzelnen linearen Speicher-Heap zuordnen.
Die zukünftige Zuordnung mehrerer Erinnerungen oder die Zuordnung von Arbeitsspeicherdaten könnten dies verbessern. |
Zuordnung aufheben |
|
GAP |
GAP - Kein direktes Äquivalent |
|
PPB_VarDictionary
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Fertig |
|
embind |
<Objekt>[i] = x |
|
Löschen |
|
embind |
<Object>[i] löschen |
|
HasKey |
|
embind |
x in <Object> |
|
GetKeys |
|
embind |
für (k in <Object>) {} |
Keine wörtliche Entsprechung, kann aber erstellt werden. |
PPB_VideoDecoder
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API mit VideoDecoder() verarbeitet |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Initialisieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mithilfe der Initialisierungsparameter von VideoDecoder() (VideoDecoderInitParameters) verarbeitet. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP – Wird mit der vorgeschlagenen WebCodecs API unter Verwendung von ReadableStream.pipeThrough(VideoDecoder) verarbeitet. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) verarbeitet |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API behandelt. Beim aktuellen Design werden die Bilder automatisch recycelt und die Decodierung wird fortgesetzt. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Leeren |
|
GAP |
Lücke – wird mit der vorgeschlagenen WebCodecs API behandelt. Die API wird als Flush() aufgerufen. Es wird jedoch noch diskutiert, wie sie in Bezug auf Dekodierungsaufrufe sequenziert wird. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Zurücksetzen |
|
GAP |
GAP: Wird mit dem vorgeschlagenen WebCodecs-API verarbeitet, indem die VideoDecoder-Instanz zerstört und eine neue erstellt wird. Das ist nicht so effizient wie eine spezielle Zurücksetzungsmethode, aber die Semantik für eine Reset() API wird noch diskutiert. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit VideoEncoder() verarbeitet |
|
GetSupportedProfiles |
|
GAP |
GAP (teilweise) – navigator.mediaCapabilities.encodingInfo() |
Die unterstützten Profile müssen einzeln aktiviert werden. |
Initialisieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit den Initialisierungsparametern von VideoEncoder() verarbeitet |
|
GetFramesRequired |
|
GAP |
GAP – kein Äquivalent |
Es ist unwahrscheinlich, dass der von der Web Codecs API intern verwendete Frame-Pool freigegeben wird. |
GetFrameCodedSize |
|
GAP |
GAP – kein Äquivalent |
Es ist unwahrscheinlich, dass der Frame-Pool, der intern von der Web Codecs API verwendet wird, freigegeben wird. |
GetVideoFrame |
|
GAP |
GAP: Wird mit dem vorgeschlagenen WebCodecs-API über ReadableStream.pipeThrough(VideoEncoder) verarbeitet. Dadurch werden die Daten direkt im lesbaren Stream codiert, anstatt vor der Codierung einen einzelnen Frame zu erfassen, der mit Daten gefüllt wird. |
|
Codieren |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API mit ReadableStream.pipeThrough(VideoEncoder) verarbeitet |
|
GetBitstreamBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. Das aktuelle Design durchläuft automatisch den codierten Bitstream-Zwischenspeicher, durch den geleitet wird. |
Das WebCodecs-API geht derzeit davon aus, dass der Bitstream-Zwischenspeicher kopiert und nicht in einem Pool zusammengefasst werden kann. Daher muss er nicht wiederverwendet werden. |
RecycleBitstreamBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. Beim aktuellen Design wird der Puffer automatisch wiederverwendet, um den Codierungsprozess fortzusetzen. |
Da die Auswirkungen auf die Leistung kleiner sind, wird sich das in Zukunft voraussichtlich nicht ändern. |
RequestEncodingParametersChange |
|
GAP |
GAP – Wird von der vorgeschlagenen Web Codecs API verarbeitet. Bestimmte Parameter können spontan geändert werden, bei anderen muss der Encoder deaktiviert werden. |
|
Schließen |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API über VideoEncoder.Close() verarbeitet |
|
PPB_VideoFrame
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetTimestamp |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API verarbeitet. |
|
SetTimestamp |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetFormat |
|
GAP |
Lücke – Wird mit der vorgeschlagenen WebCodecs API verarbeitet. |
|
GetSize |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetDataBuffer |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
GetDataBufferSize |
|
GAP |
GAP – Wird mit dem vorgeschlagenen WebCodecs-API gehandhabt. |
|
PPB_View
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Bezieht sich auf das Dokument und nicht nur auf ein einzelnes Element. |
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-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
|
GAP |
WebSocket.WebSocket |
|
Verbinden |
|
GAP |
WebSocket.WebSocket(URL, ...)
WebSocket "offen" Ereignis |
|
Schließen |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket-Ereignis „message“
WebSocket-Ereignis „error“
WebSocket-Ereignis „close“ |
|
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-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Graphics3DContextLost |
|
SDL |
Canvas-Ereignis „webglcontextlost“ |
|
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
DidCreate |
|
– |
<Element>[key] |
Mit allgemeinem DOM-Zugriff können Sie Tag-Attribute abrufen |
DidDestroy |
|
– |
– |
Nicht für NaCl ausgelöst |
DidChangeView |
|
– |
Ereignis „Element 'resize'“ |
|
DidChangeFocus |
|
– |
Element-Ereignisse „focus“, „focusin“ und „focusout“ |
|
HandleDocumentLoad |
|
– |
GAP - Keine Möglichkeit zur Registrierung als MIME-Typ-Handler |
NaCl-Module können über Apps und einen Manifesteintrag so eingerichtet werden, dass sie bestimmte MIME-Typen verarbeiten. |
PPP_MessageHandler
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleMessage |
|
embind |
MessagePort-Ereignis „message“
Window-Ereignis „message“ |
|
HandleBlockingMessage |
|
– |
GAP - Kein direktes Äquivalent |
Eine ähnliche Synchronisierung kann mit Atomics.wait außerhalb des Hauptthreads erfolgen. Dies wurde hinzugefügt, um die Emulation synchroner Plug-in-APIs zu unterstützen. |
PPP_Messaging
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
HandleMessage |
|
embind |
MessagePort „message“ Ereignis
Fenster "Nachricht" Ereignis |
|
PPP_MouseLock
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
MouseLockLost |
|
SDL |
Element „pointerlockchange“, „pointerlockerror“ Veranstaltungen |
|
PPAPI (Apps)
PPB_HostResolver
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
Klären |
x |
GAP |
Lücke (teilweise) – keine direkte Entsprechung |
|
GetCanonicalName |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
GetNetAddressCount |
x |
GAP |
Lücke (teilweise) – keine direkte Entsprechung |
|
GetNetAddress |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
PPB_NetAddress
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
CreateFromIPv4Address |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
CreateFromIPv6Address |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
GetFamily |
x |
GAP |
Lücke (teilweise) – keine direkte Entsprechung |
|
DescribeAsString |
x |
GAP |
GAP (teilweise) - kein direktes Äquivalent |
|
DescribeAsIPv4Address |
x |
GAP |
Lücke (teilweise) – keine direkte Entsprechung |
|
DescribeAsIPv6Address |
x |
GAP |
Lücke (teilweise) – keine direkte Entsprechung |
|
PPB_NetworkList
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetCount |
x |
GAP |
GAP - Kein direktes Äquivalent |
|
GetName |
x |
GAP |
GAP - Kein direktes Äquivalent |
|
GetType |
x |
GAP |
Lücke – keine direkte Entsprechung |
|
GetState |
x |
GAP |
Lücke – keine direkte Entsprechung |
|
GetIpAddress |
x |
GAP |
Lücke – keine direkte Entsprechung |
|
GetDisplayName |
x |
GAP |
Lücke – kein direktes Äquivalent |
|
GetMTU |
x |
GAP |
GAP - Kein direktes Äquivalent |
|
PPB_NetworkMonitor
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
Erstellen |
x |
GAP |
GAP - Kein direktes Äquivalent |
|
UpdateNetworkList |
x |
GAP |
Lücke – kein direktes Äquivalent |
|
PPB_NetworkProxy
PPAPI-Methode |
Geht von Threads aus |
Emscripten |
Web API |
Beschränkungen |
GetProxyForURL |
x |
GAP |
Lücke – keine direkte Entsprechung |
|
PPB_TCPSocket und PPB_UDPSocket
Es gibt keine direkte 1:1-Zuordnung für die Migration. Stattdessen haben wir unten einige Nutzerszenarien und den empfohlenen Migrationspfad beschrieben.
Anwendungsfall |
Empfehlungen |
Bildschirmfreigabe |
getDisplayMedia und
WebRTC (
Demo)
|
Wird aus einem
lokaler Server, um die Bandbreitennutzung zu minimieren |
XHR, Fetch, Streams, Service Worker, Cache APIs |
Wird aus einem
Lokale Instanz einer Webanwendung / Herstellen einer Verbindung zu einer lokalen Instanz einer Webanwendung |
WebRTC |
Chat |
WebSocket*
|
Echtzeit-Audio-/Videokommunikation |
WebRTC |
Zusammenarbeit |
WebSocket*
|
Echtzeit
Multiplayer-Spiele |
WebTransport**
es sei denn, P2P ist in diesem Fall WebRTC (oder
WebTransport über RTCIceTransport)
|
Interaktives Streaming in Echtzeit |
WebTransport**
|
Kommunikation
mit altem Server |
Proxyserver oder Middleware zur Protokollkonvertierung Feedback zu bit.ly/network-api-gaps
|
*: Oder WebTransport in Zukunft
**: Verfügbarkeit nach chromestatus ansehen