(P)NaCl Deprecation Announcements
Ze względu na dużą popularność obsługi WebAssembly w różnych przeglądarkach planujemy skupić
na potrzeby tworzenia natywnego kodu w WebAssembly i planujemy wyłączyć obsługę
PNaCl w IV kwartale 2019 r. (z wyjątkiem aplikacji Chrome). Naszym zdaniem
ekosystemu WebAssembly
lepiej pasuje do nowych i istniejących kampanii o wysokiej skuteczności
aplikacji internetowych, a wykorzystanie PNaCl jest na tyle niskie, że warto je wycofać.
Od wersji 76 przeglądarki Chrome PNaCl w otwartej sieci jest dostępne tylko w ramach testów Origin, czyli mechanizmu, który pozwala deweloperom rejestrować się i uzyskiwać dostęp do funkcji, która nie jest domyślnie włączona.
Zwykle jest to nowa funkcja proponowana, ale w tym przypadku jest ona wycofana.
Deweloperzy mogą zarejestrować się w konsoli Origin Trial i otrzymać token, który można umieścić na stronie. Umożliwi to korzystanie z funkcji bez konieczności używania flagi przez użytkownika.
(więcej informacji znajdziesz w przewodniku dostępnym pod linkiem). Wersja próbna ma trwać do Chrome 78, czyli do grudnia 2019 r.
Ta zmiana nie powinna mieć wpływu na NaCl ani PNaCl w aplikacjach i rozszerzeniach do Chrome. Flaga „enable-nacl” w chrome://flags może też służyć do włączania PNaCl lokalnie na potrzeby testowania (ta flaga zachowuje też swoją obecną funkcję włączania „natywnego” NaCl na dowolnej stronie, która nie obsługuje PNaCl).
Niedawno ogłosiliśmy też wycofanie
Aplikacje Chrome
spoza ChromeOS.
W przypadku większości zastosowań (P)NaCl zalecamy przejście z pakietu SDK NaCl na Emscripten.
Migracja powinna być dość prosta, jeśli aplikacja jest przenośna na system Linux, używa SDL lub interfejsów POSIX.
Bezpośrednia obsługa interfejsów NaCl / Pepper API nie jest dostępna,
ale próbowaliśmy wyświetlić ich odpowiedniki.
W trudniejszych przypadkach przenoszenia prosimy o kontakt na adres native-client-discuss@googlegroups.com.
Migracja API
Poniżej przedstawiamy stan zastępników platformy internetowej w przypadku każdego interfejsu API udostępnionego w ramach usługi (P)NaCl.
Dodatkowo tabela zawiera listę biblioteki lub opcji w Esscripten.
który oferuje najbliższy zamiennik.
Planujemy dodać obsługę wątków pamięci współdzielonej do WebAssembly w 2017 roku,
ponieważ wątki są kluczowe w dopasowywaniu do najciekawszego zastosowania (P)NaCl,
przypadków. Elementy migracji, które zakładają obsługę nadchodzących wątków
są oznaczone poniżej. Jeśli sterowanie przepływem aplikacji w dużej mierze zależy od blokowania
interfejsów API, może się też okazać, że do wygodnego przenoszenia wymagana jest obsługa wątków.
Staramy się zachować precyzję w tej tabeli,
bez wątpienia zawiera błędy ani pominięcia.
Jeśli natrafisz na taką formę płatności, skontaktuj się z nami pod adresem
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
x |
SDL (częściowo) |
GAP (częściowo) – odpowiednik AudioWorkletNode ROUGHLY |
Ukończono specyfikację AudioWorkletSpec, ale wersja AudioDeviceClient może być lepszym rozwiązaniem w przypadku tego interfejsu API. Społeczność AudioDeviceClient jest nadal określana. Worklet może nie być odpowiednikiem tego interfejsu API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (pobiera przekazane ustawienia) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametr) |
Przekazywane za każdym razem zamiast dołączania do bufora. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametr) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP – WebAudio korzysta tylko z 32-bitowej liczby zmiennoprzecinkowej, natomiast PPAPI używa 16-bitowej liczby znaków typu int. |
Teoretycznie PPAPI obsługuje wiele rozmiarów próbkowania. W praktyce obsługuje ona tylko próbki 16-bitowe. Deweloperzy jednak poprosili o 16-bitowe rozmiary próbek, aby zmniejszyć zużycie pamięci. Następna wersja specyfikacji Web Audio będzie obsługiwać próbki 16-bitowe. Optymalizację komponentu AudioBuffer można wdrożyć podobnie jak w Firefoksie przez zastosowanie 16-bitowego bufora dla dźwięku pochodzącego z decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
CreateStereo 16-bitowy |
|
GAP |
GAP – obsługiwane tylko 32-bitowe próbki zmiennoprzecinkowe |
Następna wersja specyfikacji Web Audio wdroży obsługę 16-bitowych próbek. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (z konstrukcji domyślnej) |
Domyślnie kontekst AudioContext ma preferowaną częstotliwość próbkowania, która odpowiada rzeczywistej częstotliwości próbkowania sprzętowego urządzenia audio. |
RecommendSampleFrameCount |
|
GAP |
GAP – będzie obsługiwany przy użyciu planowanego klienta AudioDeviceClient |
Jest otwarty problem dotyczący zezwolenia na rozmiar określony przez użytkownika, ale jest on nadal definiowany. Najlepiej zrobić to przy użyciu klienta AudioDeviceClient, który podpowiada odpowiedni rozmiar dla danego sprzętu. |
PPB_Console
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Interfejs Console API jest uważany za wystarczająco kompletną alternatywę, chyba że deweloperzy podają konkretne przypadki użycia funkcji oferowanych przez LogWithSource. Map źródłowych w Narzędziach deweloperskich można używać do debugowania transpilowanego JavaScriptu w oryginalnym języku źródłowym. |
PPB_Core
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
Utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Można stworzyć równoważną synchronizację. |
PPB_FileIO
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowo) |
window.chooseFileSystemEntries() |
Słowa „tworzyć” i „otwierać” są używane w różny sposób, ale ich znaczenie jest takie samo. |
Otwórz |
|
FS (częściowo) |
window.chooseFileSystemEntries() |
|
Zapytanie |
|
FS (częściowa) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu. |
Dotyk |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Odczyt |
|
FS (częściowo) |
Blob.slice().arrayBuffer() |
|
Zapis |
|
FS (częściowa) |
FileSystemWriter.write() |
|
SetLength |
|
FS (częściowa) |
FileSystemWriter.truncate() |
|
Opróżnij |
|
GAP (częściowy) |
GAP (częściowy) – pliki są opróżniane po wywołaniu metody FileSystemWrite.close(). |
Jest to celowe działanie, ponieważ pliki interfejsu API natywnego systemu plików są dostępne dla systemu operacyjnego, dlatego przed wyświetleniem danych systemowi operacyjnemu należy przeprowadzić kontrolę Bezpiecznego przeglądania. |
Zamknij |
|
FS (częściowo) |
FileSystemWriter.close() |
Nie anuluje oczekujących operacji, ale usuwa wszystkie dane zapisane do tej pory na dysku. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() lub Blob.arrayBuffer() |
Umożliwia równoległe odczytywanie wielu podzakresów. |
PPB_FileRef
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (częściowa) |
FileSystem.type |
|
GetName |
|
FS (częściowo) |
File.name |
|
GetPath |
|
FS (częściowo) |
GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) |
Nie można określić ścieżki bezwzględnej pliku, a użytkownik musi przyznać uprawnienia do dostępu do katalogu zawierającego plik. |
GetParent |
|
FS (częściowa) |
GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) |
Użytkownik musi przyznać uprawnienia dostępu do katalogu zawierającego plik. |
MakeDirectory |
|
FS (częściowo) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Dotyk |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Czas zmiany może zostać skrócony podczas pisania. |
Usuń |
|
FS (częściowa) |
FileSystemDirectoryHandle.removeEntry() |
W przeciwieństwie do PPAPI katalogi nie muszą być puste. |
Zmień nazwę |
|
FS (częściowa) |
GAP (część) – plik można zapisać pod nową nazwą, używając kombinacji metody FileSystemFileHandle.getFile() dla nowej nazwy i FileSystemFileHandle.createWriter().write() z zawartością starego pliku. Następnie użyj FileSystemDirectoryHandle.removeEntry(), aby usunąć stary plik. |
W interfejsie Native File System API nie ma bezpośredniego interfejsu API, który umożliwiłby wykonanie tej operacji w jednym kroku. |
Zapytanie |
|
GAP (częściowy) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu. |
ReadDirectoryEntries |
|
FS (częściowo) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowo) |
window.requestFileSystem |
Interfejs JS API wykonuje oba te działania w jednym kroku |
Otwórz |
|
GAP |
window.requestFileSystem |
Interfejs JS API wykonuje oba te działania w jednym kroku |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Przykład |
|
SDL |
Gamepad.* |
Obiekt Gamepada ujawnia sygnaturę czasową w odniesieniu do nawigacjiStart. Aktualizacje są aktualizowane po otrzymaniu danych ze sprzętu https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
Canvas.getContext('2d') |
|
Opis |
|
SDL |
Canvas.clientwidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Przewiń |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (częściowe) – można go zaimplementować, narysowując płótno na sobie z przesunięciem za pomocą funkcji drawImage, a potem wypełniając resztę. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Opróżnij |
|
GAP |
Brak bezpośredniego odpowiednika |
GAP (częściowo) – na końcu kodu rysowania zawsze występuje domyślne spłukanie; jest mało prawdopodobne, aby to się zmieniło. Połączenie funkcji
OffscreenCanvas
i
ImageBitmapRenderingContext
udostępniają podobne funkcje. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (częściowo) – WebGL 2.0 i OpenGL ES 3.0 w Emscripten obsługują zdefiniowane przez użytkownika wielopróbkowe framebuffery, w których można ustawić wszystkie parametry konfigurowalne za pomocą PPAPI. |
Utwórz |
|
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 |
Brak bezpośredniego odpowiednika |
GAP (częściowy) –
Na końcu kodu rysowania zawsze znajduje się domyślne opróżnienie. to mało prawdopodobne
. Jednak połączenie OffscreenCanvas i ImageBitmapRenderingContext zapewnia podobne funkcje. |
PPB_ImageData
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetNativeImageDataFormat |
|
SDL |
ImageData wymaga zamówienia RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData wymaga zamówienia RGBA |
|
Utwórz |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Opis |
|
SDL |
ImageData nigdy nie ma kroku |
|
Mapa |
|
SDL |
ImageData.data |
|
Odłączanie |
|
SDL |
ImageData.data |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
RequestInputEvents |
|
SDL |
Brak bezpośredniego odpowiednika |
Brak tej funkcji jest prawdopodobnie mniej istotne, ponieważ JS / wam działa w wątku głównym i może tańszym odfiltrowywać zdarzenia bez konieczności przesyłania danych w obie strony w obie strony. |
RequestFilteringInputEvents |
|
SDL |
mysz* klawisz* koło* dotyk* kompozycja* Zdarzenia |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Elementy podrzędne klasy zdarzenia |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
„dblclick” a „mysza” Wydarzenia |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode zawiera te informacje, ale nie w pełni. |
Trwają dyskusje na temat implementacji interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode zawiera te informacje, ale nie w pełni. |
Jest toczy się dyskusja na temat wdrażania interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (aby to sprawdzić samodzielnie) |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
Te dane można potencjalnie pobrać z elementu CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetTargetSegment |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetSelection |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_Instance
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
BindGraphics |
|
SDL |
Canvas.getContext (możliwe, ponieważ wiązanie jest automatyczne). |
|
IsFullFrame |
|
GAP |
GAP – brak odpowiednika modułów obsługi typu MIME. |
Aplikacje NaCl mogą być rejestrowane w celu obsługi określonego typu mime i posiadania całego dokumentu. |
DidCreate |
|
Nie dotyczy |
<Element>[key] |
Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów |
DidDestroy |
|
Nie dotyczy |
Nie dotyczy |
Nie aktywowane w przypadku NaCl |
DidChangeView |
|
Nie dotyczy |
Zmiana rozmiaru elementu Wydarzenie |
|
DidChangeFocus |
|
Nie dotyczy |
Element „fokus”, „fokus”, „fokus” Wydarzenia |
|
HandleDocumentLoad |
|
Nie dotyczy |
GAP - No way to register as a mime type handler |
Moduły NaCl w aplikacjach i wpisie manifestu można skonfigurować pod kątem obsługi określonych typów MIME. |
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Skonfiguruj |
|
GAP |
getUserMedia() |
Ograniczenia z metody getUserMedia() mogą dostarczać wartości konfiguracji do użycia w MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP – brak odpowiednika |
|
RecycleBuffer |
|
GAP |
GAP – brak odpowiednika |
|
Zamknij |
|
GAP |
MediaStreamTrack.stop() |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
Canvas Capture |
Canvas Capture umożliwia automatyczne wprowadzanie klatek wideo. |
Skonfiguruj |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (częściowo) – zakres konfiguracji dostępnych w interfejsie Web API może różnić się od interfejsu PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP – brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
Nie można wstępnie załadować obiektu MediaStream, więc nigdy nie będzie ono buforowane: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP – brak odpowiednika |
|
RecycleFrame |
|
GAP |
GAP – brak odpowiednika |
|
Zamknij |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP – brak odpowiednika |
|
PutFrame |
|
GAP |
GAP – brak odpowiednika |
|
PPB_MessageLoop
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
GetForMainThread |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
GetCurrent |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
AttachToCurrentThread |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
Uruchom |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
PostWork |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
PostQuit |
|
Nie dotyczy |
W większości przypadków nie ma to znaczenia, ponieważ instancje robocze mają domyślną pętlę zdarzeń. |
|
PPB_Messaging
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
PostMessage |
|
Nie dotyczy |
Window.postMessage |
|
RegisterMessageHandler |
|
Nie dotyczy |
Window.addEventListener |
|
UnregisterMessageHandler |
|
Nie dotyczy |
Window.removeEventListener |
|
PPB_MouseCursor
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
SetCursor |
|
SDL |
Element.style.cursor |
Obsługiwany jest ten sam zestaw kursorów.
Niestandardowe kursory można stosować za pomocą adresów URL(..).
Dynamiczne kursory niestandardowe można stosować za pomocą identyfikatorów URI danych.
CSS3 obsługuje określanie hotspotu. |
PPB_MouseLock
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Kilka metod |
|
OpenGLES |
Funkcjonalność strony bliska WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
SetTextInputType |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
Niektórzy deweloperzy chcieliby mieć możliwość wyświetlania takich podpowiedzi lub, co jest jeszcze lepsze, przechwytywania i wyświetlania zdarzeń IME lub danych wyjściowych w ramach kanwy. |
UpdateCaretPosition |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
new XMLHttpRequest(); |
|
Otwórz |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP – brak odpowiednika XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
Zdarzenie „progress” XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Nie ma jeszcze specyfikacji ani implementacji; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Zdarzenie „progress” XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
nie określono ani nie zaimplementowano. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Pobierz odpowiedź.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Treść.* (Odpowiedź jest treścią) |
|
FinishStreamingToFile |
|
embind |
GAP – brak bezpośredniego odpowiednika |
Zarówno XMLHttpRequest, jak i Fetch zakładają, że dane są przesyłane do pamięci, a nie bezpośrednio do pamięci masowej. |
Zamknij |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal i AbortController |
|
PPB_URLRequestInfo
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Pobieranie |
|
SetProperty |
|
GAP |
GAP – brak bezpośredniego odpowiednika dla XMLHttpRequest |
Obiekt XMLHttpRequest nie udostępnia bezpośrednich sposobów na ograniczenie liczby żądań po przekierowaniu, strumieniowe przesyłanie do pliku, ustawianie odesłania ani zasad dotyczących poświadczeń. |
|
|
embind |
Prośba.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP – oba obrazy muszą zawierać całe ciało, a nie tylko jego fragment. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
download() prześlij strumieniowanie |
https://www.chromestatus.com/features/5274139738767360 |
|
|
Nie dotyczy |
<form> |
Możesz też czytać za pomocą FileReader i przesyłać, ale to bardziej jak AppendDataToBody. |
PPB_URLResponseInfo
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + inne |
|
|
|
embind |
Pobierz odpowiedź.* |
|
GetBodyAsFileRef |
|
embind |
Pobierz odpowiedź (ciało). .blob() |
Zakładamy, że warstwa pamięci optymalizuje przesyłanie. |
PPB_Var
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
Nie dotyczy |
Nie dotyczy |
|
VarToResource |
|
Nie dotyczy |
Nie dotyczy |
|
PPB_VarArray
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Pobierz |
|
embind |
Tablica[i] |
|
Do startu |
|
embind |
Tablica[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
tablica.length = n |
|
PPB_VarArrayBuffer
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
Moduły Asm.js / wam nie są w stanie mapować regionów tablica Buffer innych niż ich jedna liniowa sterta pamięci.
Użycie wielu wspomnień lub mapowania pamięci w przyszłości może to poprawić. |
Usuń mapę |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_VarDictionary
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
{} |
|
Pobierz |
|
embind |
<Object>[i] |
|
Do startu |
|
embind |
<Object>[i] = x |
|
Usuń |
|
embind |
usuń <obiekt>[i] |
|
HasKey |
|
embind |
x w <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Nie ma dosłownego odpowiednika, ale można go stworzyć. |
PPB_VideoDecoder
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoDecoder(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Zainicjuj |
|
GAP |
GAP – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania 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 – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu interfejsu 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 – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu 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 – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecny projekt umożliwia automatyczne ponowne wykorzystanie zdjęć i dalszy proces dekodowania. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Opróżnij |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. Interfejs API będzie nazywać się Flush(), ale wciąż trwają dyskusje na temat tego, jak będzie on uporządkowany w związku z wywołaniami decode. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Resetuj |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przez zniszczenie instancji VideoDecoder i utworzenie nowej. Nie będzie to tak skuteczne jak dedykowana metoda resetowania, ale semantyka interfejsu Reset() API jest wciąż omawiana. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (częściowo) – navigator.mediaCapabilities.encodingInfo() |
Obsługiwane profile należy sprawdzić pojedynczo. |
Zainicjuj |
|
GAP |
GAP – obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania VideoEncoder(). |
|
GetFramesRequired |
|
GAP |
GAP – brak odpowiednika |
Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie nieopublikowany. |
GetFrameCodedSize |
|
GAP |
GAP – brak odpowiednika |
Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie niedostępny. |
GetVideoFrame |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder). Dane zostaną zakodowane bezpośrednio w strumieniu „Czytelny”, a nie pobieranie jednej klatki w celu wypełnienia danych przed kodowaniem. |
|
Kodowanie |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Bieżący projekt będzie automatycznie przechodzić przez zakodowany bufor strumienia bitowego, przez który jest przekazywany potokiem. |
Interfejs WebCodecs API zakłada obecnie, że bufor strumienia bitowego można skopiować, a nie połączyć, więc nie trzeba go wykorzystywać do recyklingu. |
RecycleBitstreamBuffer |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecna wersja automatycznie odświeża bufor, aby można było kontynuować kodowanie. |
W przyszłości raczej się to nie zmieni, ponieważ wpływ na skuteczność jest mniejszy. |
RequestEncodingParametersChange |
|
GAP |
GAP – obsługiwane przez proponowany interfejs Web Codecs API. Niektóre parametry można zmieniać na bieżąco, a inne wymagają demontażu kodera. |
|
Zamknij |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu metody VideoEncoder.Close(). |
|
PPB_VideoFrame
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetTimestamp |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. |
|
SetTimestamp |
|
GAP |
GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API. |
|
GetFormat |
|
GAP |
GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API. |
|
GetSize |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. |
|
GetDataBuffer |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. |
|
GetDataBufferSize |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. |
|
PPB_View
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Służy do udokumentowania, a nie tylko pojedynczego elementu. |
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
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
WebSocket 'open' Event |
|
Zamknij |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Zdarzenie WebSocket „message”,Zdarzenie WebSocket „error”,Zdarzenie WebSocket „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
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utrata kontekstu graficznego3D |
|
SDL |
Zdarzenie „webglcontextlost” w obszarze roboczym |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
DidCreate |
|
Nie dotyczy |
<Element>[key] |
Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów |
DidDestroy |
|
Nie dotyczy |
Nie dotyczy |
Nie aktywowane w przypadku NaCl |
DidChangeView |
|
Nie dotyczy |
Zmiana rozmiaru elementu Wydarzenie |
|
DidChangeFocus |
|
Nie dotyczy |
Element „fokus”, „fokus”, „fokus” Wydarzenia |
|
HandleDocumentLoad |
|
Nie dotyczy |
GAP - No way to register as a mime type handler |
Moduły NaCl za pomocą aplikacji i elementu manifestu można skonfigurować tak, aby obsługiwały określone typy mime. |
PPP_MessageHandler
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleMessage |
|
embind |
Zdarzenie „message” interfejsu MessagePort
Zdarzenie „message” okna |
|
HandleBlockingMessage |
|
Nie dotyczy |
GAP – brak bezpośredniego odpowiednika |
Podobną synchronizację można przeprowadzić poza wątkiem głównym za pomocą narzędzia Atomics.wait. Dodano tę opcję, aby umożliwić emulację interfejsów API wtyczek synchronicznych. |
PPP_Messaging
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleMessage |
|
embind |
MessagePort „message” Wydarzenie
„Komunikat” okna Wydarzenie |
|
PPP_MouseLock
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
MouseLockLost |
|
SDL |
Element „pointerlockchange”, zdarzenia „pointerlockerror” |
|
IRT
PPB_Audio
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
x |
SDL (częściowo) |
GAP (częściowo) – odpowiednik AudioWorkletNode ROUGHLY |
Ukończono specyfikację AudioWorkletSpec, ale wersja AudioDeviceClient może być lepszym rozwiązaniem w przypadku tego interfejsu API. Społeczność AudioDeviceClient jest nadal określana. Worklet może nie być odpowiednikiem tego interfejsu API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (pobiera przekazane ustawienia) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametr) |
Przekazywane za każdym razem zamiast dołączania do bufora. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametr) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP – WebAudio korzysta tylko z 32-bitowej liczby zmiennoprzecinkowej, natomiast PPAPI używa 16-bitowej liczby znaków typu int. |
Teoretycznie PPAPI obsługuje wiele rozmiarów próbkowania. W praktyce obsługuje ona tylko próbki 16-bitowe. Deweloperzy jednak poprosili o 16-bitowe rozmiary próbek, aby zmniejszyć zużycie pamięci. Następna wersja specyfikacji Web Audio będzie obsługiwać próbki 16-bitowe. Optymalizację komponentu AudioBuffer można wdrożyć podobnie jak w Firefoksie przez zastosowanie 16-bitowego bufora dla dźwięku pochodzącego z decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
CreateStereo 16-bitowy |
|
GAP |
GAP – obsługiwane tylko 32-bitowe próbki zmiennoprzecinkowe |
Następna wersja specyfikacji Web Audio wdroży obsługę 16-bitowych próbek. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (z konstrukcji domyślnej) |
Domyślnie kontekst AudioContext ma preferowaną częstotliwość próbkowania, która odpowiada rzeczywistej częstotliwości próbkowania sprzętowego urządzenia audio. |
RecommendSampleFrameCount |
|
GAP |
GAP – będzie obsługiwany przy użyciu planowanego klienta AudioDeviceClient |
Jest otwarty problem dotyczący zezwolenia na rozmiar określony przez użytkownika, ale jest on nadal definiowany. Najlepiej zrobić to przy użyciu klienta AudioDeviceClient, który podpowiada odpowiedni rozmiar dla danego sprzętu. |
PPB_Console
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Interfejs Console API jest uważany za wystarczająco kompletną alternatywę, chyba że deweloperzy podają konkretne przypadki użycia funkcji oferowanych przez LogWithSource. Map źródłowych w Narzędziach deweloperskich można używać do debugowania transpilowanego JavaScriptu w oryginalnym języku źródłowym. |
PPB_Core
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
Utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Można stworzyć równoważną synchronizację. |
PPB_FileIO
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowo) |
window.chooseFileSystemEntries() |
Słowa „tworzyć” i „otwierać” są używane w różny sposób, ale ich znaczenie jest takie samo. |
Otwórz |
|
FS (częściowo) |
window.chooseFileSystemEntries() |
|
Zapytanie |
|
FS (częściowa) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu. |
Dotyk |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Odczyt |
|
FS (częściowo) |
Blob.slice().arrayBuffer() |
|
Zapis |
|
FS (częściowa) |
FileSystemWriter.write() |
|
SetLength |
|
FS (częściowa) |
FileSystemWriter.truncate() |
|
Opróżnij |
|
GAP (częściowy) |
GAP (częściowy) – pliki są opróżniane po wywołaniu metody FileSystemWrite.close(). |
Jest to celowe działanie, ponieważ pliki interfejsu API natywnego systemu plików są dostępne dla systemu operacyjnego, dlatego przed wyświetleniem danych systemowi operacyjnemu należy przeprowadzić kontrolę Bezpiecznego przeglądania. |
Zamknij |
|
FS (częściowo) |
FileSystemWriter.close() |
Nie anuluje oczekujących operacji, ale usuwa wszystkie dane zapisane do tej pory na dysku. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() lub Blob.arrayBuffer() |
Umożliwia równoległe odczytywanie wielu podzakresów. |
PPB_FileRef
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (częściowa) |
FileSystem.type |
|
GetName |
|
FS (częściowo) |
File.name |
|
GetPath |
|
FS (częściowo) |
GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) |
Nie można określić ścieżki bezwzględnej pliku, a użytkownik musi przyznać uprawnienia do dostępu do katalogu zawierającego plik. |
GetParent |
|
FS (częściowa) |
GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) |
Użytkownik musi przyznać uprawnienia dostępu do katalogu zawierającego plik. |
MakeDirectory |
|
FS (częściowo) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Dotyk |
|
FS (częściowa) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Czas zmiany może zostać skrócony podczas pisania. |
Usuń |
|
FS (częściowa) |
FileSystemDirectoryHandle.removeEntry() |
W przeciwieństwie do PPAPI katalogi nie muszą być puste. |
Zmień nazwę |
|
FS (częściowa) |
GAP (część) – plik można zapisać pod nową nazwą, używając kombinacji metody FileSystemFileHandle.getFile() dla nowej nazwy i FileSystemFileHandle.createWriter().write() z zawartością starego pliku. Następnie użyj FileSystemDirectoryHandle.removeEntry(), aby usunąć stary plik. |
W interfejsie Native File System API nie ma bezpośredniego interfejsu API, który umożliwiłby wykonanie tej operacji w jednym kroku. |
Zapytanie |
|
GAP (częściowy) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu. |
ReadDirectoryEntries |
|
FS (częściowo) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
FS (częściowo) |
window.requestFileSystem |
Interfejs JS API wykonuje oba te działania w jednym kroku |
Otwórz |
|
GAP |
window.requestFileSystem |
Interfejs JS API wykonuje oba te działania w jednym kroku |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Przykład |
|
SDL |
Gamepad.* |
Obiekt Gamepada ujawnia sygnaturę czasową w odniesieniu do nawigacjiStart. Aktualizacje są aktualizowane po otrzymaniu danych ze sprzętu https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
Canvas.getContext('2d') |
|
Opis |
|
SDL |
Canvas.clientwidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Przewiń |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (częściowe) – można go zaimplementować, narysowując płótno na sobie z przesunięciem za pomocą funkcji drawImage, a potem wypełniając resztę. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Opróżnij |
|
GAP |
Brak bezpośredniego odpowiednika |
GAP (częściowo) – na końcu kodu rysowania zawsze występuje domyślne spłukanie; jest mało prawdopodobne, aby to się zmieniło. Połączenie funkcji
OffscreenCanvas
i
ImageBitmapRenderingContext
udostępniają podobne funkcje. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (częściowo) – WebGL 2.0 i OpenGL ES 3.0 w Emscripten obsługują zdefiniowane przez użytkownika wielopróbkowe framebuffery, w których można ustawić wszystkie parametry konfigurowalne za pomocą PPAPI. |
Utwórz |
|
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 |
Brak bezpośredniego odpowiednika |
GAP (częściowy) –
Na końcu kodu rysowania zawsze znajduje się domyślne opróżnienie. to mało prawdopodobne
. Jednak połączenie OffscreenCanvas i ImageBitmapRenderingContext zapewnia podobne funkcje. |
PPB_ImageData
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetNativeImageDataFormat |
|
SDL |
ImageData wymaga zamówienia RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData wymaga zamówienia RGBA |
|
Utwórz |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Opis |
|
SDL |
ImageData nigdy nie ma kroku |
|
Mapa |
|
SDL |
ImageData.data |
|
Odłączanie |
|
SDL |
ImageData.data |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
RequestInputEvents |
|
SDL |
Brak bezpośredniego odpowiednika |
Brak tej funkcji jest prawdopodobnie mniej istotne, ponieważ JS / wam działa w wątku głównym i może tańszym odfiltrowywać zdarzenia bez konieczności przesyłania danych w obie strony w obie strony. |
RequestFilteringInputEvents |
|
SDL |
mysz* klawisz* koło* dotyk* kompozycja* Zdarzenia |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Elementy podrzędne klasy zdarzenia |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
„dblclick” a „mysza” Wydarzenia |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode zawiera te informacje, ale nie w pełni. |
Trwają dyskusje na temat implementacji interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode zawiera te informacje, ale nie w pełni. |
Jest toczy się dyskusja na temat wdrażania interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (aby to sprawdzić samodzielnie) |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
Te dane można potencjalnie pobrać z elementu CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetTargetSegment |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetSelection |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_Instance
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
BindGraphics |
|
SDL |
Canvas.getContext (możliwe, ponieważ wiązanie jest automatyczne). |
|
IsFullFrame |
|
GAP |
GAP – brak odpowiednika modułów obsługi typu MIME. |
Aplikacje NaCl mogą być rejestrowane w celu obsługi określonego typu mime i posiadania całego dokumentu. |
DidCreate |
|
Nie dotyczy |
<Element>[key] |
Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów |
DidDestroy |
|
Nie dotyczy |
Nie dotyczy |
Nie aktywowane w przypadku NaCl |
DidChangeView |
|
Nie dotyczy |
Zmiana rozmiaru elementu Wydarzenie |
|
DidChangeFocus |
|
Nie dotyczy |
Element „fokus”, „fokus”, „fokus” Wydarzenia |
|
HandleDocumentLoad |
|
Nie dotyczy |
GAP - No way to register as a mime type handler |
Moduły NaCl w aplikacjach i wpisie manifestu można skonfigurować pod kątem obsługi określonych typów MIME. |
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Skonfiguruj |
|
GAP |
getUserMedia() |
Ograniczenia z metody getUserMedia() mogą dostarczać wartości konfiguracji do użycia w MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP – brak odpowiednika |
|
RecycleBuffer |
|
GAP |
GAP – brak odpowiednika |
|
Zamknij |
|
GAP |
MediaStreamTrack.stop() |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
Canvas Capture |
Canvas Capture umożliwia automatyczne wprowadzanie klatek wideo. |
Skonfiguruj |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (częściowo) – zakres konfiguracji dostępnych w interfejsie Web API może różnić się od interfejsu PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP – brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
Nie można wstępnie załadować obiektu MediaStream, więc nigdy nie będzie ono buforowane: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP – brak odpowiednika |
|
RecycleFrame |
|
GAP |
GAP – brak odpowiednika |
|
Zamknij |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP – brak odpowiednika |
|
PutFrame |
|
GAP |
GAP – brak odpowiednika |
|
PPB_MessageLoop
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
GetForMainThread |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
GetCurrent |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
AttachToCurrentThread |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
Uruchom |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
PostWork |
|
Nie dotyczy |
Pracownicy mają zazwyczaj pętlę zdarzeń. |
|
PostQuit |
|
Nie dotyczy |
W większości przypadków nie ma to znaczenia, ponieważ instancje robocze mają domyślną pętlę zdarzeń. |
|
PPB_Messaging
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
PostMessage |
|
Nie dotyczy |
Window.postMessage |
|
RegisterMessageHandler |
|
Nie dotyczy |
Window.addEventListener |
|
UnregisterMessageHandler |
|
Nie dotyczy |
Window.removeEventListener |
|
PPB_MouseCursor
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
SetCursor |
|
SDL |
Element.style.cursor |
Obsługiwany jest ten sam zestaw kursorów.
Niestandardowe kursory można stosować za pomocą adresów URL(..).
Dynamiczne kursory niestandardowe można stosować za pomocą identyfikatorów URI danych.
CSS3 obsługuje określanie hotspotu. |
PPB_MouseLock
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Kilka metod |
|
OpenGLES |
Funkcjonalność strony bliska WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
SetTextInputType |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
Niektórzy deweloperzy chcieliby mieć możliwość wyświetlania takich podpowiedzi lub, co jest jeszcze lepsze, przechwytywania i wyświetlania zdarzeń IME lub danych wyjściowych w ramach kanwy. |
UpdateCaretPosition |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
new XMLHttpRequest(); |
|
Otwórz |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP – brak odpowiednika XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
Zdarzenie „progress” XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Nie ma jeszcze specyfikacji ani implementacji; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Zdarzenie „progress” XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
nie określono ani nie zaimplementowano. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Pobierz odpowiedź.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Treść.* (Odpowiedź jest treścią) |
|
FinishStreamingToFile |
|
embind |
GAP – brak bezpośredniego odpowiednika |
Zarówno XMLHttpRequest, jak i Fetch zakładają, że dane są przesyłane do pamięci, a nie bezpośrednio do pamięci masowej. |
Zamknij |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal i AbortController |
|
PPB_URLRequestInfo
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Pobieranie |
|
SetProperty |
|
GAP |
GAP – brak bezpośredniego odpowiednika dla XMLHttpRequest |
Obiekt XMLHttpRequest nie udostępnia bezpośrednich sposobów na ograniczenie liczby żądań po przekierowaniu, strumieniowe przesyłanie do pliku, ustawianie odesłania ani zasad dotyczących poświadczeń. |
|
|
embind |
Prośba.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP – oba obrazy muszą zawierać całe ciało, a nie tylko jego fragment. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
download() prześlij strumieniowanie |
https://www.chromestatus.com/features/5274139738767360 |
|
|
Nie dotyczy |
<form> |
Możesz też czytać za pomocą FileReader i przesyłać, ale to bardziej jak AppendDataToBody. |
PPB_URLResponseInfo
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + inne |
|
|
|
embind |
Pobierz odpowiedź.* |
|
GetBodyAsFileRef |
|
embind |
Pobierz odpowiedź (ciało). .blob() |
Zakładamy, że warstwa pamięci optymalizuje przesyłanie. |
PPB_Var
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
Nie dotyczy |
Nie dotyczy |
|
VarToResource |
|
Nie dotyczy |
Nie dotyczy |
|
PPB_VarArray
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Pobierz |
|
embind |
Tablica[i] |
|
Do startu |
|
embind |
Tablica[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
tablica.length = n |
|
PPB_VarArrayBuffer
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
Moduły Asm.js / wam nie są w stanie mapować regionów tablica Buffer innych niż ich jedna liniowa sterta pamięci.
Użycie wielu wspomnień lub mapowania pamięci w przyszłości może to poprawić. |
Usuń mapę |
|
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_VarDictionary
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
embind |
{} |
|
Pobierz |
|
embind |
<Object>[i] |
|
Do startu |
|
embind |
<Object>[i] = x |
|
Usuń |
|
embind |
usuń <obiekt>[i] |
|
HasKey |
|
embind |
x w <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Nie ma dosłownego odpowiednika, ale można go stworzyć. |
PPB_VideoDecoder
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoDecoder(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Zainicjuj |
|
GAP |
GAP – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania 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 – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu interfejsu 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 – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu 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 – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecny projekt umożliwia automatyczne ponowne wykorzystanie zdjęć i dalszy proces dekodowania. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Opróżnij |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. Interfejs API będzie nazywać się Flush(), ale wciąż trwają dyskusje na temat tego, jak będzie on uporządkowany w związku z wywołaniami decode. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Resetuj |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przez zniszczenie instancji VideoDecoder i utworzenie nowej. Nie będzie to tak skuteczne jak dedykowana metoda resetowania, ale semantyka interfejsu Reset() API jest wciąż omawiana. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (częściowo) – navigator.mediaCapabilities.encodingInfo() |
Obsługiwane profile należy sprawdzić pojedynczo. |
Zainicjuj |
|
GAP |
GAP – obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania VideoEncoder(). |
|
GetFramesRequired |
|
GAP |
GAP – brak odpowiednika |
Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie nieopublikowany. |
GetFrameCodedSize |
|
GAP |
GAP – brak odpowiednika |
Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie niedostępny. |
GetVideoFrame |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder). Dane zostaną zakodowane bezpośrednio w strumieniu „Czytelny”, a nie pobieranie jednej klatki w celu wypełnienia danych przed kodowaniem. |
|
Kodowanie |
|
GAP |
GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Bieżący projekt będzie automatycznie przechodzić przez zakodowany bufor strumienia bitowego, przez który jest przekazywany potokiem. |
Interfejs WebCodecs API zakłada obecnie, że bufor strumienia bitowego można skopiować, a nie połączyć, więc nie trzeba go wykorzystywać do recyklingu. |
RecycleBitstreamBuffer |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecna wersja automatycznie odświeża bufor, aby można było kontynuować kodowanie. |
W przyszłości raczej się to nie zmieni, ponieważ wpływ na skuteczność jest mniejszy. |
RequestEncodingParametersChange |
|
GAP |
GAP – obsługiwane przez proponowany interfejs Web Codecs API. Niektóre parametry można zmieniać na bieżąco, a inne wymagają demontażu kodera. |
|
Zamknij |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu metody VideoEncoder.Close(). |
|
PPB_VideoFrame
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetTimestamp |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. |
|
SetTimestamp |
|
GAP |
GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API. |
|
GetFormat |
|
GAP |
GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API. |
|
GetSize |
|
GAP |
GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. |
|
GetDataBuffer |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. |
|
GetDataBufferSize |
|
GAP |
GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. |
|
PPB_View
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Służy do udokumentowania, a nie tylko pojedynczego elementu. |
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
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
WebSocket 'open' Event |
|
Zamknij |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Zdarzenie WebSocket „message”,Zdarzenie WebSocket „error”,Zdarzenie WebSocket „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
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utrata kontekstu graficznego3D |
|
SDL |
Zdarzenie „webglcontextlost” w obszarze roboczym |
|
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
DidCreate |
|
Nie dotyczy |
<Element>[key] |
Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów |
DidDestroy |
|
Nie dotyczy |
Nie dotyczy |
Nie aktywowane w przypadku NaCl |
DidChangeView |
|
Nie dotyczy |
Zmiana rozmiaru elementu Wydarzenie |
|
DidChangeFocus |
|
Nie dotyczy |
Element „fokus”, „fokus”, „fokus” Wydarzenia |
|
HandleDocumentLoad |
|
Nie dotyczy |
GAP - No way to register as a mime type handler |
Moduły NaCl za pomocą aplikacji i elementu manifestu można skonfigurować tak, aby obsługiwały określone typy mime. |
PPP_MessageHandler
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleMessage |
|
embind |
Zdarzenie „message” interfejsu MessagePort
Zdarzenie „message” okna |
|
HandleBlockingMessage |
|
Nie dotyczy |
GAP – brak bezpośredniego odpowiednika |
Podobną synchronizację można przeprowadzić poza wątkiem głównym za pomocą narzędzia Atomics.wait. Dodano tę opcję, aby umożliwić emulację interfejsów API wtyczek synchronicznych. |
PPP_Messaging
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
HandleMessage |
|
embind |
MessagePort „message” Wydarzenie
„Komunikat” okna Wydarzenie |
|
PPP_MouseLock
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
MouseLockLost |
|
SDL |
Element „pointerlockchange”, zdarzenia „pointerlockerror” |
|
PPAPI (aplikacje)
PPB_HostResolver
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
Rozwiąż |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
GetCanonicalName |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
GetNetAddressCount |
x |
GAP |
GAP (częściowo) – brak bezpośredniego odpowiednika |
|
GetNetAddress |
x |
GAP |
GAP (częściowo) – brak bezpośredniego odpowiednika |
|
PPB_NetAddress
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
CreateFromIPv4Address |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
CreateFromIPv6Address |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
GetFamily |
x |
GAP |
GAP (częściowo) – brak bezpośredniego odpowiednika |
|
DescribeAsString |
x |
GAP |
GAP (częściowy) – brak bezpośredniego odpowiednika |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (częściowo) – brak bezpośredniego odpowiednika |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (częściowo) – brak bezpośredniego odpowiednika |
|
PPB_NetworkList
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetCount |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetName |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetType |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetState |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetIpAddress |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetDisplayName |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
GetMTU |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_NetworkMonitor
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
Utwórz |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
UpdateNetworkList |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_NetworkProxy
Metoda PPAPI |
Zakłada wątki |
Emscripten |
Web API |
Ograniczenia |
GetProxyForURL |
x |
GAP |
GAP – brak bezpośredniego odpowiednika |
|
PPB_TCPSocket i PPB_UDPSocket
Migracja nie ma bezpośredniego mapowania 1:1. Zamiast tego przedstawiliśmy kilka
scenariuszy dotyczących użytkowników oraz zalecanej ścieżki migracji.
Przypadek użycia |
Rekomendacje |
Udostępnianie ekranu |
getDisplayMedia i
WebRTC (
wersja demonstracyjna)
|
Wczytuję z
serwer lokalny w celu zminimalizowania przepustowości |
Interfejsy XHR, Fetch, Streams, Service Worker, Cache API |
Ładowanie z lokalnej instancji aplikacji internetowej / Łączenie z lokalną instancją aplikacji internetowej |
WebRTC |
Czat |
WebSocket*
|
W czasie rzeczywistym
komunikacja audio/wideo |
WebRTC |
Współpraca |
WebSocket*
|
Gry wieloosobowe w czasie rzeczywistym |
WebTransport**
chyba że sieć P2P w tym przypadku to WebRTC (lub
WebTransport przez RTCIceTransport)
|
interaktywna transmisja w czasie rzeczywistym, |
WebTransport**
|
Komunikacja
ze starszym serwerem |
serwer proxy lub oprogramowanie pośredniczące do konwersji protokołów. Prześlij opinię do
bit.ly/network-api-gaps
|
*: w przyszłości WebTransport
**: Informacje o dostępności znajdziesz na chromestatus.