(P)NaCl 지원 중단 공지사항
크로스 브라우저 WebAssembly 지원의 가속도를 감안하여 앞으로는 WebAssembly에 네이티브 코드 작업을 집중하고 2019년 4분기에 PNaCl 지원을 중단할 계획입니다(Chrome 앱 제외). Google은 역동적인
WebAssembly 생태계
신규 및 기존의 고성능 기기에 더 적합
PNaCl 사용량이 지원 중단을 당할 만큼 충분히 적지 않다는 사실을 확인합니다.
Chrome 76부터 공개 웹의 PNaCl은 웹 개발자가 기본적으로 사용 설정되지 않은 기능을 등록하고 액세스할 수 있는 메커니즘인 오리진 트라이얼 뒤로 이동했습니다.
일반적으로 새로 제안된 기능이지만 이 경우에는 지원 중단되는 기능입니다.
개발자는 오리진 트라이얼 콘솔에 등록할 수 있습니다.
페이지에 삽입할 수 있는 토큰을 받고 사용자가 플래그를 사용할 필요 없이 기능을 사용하도록 설정합니다.
(자세한 내용은 링크된 가이드를 참고하세요.) 무료 체험은 Chrome 78까지, 즉 2019년 12월까지 진행될 예정입니다.
이 변경사항은 Chrome 앱 또는 확장 프로그램의 NaCl 또는 PNaCl에 영향을 미치지 않으며, chrome://flags의 'enable-nacl' 플래그를 사용하여 테스트를 위해 로컬에서 PNaCl을 사용 설정할 수도 있습니다(이 플래그는 모든 페이지에서 PNaCl이 아닌 '네이티브' NaCl을 사용 설정하는 현재 기능도 유지함).
또한 최근 ChromeOS 외부의 Chrome 앱이 2018년 1분기에 지원 중단된다고 발표했습니다.
대부분의 (P)NaCl 사용 사례에서는
NaCl SDK에서 Emscripten으로 변경합니다.
애플리케이션이 Linux로 이식 가능하거나 SDL 또는 POSIX API를 사용하는 경우 이전이 비교적 간단합니다.
NaCl/Pepper API를 직접 지원할 수는 없지만 웹 API 등가 항목을 나열해 보았습니다.
더 어려운 포팅 사례의 경우 native-client-discuss@googlegroups.com으로 문의하세요.
API 이전
다음은 (P)NaCl에 노출된 각 API의 웹 플랫폼 대체 API의 상태를 요약한 것입니다.
또한 이 표에는 가장 가까운 대체 항목을 제공하는 Emscripten의 라이브러리 또는 옵션이 나와 있습니다.
2017년에 WebAssembly에 공유 메모리 스레드 지원을 추가할 것으로 예상합니다.
스레드가 (P)NaCl의 가장 흥미로운 용도를 매칭하는 데 매우 중요하기 때문에
있습니다. 향후 스레드 지원을 가정하는 이전 항목은 아래에 표시되어 있습니다. 애플리케이션의 흐름 제어가 차단 API에 크게 의존하는 경우 편리한 포팅을 위해 스레드 지원이 필요할 수도 있습니다.
이 표에서 정확한 데이터를 얻기 위해 노력했으나
명백한 오류나 누락이 없습니다
이러한 문제가 발생하면
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
x |
SDL(부분) |
GAP(부분적) - AudioWorkletNode와 대략적으로 동일 |
AudioWorkletSpec은 완료되었지만 이 API에는 AudioDeviceClient가 더 적합할 수 있습니다. 커뮤니티에서 아직 AudioDeviceClient를 지정하고 있습니다. Worklet은 이 API에 상응하는 대략적인 도구가 아닐 수 있습니다. |
GetCurrentConfig |
|
SDL |
AudioContext.* (전달된 설정을 다시 가져옵니다.) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start(매개변수) |
버퍼에 연결되는 대신 매번 전달됩니다. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start(매개변수) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio는 32비트 부동 소수점만 사용하고 PPAPI는 16비트 int를 사용합니다. |
PPAPI는 이론적으로 여러 샘플링 크기를 지원합니다. 실제로는 16비트 샘플만 지원합니다. 안타깝게도 개발자들은 메모리 사용량을 줄이기 위해 16비트 샘플 크기를 요청했습니다. Web Audio 사양의 다음 버전에서는 16비트 샘플 지원을 구현합니다. decodeAudioData에서 가져온 오디오에 16비트 버퍼를 사용하여 Firefox와 유사하게 AudioBuffer 최적화를 구현할 수 있습니다. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
CreateStereo16Bit |
|
GAP |
GAP - 32비트 부동 소수점 샘플만 지원됨 |
Web Audio 사양의 다음 버전에서는 16비트 샘플 지원을 구현합니다. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate(기본 생성자에서 가져옴) |
AudioContext는 기본적으로 하드웨어 오디오 기기의 실제 샘플링 레이트와 일치하는 기본 샘플링 레이트를 갖습니다. |
RecommendSampleFrameCount |
|
GAP |
GAP - 계획된 AudioDeviceClient로 처리됩니다. |
사용자 지정 크기를 허용하는 미해결 문제가 있지만 아직 정의되지 않았습니다. 이 경우 지정된 하드웨어에 적합한 크기를 알려주는 AudioDeviceClient에서 가장 잘 처리할 수 있습니다. |
PPB_Console
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
로그 |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
LogWithSource에서 제공하는 기능에 대해 개발자가 제기한 구체적인 사용 사례가 없는 한 Console API는 충분히 완벽한 대체 API로 간주됩니다. DevTools 소스 맵은 원래 소스 언어로 트랜스파일된 JavaScript를 디버그하는 데 사용할 수 있습니다. |
PPB_Core
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
getTime |
|
utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== 정의되지 않음 |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
동등한 동기화를 구축할 수 있습니다. |
PPB_FileIO
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
window.chooseFileSystemEntries() |
Create와 Open은 다르게 사용되지만, 그 요소는 동일한 힘입니다. |
열기 |
|
FS (일부) |
window.chooseFileSystemEntries() |
|
쿼리 |
|
FS(부분) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP(부분적) - Blob.type을 사용하여 MIME 유형을 확인할 수도 있습니다. 네이티브 파일 시스템 API로는 파일 시스템 유형, 생성 시간, 마지막 액세스 시간을 확인할 수 없습니다. |
터치 |
|
FS (일부) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
읽기 |
|
FS (일부) |
Blob.slice().arrayBuffer() |
|
쓰기 |
|
FS(부분) |
FileSystemWriter.write() |
|
SetLength |
|
FS(부분) |
FileSystemWriter.truncate() |
|
플러시 |
|
GAP(부분) |
GAP (일부) - FileSystemWrite.close()가 호출되면 파일이 플러시됨 |
이는 네이티브 파일 시스템 API 파일이 OS에 노출되므로 데이터가 OS에 표시되기 전에 세이프 브라우징 검사를 실행해야 하기 때문에 의도적으로 설계된 것입니다. |
닫기 |
|
FS (일부) |
FileSystemWriter.close() |
대기 중인 작업을 취소하지 않지만 지금까지 쓴 모든 데이터를 디스크에 플러시합니다. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() 또는 Blob.arrayBuffer() |
여러 하위 범위 읽기를 동시에 허용합니다. |
PPB_FileRef
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS(부분) |
FileSystem.type |
|
GetName |
|
FS(부분) |
File.name |
|
GetPath |
|
FS(부분) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 FileSystemHandle.resolve(FileSystemHandle)를 사용하여 파일이 포함된 디렉터리의 참조에서 파일의 상대 경로를 확인할 수 있습니다. |
파일의 절대 경로를 확인할 수 없으며 사용자는 파일이 포함된 디렉터리에 액세스할 수 있는 권한을 부여해야 합니다. |
GetParent |
|
FS (일부) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 FileSystemHandle.resolve(FileSystemHandle)를 사용하여 파일이 포함된 디렉터리의 참조에서 파일의 상대 경로를 확인할 수 있습니다. |
사용자가 파일이 포함된 디렉터리에 액세스할 수 있는 권한을 부여해야 합니다. |
MakeDirectory |
|
FS(부분) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
터치 |
|
FS (일부) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
수정 시간은 글을 쓰면 부풀릴 수 있습니다. |
삭제 |
|
FS(부분) |
FileSystemDirectoryHandle.removeEntry() |
PPAPI와 달리 디렉터리는 비어 있을 필요가 없습니다. |
이름 바꾸기 |
|
FS(부분) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 새 이름의 FileSystemFileHandle.getFile()과 이전 파일의 콘텐츠가 포함된 FileSystemFileHandle.createWriter().write()를 조합하여 파일을 새 이름으로 쓸 수 있습니다. 그런 다음 FileSystemDirectoryHandle.removeEntry() 를 사용하여 이전 파일을 삭제합니다. |
네이티브 파일 시스템 API에는 이 작업을 한 번에 실행하는 직접 API가 없습니다. |
쿼리 |
|
GAP (일부) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (일부) - Blob.type을 사용하여 MIME 유형을 확인할 수도 있습니다. 네이티브 파일 시스템 API로는 파일 시스템 유형, 생성 시간, 마지막 액세스 시간을 확인할 수 없습니다. |
ReadDirectoryEntries |
|
FS (일부) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
window.requestFileSystem |
JS API는 한 단계로 두 작업을 모두 수행 |
열기 |
|
GAP |
window.requestFileSystem |
JS API는 한 단계에서 둘 다 실행합니다. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
샘플 |
|
SDL |
게임패드.* |
게임패드 객체는 NavigationStart와 관련된 타임스탬프를 노출합니다. 다음 페이지에서 하드웨어로부터 데이터가 수신되면 업데이트됩니다. https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
Canvas.getContext('2d') |
|
설명 |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
스크롤 |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP(부분) - drawImage를 사용하여 캔버스를 자체에 오프셋으로 그린 다음 나머지를 채우는 방식으로 구현할 수 있습니다. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
플러시 |
|
GAP |
직접 상응하는 항목 없음 |
GAP (일부) -
그리기 코드의 끝에는 항상 암시적 플러시가 있습니다. 가능성 낮음
변경할 수 있습니다 그러나
OffscreenCanvas
와
ImageBitmapRenderingContext
의 조합은 유사한 기능을 제공합니다. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (일부) - WebGL 2.0 및 Emscripten의 OpenGL ES 3.0 노출은 PPAPI를 통해 구성할 수 있는 모든 매개변수를 설정할 수 있는 사용자 정의 다중 샘플링 프레임 버퍼를 지원합니다. |
만들기 |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
직접 상응하는 항목 없음 |
GAP (일부) -
그리기 코드의 끝에는 항상 암시적 플러시가 있습니다. 가능성 낮음
변경할 수 있습니다 그러나
OffscreenCanvas
와
ImageBitmapRenderingContext
의 조합은 유사한 기능을 제공합니다. |
PPB_ImageData
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetNativeImageDataFormat |
|
SDL |
ImageData는 RGBA 순서를 요구합니다. |
|
IsImageDataFormatSupported |
|
SDL |
ImageData는 RGBA 순서를 요구합니다. |
|
만들기 |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
설명 |
|
SDL |
ImageData에는 항상 stride가 없습니다. |
|
지도 |
|
SDL |
ImageData.data |
|
매핑 해제 |
|
SDL |
ImageData.data |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
RequestInputEvents |
|
SDL |
직접 상응하는 항목 없음 |
JS/Wasm이 기본 스레드에서 실행되고 교차 프로세스 왕복을 일으키지 않고도 이벤트를 더 저렴하게 필터링할 수 있으므로 이 기능의 누락은 그다지 관련성이 없습니다. |
RequestFilteringInputEvents |
|
SDL |
마우스* 키* 휠* 터치* 구성* 이벤트 |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
이벤트 클래스 자손 |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
'dblclick'과 'mousedown' 이벤트 비교 |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode에는 이 정보가 포함되어 있지만 불완전합니다. |
WheelEvent.deltaMode API 구현에 관한 논의가 있습니다. https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode에는 이 정보가 포함되어 있지만 불완전합니다. |
다음 링크에서 WheelEvent.deltaMode API 구현에 관해 논의해 보세요. https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (직접 확인) |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
이 데이터는 CompositionEvent.data에서 가져올 수 있습니다. |
GetSegmentOffset |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetTargetSegment |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetSelection |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_Instance
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
BindGraphics |
|
SDL |
Canvas.getContext(결합이 자동이므로 무의미함). |
|
IsFullFrame |
|
GAP |
GAP - MIME 유형 핸들러에 상응하는 항목이 없습니다. |
NaCl 앱은 특정 MIME 유형을 처리하고 전체 문서를 소유하도록 등록할 수 있습니다. |
DidCreate |
|
해당 사항 없음 |
<Element>[key] |
일반 DOM 액세스를 사용하면 태그 속성을 가져올 수 있습니다. |
DidDestroy |
|
해당 사항 없음 |
해당 사항 없음 |
NaCl에 대해 트리거되지 않음 |
DidChangeView |
|
해당 사항 없음 |
요소 '크기 조정' 이벤트 |
|
DidChangeFocus |
|
해당 사항 없음 |
요소 '포커스', '포커스인', '포커스아웃' 이벤트 |
|
HandleDocumentLoad |
|
해당 사항 없음 |
GAP - mime 유형 핸들러로 등록할 방법이 없음 |
앱과 매니페스트 항목을 통한 NaCl 모듈을 설정하여 특정 MIME 유형을 처리할 수 있습니다. |
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
구성 |
|
GAP |
getUserMedia() |
getUserMedia()의 제약 조건은 MediaStreamTrack에서 사용할 구성 값을 제공할 수 있습니다. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - 동등하지 않음 |
|
RecycleBuffer |
|
GAP |
GAP - 동등하지 않음 |
|
닫기 |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
캔버스 캡처 |
캔버스 캡처는 프로그래매틱 방식으로 동영상 프레임을 도입하는 기능을 제공합니다. |
구성 |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (일부) - Web API에서 사용할 수 있는 구성 범위는 PPAPI와 다를 수 있습니다. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES에 해당 없음 |
MediaStream을 미리 로드할 수 없으므로 버퍼링되지 않습니다. https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT에 해당 없음 |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - 동등하지 않음 |
|
RecycleFrame |
|
GAP |
GAP - 동등하지 않음 |
|
닫기 |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - 동등하지 않음 |
|
PutFrame |
|
GAP |
GAP - 동등하지 않음 |
|
PPB_MessageLoop
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
해당 사항 없음 |
대부분은 중요하지 않으며 작업자는 암시적 이벤트 루프를 가져옵니다. |
|
GetForMainThread |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
GetCurrent |
|
해당 사항 없음 |
대부분은 중요하지 않으며 작업자는 암시적 이벤트 루프를 가져옵니다. |
|
AttachToCurrentThread |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
실행 |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PostWork |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PostQuit |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PPB_Messaging
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
PostMessage |
|
해당 사항 없음 |
Window.postMessage |
|
RegisterMessageHandler |
|
해당 사항 없음 |
Window.addEventListener |
|
UnregisterMessageHandler |
|
해당 사항 없음 |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
SetCursor |
|
SDL |
Element.style.cursor |
동일한 스톡 커서 집합이 지원됩니다.
url(..)을 사용하여 커스텀 커서를 수행할 수 있습니다.
동적 맞춤 커서는 데이터 URI를 사용하여 수행할 수 있습니다.
CSS3에서는 핫스팟 지정을 지원합니다. |
PPB_MouseLock
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
여러 가지 방법 |
|
OpenGLES |
기능 면에서 WebGL 1.0에 가깝습니다. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
SetTextInputType |
|
GAP |
GAP - 입력 방식 편집기 API로 채울 수 있음 |
일부 개발자는 이러한 방식으로 힌트를 주거나 캔버스 내에서 IME 이벤트/출력을 가로채고 인라인으로 표시하는 기능을 선호합니다. |
UpdateCaretPosition |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
new XMLHttpRequest(); |
|
열기 |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - 해당되는 XMLHTTPRequest 없음 |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 'progress' 이벤트 |
|
|
|
GAP |
FetchObserver |
아직 사양 또는 구현되지 않음 https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 'progress' 이벤트 |
|
|
|
GAP |
FetchObserver |
아직 사양화 또는 구현되지 않음. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Fetch Response* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (응답은 본문입니다.) |
|
FinishStreamingToFile |
|
embind |
GAP - 직접 상응하는 항목 없음 |
XMLHttpRequest와 Fetch는 모두 저장소로 직접 스트리밍하는 대신 메모리로 스트리밍한다고 가정합니다. |
닫기 |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal 및 AbortController |
|
PPB_URLRequestInfo
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
XMLHttpRequest |
|
|
|
embind |
가져오기 요청 |
|
SetProperty |
|
GAP |
GAP - XMLHttpRequest에 직접 상응하는 항목이 없음 |
XMLHttpRequest는 리디렉션 후 요청당 한도를 제한하고, 파일로 스트리밍하고, 리퍼러 또는 사용자 인증 정보를 설정하는 직접적인 방법을 제공하지 않습니다. |
|
|
embind |
요청* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - 둘 다 한 조각이 아닌 전체가 있어야 합니다. |
|
|
embind |
import(.., options:body)
|
|
AppendFileToBody |
|
GAP |
import() 업로드 스트리밍 |
https://www.chromestatus.com/features/5274139738767360 |
|
|
해당 사항 없음 |
<form> |
FileReader로 읽고 업로드할 수도 있지만 AppendDataToBody와 비슷합니다. |
PPB_URLResponseInfo
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + 기타 |
|
|
|
embind |
Fetch Response* |
|
GetBodyAsFileRef |
|
embind |
응답 가져오기(본문) .blob() |
스토리지 레이어가 전송을 최적화한다고 가정합니다. |
PPB_Var
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
해당 사항 없음 |
해당 사항 없음 |
|
VarToResource |
|
해당 사항 없음 |
해당 사항 없음 |
|
PPB_VarArray
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
가져오기 |
|
embind |
Array[i] |
|
이제 |
|
embind |
배열[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
지도 |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
Asm.js/WASM 모듈은 단일 선형 메모리 힙 이외의 ArrayBuffer 영역을 매핑할 수 없습니다.
향후 여러 메모리 또는 메모리 매핑을 사용하면 이 문제가 개선될 수 있습니다. |
매핑 해제 |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_VarDictionary
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
{} |
|
가져오기 |
|
embind |
<Object>[i] |
|
이제 |
|
embind |
<객체>[i] = x |
|
삭제 |
|
embind |
<Object>[i] 삭제 |
|
HasKey |
|
embind |
<Object>의 x |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
문자 그대로 상응하는 것은 없지만 빌드할 수 있습니다. |
PPB_VideoDecoder
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
GAP - VideoDecoder()를 사용하는 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
초기화 |
|
GAP |
GAP - VideoDecoder() 초기화 매개변수(VideoDecoderInitParameters)를 사용하는 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoDecoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable)을 사용하여 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. 현재 디자인은 자동으로 사진을 재활용하고 디코딩 프로세스를 유지합니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
플러시 |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. API는 Flush()로 호출되지만 디코딩 호출과 관련하여 API의 시퀀스가 어떻게 지정될지는 아직 논의 중입니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
재설정 |
|
GAP |
GAP - VideoDecoder 인스턴스를 소멸하고 새 인스턴스를 만들어 제안된 WebCodecs API로 처리됩니다. 전용 재설정 메서드만큼 효율적이지는 않지만, 재설정() API의 의미 체계는 계속 논의되고 있습니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
GAP - VideoEncoder()를 사용하는 제안된 WebCodecs API로 처리됩니다. |
|
GetSupportedProfiles |
|
GAP |
GAP (일부) - navigator.mediaCapabilities.encodingInfo() |
지원되는 프로필은 하나씩 확인해야 합니다. |
초기화 |
|
GAP |
GAP - VideoEncoder() 초기화 매개변수를 사용하여 제안된 WebCodecs API로 처리됩니다. |
|
GetFramesRequired |
|
GAP |
GAP - 동등하지 않음 |
Web Codecs API에서 내부적으로 사용하는 프레임 풀이 노출될 가능성은 낮습니다. |
GetFrameCodedSize |
|
GAP |
GAP - 동등하지 않음 |
Web Codecs API에서 내부적으로 사용하는 프레임 풀이 노출될 가능성은 낮습니다. |
GetVideoFrame |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoEncoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. 이렇게 하면 인코딩 전에 단일 프레임을 가져와서 데이터로 채우는 대신 데이터를 읽을 수 있는 스트림에서 직접 인코딩합니다. |
|
인코딩 |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoEncoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. |
|
GetBitstreamBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. 현재 설계는 파이프를 통해 전달되는 인코딩된 비트스트림 버퍼를 자동으로 통과합니다. |
WebCodecs API는 현재 비트스트림 버퍼를 풀링하는 대신 복사할 수 있다고 가정하므로 재활용할 필요가 없습니다. |
RecycleBitstreamBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. 현재 설계는 인코딩 프로세스를 계속 진행하기 위해 버퍼를 자동으로 재활용합니다. |
성능 영향이 더 적으므로 향후 변경될 가능성은 낮습니다. |
RequestEncodingParametersChange |
|
GAP |
GAP - 제안된 Web Codecs API에서 처리합니다. 특정 매개변수는 즉시 변경할 수 있지만 인코더를 해체해야 하는 매개변수도 있습니다. |
|
닫기 |
|
GAP |
GAP - VideoEncoder.Close()를 사용하여 제안된 WebCodecs API로 처리합니다. |
|
PPB_VideoFrame
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetTimestamp |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. |
|
SetTimestamp |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetFormat |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetSize |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetDataBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetDataBufferSize |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. |
|
PPB_View
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
단일 요소가 아니라 문서에 적용됩니다. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
WebSocket.WebSocket |
|
연결 |
|
GAP |
WebSocket.WebSocket(url, ...)
WebSocket 'open' 이벤트 |
|
닫기 |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket '메시지' 이벤트
WebSocket '오류' 이벤트
WebSocket '닫기' 이벤트 |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
그래픽 3DContext 손실 |
|
SDL |
캔버스 'webglcontextlost' 이벤트 |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
DidCreate |
|
해당 사항 없음 |
<Element>[key] |
일반 DOM 액세스를 사용하면 태그 속성을 가져올 수 있습니다. |
DidDestroy |
|
해당 사항 없음 |
해당 사항 없음 |
NaCl에 대해 트리거되지 않음 |
DidChangeView |
|
해당 사항 없음 |
요소 '크기 조정' 이벤트 |
|
DidChangeFocus |
|
해당 사항 없음 |
요소 '포커스', '포커스인', '포커스아웃' 이벤트 |
|
HandleDocumentLoad |
|
해당 사항 없음 |
GAP - MIME 유형 핸들러로 등록할 수 없음 |
앱과 매니페스트 항목을 통한 NaCl 모듈을 설정하여 특정 MIME 유형을 처리할 수 있습니다. |
PPP_MessageHandler
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleMessage |
|
embind |
MessagePort 'message' 이벤트
'메시지' 창 이벤트 |
|
HandleBlockingMessage |
|
해당 사항 없음 |
GAP - 직접 상응하는 항목 없음 |
Atomics.wait를 사용하여 기본 스레드 외부에서 유사한 동기화를 실행할 수 있습니다. 동기 플러그인 API의 에뮬레이션을 지원하기 위해 추가되었습니다. |
PPP_Messaging
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleMessage |
|
embind |
MessagePort 'message' 이벤트
Window 'message' 이벤트 |
|
PPP_MouseLock
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
MouseLockLost |
|
SDL |
요소 'pointerlockchange', 'pointerlockerror' 이벤트 |
|
IRT
PPB_Audio
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
x |
SDL(부분) |
GAP(부분적) - AudioWorkletNode와 대략적으로 동일 |
AudioWorkletSpec은 완료되었지만 이 API에는 AudioDeviceClient가 더 적합할 수 있습니다. 커뮤니티에서 아직 AudioDeviceClient를 지정하고 있습니다. Worklet은 이 API에 상응하는 대략적인 도구가 아닐 수 있습니다. |
GetCurrentConfig |
|
SDL |
AudioContext.* (전달된 설정을 다시 가져옵니다.) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start(매개변수) |
버퍼에 연결되는 대신 매번 전달됩니다. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start(매개변수) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio는 32비트 부동 소수점만 사용하고 PPAPI는 16비트 int를 사용합니다. |
PPAPI는 이론적으로 여러 샘플링 크기를 지원합니다. 실제로는 16비트 샘플만 지원합니다. 안타깝게도 개발자들은 메모리 사용량을 줄이기 위해 16비트 샘플 크기를 요청했습니다. Web Audio 사양의 다음 버전에서는 16비트 샘플 지원을 구현합니다. decodeAudioData에서 가져온 오디오에 16비트 버퍼를 사용하여 Firefox와 유사하게 AudioBuffer 최적화를 구현할 수 있습니다. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
CreateStereo16Bit |
|
GAP |
GAP - 32비트 부동 소수점 샘플만 지원됨 |
Web Audio 사양의 다음 버전에서는 16비트 샘플 지원을 구현합니다. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate(기본 생성자에서 가져옴) |
AudioContext는 기본적으로 하드웨어 오디오 기기의 실제 샘플링 레이트와 일치하는 기본 샘플링 레이트를 갖습니다. |
RecommendSampleFrameCount |
|
GAP |
GAP - 계획된 AudioDeviceClient로 처리됩니다. |
사용자 지정 크기를 허용하는 미해결 문제가 있지만 아직 정의되지 않았습니다. 이 경우 지정된 하드웨어에 적합한 크기를 알려주는 AudioDeviceClient에서 가장 잘 처리할 수 있습니다. |
PPB_Console
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
로그 |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
LogWithSource에서 제공하는 기능에 대해 개발자가 제기한 구체적인 사용 사례가 없는 한 Console API는 충분히 완벽한 대체 API로 간주됩니다. DevTools 소스 맵은 원래 소스 언어로 트랜스파일된 JavaScript를 디버그하는 데 사용할 수 있습니다. |
PPB_Core
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
getTime |
|
utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== 정의되지 않음 |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
동등한 동기화를 구축할 수 있습니다. |
PPB_FileIO
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
window.chooseFileSystemEntries() |
Create와 Open은 다르게 사용되지만, 그 요소는 동일한 힘입니다. |
열기 |
|
FS (일부) |
window.chooseFileSystemEntries() |
|
쿼리 |
|
FS(부분) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP(부분적) - Blob.type을 사용하여 MIME 유형을 확인할 수도 있습니다. 네이티브 파일 시스템 API로는 파일 시스템 유형, 생성 시간, 마지막 액세스 시간을 확인할 수 없습니다. |
터치 |
|
FS (일부) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
읽기 |
|
FS (일부) |
Blob.slice().arrayBuffer() |
|
쓰기 |
|
FS(부분) |
FileSystemWriter.write() |
|
SetLength |
|
FS(부분) |
FileSystemWriter.truncate() |
|
플러시 |
|
GAP(부분) |
GAP (일부) - FileSystemWrite.close()가 호출되면 파일이 플러시됨 |
이는 네이티브 파일 시스템 API 파일이 OS에 노출되므로 데이터가 OS에 표시되기 전에 세이프 브라우징 검사를 실행해야 하기 때문에 의도적으로 설계된 것입니다. |
닫기 |
|
FS (일부) |
FileSystemWriter.close() |
대기 중인 작업을 취소하지 않지만 지금까지 쓴 모든 데이터를 디스크에 플러시합니다. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() 또는 Blob.arrayBuffer() |
여러 하위 범위 읽기를 동시에 허용합니다. |
PPB_FileRef
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS(부분) |
FileSystem.type |
|
GetName |
|
FS(부분) |
File.name |
|
GetPath |
|
FS(부분) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 FileSystemHandle.resolve(FileSystemHandle)를 사용하여 파일이 포함된 디렉터리의 참조에서 파일의 상대 경로를 확인할 수 있습니다. |
파일의 절대 경로를 확인할 수 없으며 사용자는 파일이 포함된 디렉터리에 액세스할 수 있는 권한을 부여해야 합니다. |
GetParent |
|
FS (일부) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 FileSystemHandle.resolve(FileSystemHandle)를 사용하여 파일이 포함된 디렉터리의 참조에서 파일의 상대 경로를 확인할 수 있습니다. |
사용자가 파일이 포함된 디렉터리에 액세스할 수 있는 권한을 부여해야 합니다. |
MakeDirectory |
|
FS(부분) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
터치 |
|
FS (일부) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
수정 시간은 글을 쓰면 부풀릴 수 있습니다. |
삭제 |
|
FS(부분) |
FileSystemDirectoryHandle.removeEntry() |
PPAPI와 달리 디렉터리는 비어 있을 필요가 없습니다. |
이름 바꾸기 |
|
FS(부분) |
GAP(부분적) - 네이티브 파일 시스템 API를 사용하면 새 이름의 FileSystemFileHandle.getFile()과 이전 파일의 콘텐츠가 포함된 FileSystemFileHandle.createWriter().write()를 조합하여 파일을 새 이름으로 쓸 수 있습니다. 그런 다음 FileSystemDirectoryHandle.removeEntry() 를 사용하여 이전 파일을 삭제합니다. |
네이티브 파일 시스템 API에는 이 작업을 한 번에 실행하는 직접 API가 없습니다. |
쿼리 |
|
GAP (일부) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (일부) - Blob.type을 사용하여 MIME 유형을 확인할 수도 있습니다. 네이티브 파일 시스템 API로는 파일 시스템 유형, 생성 시간, 마지막 액세스 시간을 확인할 수 없습니다. |
ReadDirectoryEntries |
|
FS (일부) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
FS(부분) |
window.requestFileSystem |
JS API는 한 단계로 두 작업을 모두 수행 |
열기 |
|
GAP |
window.requestFileSystem |
JS API는 한 단계에서 둘 다 실행합니다. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
샘플 |
|
SDL |
게임패드.* |
게임패드 객체는 NavigationStart와 관련된 타임스탬프를 노출합니다. 다음 페이지에서 하드웨어로부터 데이터가 수신되면 업데이트됩니다. https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
Canvas.getContext('2d') |
|
설명 |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
스크롤 |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP(부분) - drawImage를 사용하여 캔버스를 자체에 오프셋으로 그린 다음 나머지를 채우는 방식으로 구현할 수 있습니다. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
플러시 |
|
GAP |
직접 상응하는 항목 없음 |
GAP(부분) - 항상 그리기 코드 끝에 암시적 플러시가 있습니다. 이는 변경되지 않을 가능성이 큽니다. 그러나
OffscreenCanvas
와
ImageBitmapRenderingContext
의 조합은 유사한 기능을 제공합니다. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (일부) - WebGL 2.0 및 Emscripten의 OpenGL ES 3.0 노출은 PPAPI를 통해 구성할 수 있는 모든 매개변수를 설정할 수 있는 사용자 정의 다중 샘플링 프레임 버퍼를 지원합니다. |
만들기 |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
직접 상응하는 항목 없음 |
GAP (일부) -
그리기 코드의 끝에는 항상 암시적 플러시가 있습니다. 가능성 낮음
변경할 수 있습니다 그러나
OffscreenCanvas
와
ImageBitmapRenderingContext
의 조합은 유사한 기능을 제공합니다. |
PPB_ImageData
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetNativeImageDataFormat |
|
SDL |
ImageData는 RGBA 순서를 요구합니다. |
|
IsImageDataFormatSupported |
|
SDL |
ImageData는 RGBA 순서를 요구합니다. |
|
만들기 |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
설명 |
|
SDL |
ImageData에는 항상 stride가 없습니다. |
|
지도 |
|
SDL |
ImageData.data |
|
매핑 해제 |
|
SDL |
ImageData.data |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
RequestInputEvents |
|
SDL |
직접 상응하는 항목 없음 |
JS/Wasm이 기본 스레드에서 실행되고 교차 프로세스 왕복을 일으키지 않고도 이벤트를 더 저렴하게 필터링할 수 있으므로 이 기능의 누락은 그다지 관련성이 없습니다. |
RequestFilteringInputEvents |
|
SDL |
마우스* 키* 휠* 터치* 구성* 이벤트 |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
이벤트 클래스 자손 |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
'dblclick'과 'mousedown' 이벤트 비교 |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode에는 이 정보가 포함되어 있지만 불완전합니다. |
WheelEvent.deltaMode API 구현에 관한 논의가 있습니다. https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode에는 이 정보가 포함되어 있지만 불완전합니다. |
다음 링크에서 WheelEvent.deltaMode API 구현에 관해 논의해 보세요. https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (직접 확인) |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
이 데이터는 CompositionEvent.data에서 가져올 수 있습니다. |
GetSegmentOffset |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetTargetSegment |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetSelection |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_Instance
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
BindGraphics |
|
SDL |
Canvas.getContext(결합이 자동이므로 무의미함). |
|
IsFullFrame |
|
GAP |
GAP - MIME 유형 핸들러에 상응하는 항목이 없습니다. |
NaCl 앱은 특정 MIME 유형을 처리하고 전체 문서를 소유하도록 등록할 수 있습니다. |
DidCreate |
|
해당 사항 없음 |
<Element>[key] |
일반 DOM 액세스를 사용하면 태그 속성을 가져올 수 있습니다. |
DidDestroy |
|
해당 사항 없음 |
해당 사항 없음 |
NaCl에 대해 트리거되지 않음 |
DidChangeView |
|
해당 사항 없음 |
요소 '크기 조정' 이벤트 |
|
DidChangeFocus |
|
해당 사항 없음 |
요소 '포커스', '포커스인', '포커스아웃' 이벤트 |
|
HandleDocumentLoad |
|
해당 사항 없음 |
GAP - mime 유형 핸들러로 등록할 방법이 없음 |
앱과 매니페스트 항목을 통한 NaCl 모듈을 설정하여 특정 MIME 유형을 처리할 수 있습니다. |
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
구성 |
|
GAP |
getUserMedia() |
getUserMedia()의 제약 조건은 MediaStreamTrack에서 사용할 구성 값을 제공할 수 있습니다. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - 동등하지 않음 |
|
RecycleBuffer |
|
GAP |
GAP - 동등하지 않음 |
|
닫기 |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
캔버스 캡처 |
캔버스 캡처는 프로그래매틱 방식으로 동영상 프레임을 도입하는 기능을 제공합니다. |
구성 |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (일부) - Web API에서 사용할 수 있는 구성 범위는 PPAPI와 다를 수 있습니다. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES에 해당 없음 |
MediaStream을 미리 로드할 수 없으므로 버퍼링되지 않습니다. https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT에 해당 없음 |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - 동등하지 않음 |
|
RecycleFrame |
|
GAP |
GAP - 동등하지 않음 |
|
닫기 |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - 동등하지 않음 |
|
PutFrame |
|
GAP |
GAP - 동등하지 않음 |
|
PPB_MessageLoop
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
해당 사항 없음 |
대부분은 중요하지 않으며 작업자는 암시적 이벤트 루프를 가져옵니다. |
|
GetForMainThread |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
GetCurrent |
|
해당 사항 없음 |
대부분은 중요하지 않으며 작업자는 암시적 이벤트 루프를 가져옵니다. |
|
AttachToCurrentThread |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
실행 |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PostWork |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PostQuit |
|
해당 사항 없음 |
대부분 작업자가 암시적 이벤트 루프를 얻습니다. |
|
PPB_Messaging
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
PostMessage |
|
해당 사항 없음 |
Window.postMessage |
|
RegisterMessageHandler |
|
해당 사항 없음 |
Window.addEventListener |
|
UnregisterMessageHandler |
|
해당 사항 없음 |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
SetCursor |
|
SDL |
Element.style.cursor |
동일한 스톡 커서 집합이 지원됩니다.
url(..)을 사용하여 커스텀 커서를 수행할 수 있습니다.
동적 맞춤 커서는 데이터 URI를 사용하여 수행할 수 있습니다.
CSS3에서는 핫스팟 지정을 지원합니다. |
PPB_MouseLock
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
여러 가지 방법 |
|
OpenGLES |
기능 면에서 WebGL 1.0에 가깝습니다. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
SetTextInputType |
|
GAP |
GAP - 입력 방식 편집기 API로 채울 수 있음 |
일부 개발자는 이러한 방식으로 힌트를 주거나 캔버스 내에서 IME 이벤트/출력을 가로채고 인라인으로 표시하는 기능을 선호합니다. |
UpdateCaretPosition |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - Input Method Editor API에 의해 채워졌을 수 있음 |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
new XMLHttpRequest(); |
|
열기 |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - 해당되는 XMLHTTPRequest 없음 |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 'progress' 이벤트 |
|
|
|
GAP |
FetchObserver |
아직 사양 또는 구현되지 않음 https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 'progress' 이벤트 |
|
|
|
GAP |
FetchObserver |
아직 사양화 또는 구현되지 않음. https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Fetch Response* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (응답은 본문입니다.) |
|
FinishStreamingToFile |
|
embind |
GAP - 직접 상응하는 항목 없음 |
XMLHttpRequest와 Fetch는 모두 저장소로 직접 스트리밍하는 대신 메모리로 스트리밍한다고 가정합니다. |
닫기 |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal 및 AbortController |
|
PPB_URLRequestInfo
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
XMLHttpRequest |
|
|
|
embind |
가져오기 요청 |
|
SetProperty |
|
GAP |
GAP - XMLHttpRequest에 직접 상응하는 항목이 없음 |
XMLHttpRequest는 리디렉션 후 요청당 한도를 제한하고, 파일로 스트리밍하고, 리퍼러 또는 사용자 인증 정보를 설정하는 직접적인 방법을 제공하지 않습니다. |
|
|
embind |
요청* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - 둘 다 한 조각이 아닌 전체가 있어야 합니다. |
|
|
embind |
import(.., options:body)
|
|
AppendFileToBody |
|
GAP |
import() 업로드 스트리밍 |
https://www.chromestatus.com/features/5274139738767360 |
|
|
해당 사항 없음 |
<form> |
FileReader로 읽고 업로드할 수도 있지만 AppendDataToBody와 비슷합니다. |
PPB_URLResponseInfo
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + 기타 |
|
|
|
embind |
Fetch Response* |
|
GetBodyAsFileRef |
|
embind |
응답 가져오기(본문) .blob() |
스토리지 레이어가 전송을 최적화한다고 가정합니다. |
PPB_Var
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
해당 사항 없음 |
해당 사항 없음 |
|
VarToResource |
|
해당 사항 없음 |
해당 사항 없음 |
|
PPB_VarArray
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
가져오기 |
|
embind |
Array[i] |
|
이제 |
|
embind |
배열[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
지도 |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
Asm.js/WASM 모듈은 단일 선형 메모리 힙 이외의 ArrayBuffer 영역을 매핑할 수 없습니다.
향후 여러 메모리 또는 메모리 매핑을 사용하면 이 문제가 개선될 수 있습니다. |
매핑 해제 |
|
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_VarDictionary
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
embind |
{} |
|
가져오기 |
|
embind |
<Object>[i] |
|
이제 |
|
embind |
<객체>[i] = x |
|
삭제 |
|
embind |
<Object>[i] 삭제 |
|
HasKey |
|
embind |
<Object>의 x |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
문자 그대로 상응하는 것은 없지만 빌드할 수 있습니다. |
PPB_VideoDecoder
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
GAP - VideoDecoder()를 사용하는 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
초기화 |
|
GAP |
GAP - VideoDecoder() 초기화 매개변수(VideoDecoderInitParameters)를 사용하는 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoDecoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable)을 사용하여 제안된 WebCodecs API로 처리됩니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. 현재 디자인은 자동으로 사진을 재활용하고 디코딩 프로세스를 유지합니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
플러시 |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. API는 Flush()로 호출되지만 디코딩 호출과 관련하여 API의 시퀀스가 어떻게 지정될지는 아직 논의 중입니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
재설정 |
|
GAP |
GAP - VideoDecoder 인스턴스를 소멸하고 새 인스턴스를 만들어 제안된 WebCodecs API로 처리됩니다. 전용 재설정 메서드만큼 효율적이지는 않지만, 재설정() API의 의미 체계는 계속 논의되고 있습니다. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
GAP - VideoEncoder()를 사용하는 제안된 WebCodecs API로 처리됩니다. |
|
GetSupportedProfiles |
|
GAP |
GAP (일부) - navigator.mediaCapabilities.encodingInfo() |
지원되는 프로필은 하나씩 확인해야 합니다. |
초기화 |
|
GAP |
GAP - VideoEncoder() 초기화 매개변수를 사용하여 제안된 WebCodecs API로 처리됩니다. |
|
GetFramesRequired |
|
GAP |
GAP - 동등하지 않음 |
Web Codecs API에서 내부적으로 사용하는 프레임 풀이 노출될 가능성은 낮습니다. |
GetFrameCodedSize |
|
GAP |
GAP - 동등하지 않음 |
Web Codecs API에서 내부적으로 사용하는 프레임 풀이 노출될 가능성은 낮습니다. |
GetVideoFrame |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoEncoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. 이렇게 하면 인코딩 전에 단일 프레임을 가져와서 데이터로 채우는 대신 데이터를 읽을 수 있는 스트림에서 직접 인코딩합니다. |
|
인코딩 |
|
GAP |
GAP - ReadableStream.pipeThrough(VideoEncoder)를 사용하여 제안된 WebCodecs API로 처리됩니다. |
|
GetBitstreamBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. 현재 설계는 파이프를 통해 전달되는 인코딩된 비트스트림 버퍼를 자동으로 통과합니다. |
WebCodecs API는 현재 비트스트림 버퍼를 풀링하는 대신 복사할 수 있다고 가정하므로 재활용할 필요가 없습니다. |
RecycleBitstreamBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. 현재 설계는 인코딩 프로세스를 계속 진행하기 위해 버퍼를 자동으로 재활용합니다. |
성능 영향이 더 적으므로 향후 변경될 가능성은 낮습니다. |
RequestEncodingParametersChange |
|
GAP |
GAP - 제안된 Web Codecs API에서 처리합니다. 특정 매개변수는 즉시 변경할 수 있지만 인코더를 해체해야 하는 매개변수도 있습니다. |
|
닫기 |
|
GAP |
GAP - VideoEncoder.Close()를 사용하여 제안된 WebCodecs API로 처리합니다. |
|
PPB_VideoFrame
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetTimestamp |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. |
|
SetTimestamp |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetFormat |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetSize |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetDataBuffer |
|
GAP |
GAP - 제안된 WebCodecs API로 처리합니다. |
|
GetDataBufferSize |
|
GAP |
GAP - 제안된 WebCodecs API로 처리됩니다. |
|
PPB_View
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
단일 요소가 아니라 문서에 적용됩니다. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
|
GAP |
WebSocket.WebSocket |
|
연결 |
|
GAP |
WebSocket.WebSocket(url, ...)
WebSocket 'open' 이벤트 |
|
닫기 |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket '메시지' 이벤트
WebSocket '오류' 이벤트
WebSocket '닫기' 이벤트 |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
그래픽 3DContext 손실 |
|
SDL |
캔버스 'webglcontextlost' 이벤트 |
|
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
DidCreate |
|
해당 사항 없음 |
<Element>[key] |
일반 DOM 액세스를 사용하면 태그 속성을 가져올 수 있습니다. |
DidDestroy |
|
해당 사항 없음 |
해당 사항 없음 |
NaCl에 대해 트리거되지 않음 |
DidChangeView |
|
해당 사항 없음 |
요소 '크기 조정' 이벤트 |
|
DidChangeFocus |
|
해당 사항 없음 |
요소 '포커스', '포커스인', '포커스아웃' 이벤트 |
|
HandleDocumentLoad |
|
해당 사항 없음 |
GAP - MIME 유형 핸들러로 등록할 수 없음 |
앱과 매니페스트 항목을 통한 NaCl 모듈을 설정하여 특정 MIME 유형을 처리할 수 있습니다. |
PPP_MessageHandler
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleMessage |
|
embind |
MessagePort 'message' 이벤트
'메시지' 창 이벤트 |
|
HandleBlockingMessage |
|
해당 사항 없음 |
GAP - 직접 상응하는 항목 없음 |
Atomics.wait를 사용하여 기본 스레드 외부에서 유사한 동기화를 실행할 수 있습니다. 동기 플러그인 API의 에뮬레이션을 지원하기 위해 추가되었습니다. |
PPP_Messaging
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
HandleMessage |
|
embind |
MessagePort 'message' 이벤트
Window 'message' 이벤트 |
|
PPP_MouseLock
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
MouseLockLost |
|
SDL |
요소 'pointerlockchange', 'pointerlockerror' 이벤트 |
|
PPAPI(앱)
PPB_HostResolver
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
x |
GAP |
GAP(부분) - 직접 상응하는 항목 없음 |
|
해결 |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
GetCanonicalName |
x |
GAP |
GAP(부분) - 직접 상응하는 항목 없음 |
|
GetNetAddressCount |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
GetNetAddress |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
PPB_NetAddress
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
CreateFromIPv4Address |
x |
GAP |
GAP(부분) - 직접 상응하는 항목 없음 |
|
CreateFromIPv6Address |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
GetFamily |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
DescribeAsString |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (일부) - 직접 상응하는 항목 없음 |
|
PPB_NetworkList
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetCount |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetName |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetType |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetState |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetIpAddress |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetDisplayName |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
GetMTU |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_NetworkMonitor
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
만들기 |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
UpdateNetworkList |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_NetworkProxy
PPAPI 메서드 |
스레드 가정 |
Emscripten |
웹 API |
제한사항 |
GetProxyForURL |
x |
GAP |
GAP - 직접 상응하는 항목 없음 |
|
PPB_TCPSocket 및 PPB_UDPSocket
이전을 위한 직접적인 1:1 매핑은 없습니다. 대신 아래에 몇 가지 사용자 시나리오와 권장되는 이전 경로를 설명했습니다.
*: 향후 WebTransport도 가능
**: 사용 가능 여부는 chromestatus를 참고하세요.