Tudo que uma WebView oferece, sem a bagagem
Headless e fora da árvore
Sem componente React, sem tela, sem árvore de UI. Faça parsing, mutação e evaluate de HTML inteiramente fora da tela.
Runtime verdadeiramente isolado
Cada JSDOM.create() inicia seu próprio runtime QuickJS, não uma instância compartilhada do Hermes. Sem vazamento de globals entre sandboxes.
Parsing de HTML nativo
Baseado no Lexbor, o parser de HTML compatível com WHATWG mais rápido em C99, sem dependências.
DOM no formato do jsdom
querySelector, textContent, dataset e muito mais espelham o formato do DOM do jsdom, embora o uso seja diferente: tudo passa pelo evaluate() assíncrono, não pelo acesso síncrono a objetos do jsdom.
Bridge JSI síncrona
Powered by Nitro Modules, com chamadas JSI diretas, sem bridge, sem overhead de serialização JSON.
Controle total de memória
Chame dispose() para liberar deterministicamente o documento Lexbor e o runtime QuickJS, sem esperar o GC.
Uma chamada síncrona, dois motores nativos
evaluate() é a única porta de entrada para o sandbox: tudo o resto acontece nativamente, fora da bridge do JS.
- Parsing de HTML compatível com WHATWG
- Árvore DOM em memória
- querySelector / querySelectorAll
- serialize() → string HTML
- Runtime JS isolado por instância
- Bindings de DOM → delega para o Lexbor
- setTimeout / setInterval, event loop próprio
- Executa scripts arbitrários do usuário
Por que não usar simplesmente uma WebView oculta?
| Recurso | WebView (oculta) | react-native-nitro-jsdom |
|---|---|---|
| Requer um componente React | ✓ | ✕ |
| Roda headless / fora da árvore | ✕ | ✓ |
| Instâncias isoladas | Complexo | Nativo |
| Execução de JS arbitrário | ✓ | ✓ |
| API completa de DOM | ✓ | Progressiva |
| Controle de memória | Limitado | Total (dispose()) |
| Overhead de performance | Alto | Baixo |
Pronto para colocar seu primeiro DOM em um sandbox?
Instale a biblioteca e rode seu primeiro evaluate() em minutos.