¿El Proyecto Fugu se completó?

Dado que uno de los objetivos del equipo de Project Fugu es permitir que los desarrolladores puedan hacer en la Web todo lo que pueden las apps específicas de la plataforma, el equipo se ha dedicado a agregar las funciones que faltaban a los desarrolladores web para cerrar esta brecha entre las apps. Si no me crees, consulta la sección “Shipped” del rastreador de la API de Fugu. Estas son las 55 APIs enviadas, en orden de la menos a la más reciente:

Nombre de la API Enviado en
API de Web BluetoothChrome 56
API de WebUSBChrome 61
Objetivo de participación webChrome 71
Nivel 2 de la API de Web ShareChrome 75
Portapapeles asíncrono: Lee y escribe imágenesChrome 76
Porcentaje de vistas web objetivo de nivel 2Chrome 76
Ingresa una sugerencia de claveChrome 77
Expande la cuota de almacenamientoChrome 78
API de Get Installed Related AppsChrome 80
Sincronización periódica en segundo planoChrome 80
desktop-pwas: Se admite el modo de visualización "minimal-ui"Chrome 80
Códecs de compresiónChrome 80
API de ContactosChrome 80
API de BadgingChrome 81
Permite que la API de Badging se use desde un service worker a través de PushChrome 81
API de Barcode DetectionChrome 83
API de Content IndexingChrome 84
WebOTPChrome 84
API de Screen Wake LockChrome 84
API de Streams: transmisiones transferiblesChrome 85
Accesos directos de la appChrome 85
Acceso al sistema de archivosChrome 86
Compatibilidad con texto/html para la API de Async ClipboardChrome 86
Compatibilidad con desplazamiento lateral y inclinación para la cámaraChrome 87
FUGU implementa la captura de la salida de audio del sistema y de la aplicación en auriculares y bocinas Chrome 88
PointerLock unadjustedMovementChrome 88
Crea un selector de fotos o videos similar al selector de fotos de AndroidChrome 88
Integración de Compartir en la Web (navigator.share) con Windows 10Chrome 88
NFC webChrome 89
WebHID (dispositivo de interfaz humana)Chrome 89
API de Web SerialChrome 89
Compartir en la Web en computadorasChrome 89
API de Handwriting RecognitionChrome 90
Configuración administrada para aplicaciones webChrome 91
Cómo ejecutar una AWP en Acceso al SOChrome 91
WebCodecsChrome 93
Detección de inactividadChrome 94
API de EyeDropperChrome 95
Menú de acceso directo a la app para AWP en macOS y LinuxChrome 96
Registro de controladores de protocolo de URL para AWPs Chrome 96
WebTransportChrome 97
Portapapeles: Cuando se pegan imágenes retina, se pierden los metadatos de pHYs.Chrome 98
Las AWP deberían poder desinstalarse de la misma manera que una "app real".Chrome 99
NFC web: NDEFReader makeReadOnly()Chrome 100
Ubicación de ventanas en varias pantallasChrome 100
HIDDevice forget()Chrome 100
USBDevice forget()Chrome 101
Comportamiento de sameObject de Web USBChrome 101
Superposición de controles de ventana para apps web para computadoras de escritorio instaladasChrome 102
Manejo de archivosChrome 102
La API de chrome.management ya no puede interactuar con apps de AWPChrome 102
SerialPort forget()Chrome 103
Acceso a fuentes localesChrome 103
Solicitud de Fugu: Atajos dinámicos de apps (atajos v2)Chrome 104
Formatos personalizados web para la API de Async ClipboardChrome 104
Todas las APIs de Fugu enviadas hasta el momento.

Es una lista larga, y tenemos mucho más en mente. Aún hay algunas APIs y funciones en prueba para desarrolladores (es decir, implementadas, pero detrás de una marca de función), algunas en las que comenzamos a trabajar y muchas en consideración. Como puedes ver, no es momento de relajarse y decir que terminamos.

Métodos de archivos síncronos para el sistema de archivos privado de origen

Todo lo contrario, en lugar de declarar que nuestro esfuerzo está completo, en realidad, estamos empezando. Por ejemplo, considera el siguiente gráfico que muestra el aumento exponencial del uso relativo del método navigator.storage.getDirectory(), que se usa como punto de entrada al sistema de archivos privados de origen (OPFS). Este método se usa, por ejemplo, para las necesidades de almacenamiento de alto rendimiento de Photoshop, que a la comunidad de almacenamiento le interesa mucho desde que comenzó la baja de Web SQL y hasta antes.

Gráfico que muestra el aumento repentino del uso relativo del método navigator.storage.getDirectory.

Ahora que más personas usan los OPFS, surgieron requisitos adicionales. Por ejemplo, la necesidad de un conjunto de métodos de archivos completamente síncronos en un contexto de trabajador (consulta whatwg/fs#7 para obtener información general). Si bien las nuevas APIs web suelen ser asíncronas, tener métodos síncronos facilitaría mucho el trabajo con el OPFS en un contexto de Wasm y, como esto ocurre en un trabajador, no se puede bloquear el subproceso principal.

Mejoras de privacidad para las APIs de hardware

Otro ejemplo son las APIs de hardware que te permiten conectarte a dispositivos HID, seriales, USB, Bluetooth y NFC. Si bien algunas de estas APIs existen desde hace tiempo, hasta hace poco no había forma de olvidar un dispositivo al que te habías conectado anteriormente. Ahora sí, gracias a los métodos forget() para algunas de las APIs. Por ejemplo, aquí se muestra cómo olvidar un dispositivo serie conectado anteriormente, lo que mejora la privacidad de la API.

// Request a serial port.
const port = await navigator.serial.requestPort();
// Then later revoke permission to the serial port.
await port.forget();

Refinamientos para la API de Multi-Screen Window Placement

Un último ejemplo es la API de Multi-Screen Window Placement, en la que, en función de los comentarios de los desarrolladores, las etiquetas de pantalla genéricas anteriores, como "Internal Display 1", se reemplazaron por etiquetas más significativas, como "Built-in Retina Display", para que los usuarios puedan asociar estas etiquetas con las pantallas de su configuración multipantalla con mayor facilidad.

Conclusiones

Como puedes ver en estos tres ejemplos, el proyecto Fugu está lejos de estar terminado. Continúa usando o comienza a usar nuestras APIs y envía comentarios. Dado que todas las especificaciones de Fugu se desarrollan de forma abierta en GitHub, puedes registrar un problema de especificación en el repositorio de GitHub correspondiente o agregar tus comentarios a un problema existente. Si encuentras un error en la implementación de Chrome o descubres que es diferente a la especificación, informa el error en new.crbug.com. Asegúrate de incluir tantos detalles como sea posible y proporciona instrucciones simples para reproducirlo.

Además, si te preocupa la compatibilidad con el navegador, muchas APIs de Fugu son excelentes mejoras progresivas. Consulta mi artículo SVGcode: una AWP para convertir imágenes de trama en gráficos vectoriales SVG para obtener inspiración. Tampoco consideramos que nuestro trabajo está terminado hasta que estas APIs sean interoperables, y seguiremos presionando para que otros navegadores las estandaricen, prueben y adopten.