🎯 Проекты 1 мин чтения

Datasette Lite переезжает с Web Workers на Service Workers для запуска ASGI в браузере

Простым языком

Datasette — это Python-инструмент для просмотра и публикации баз данных. Datasette Lite запускает его прямо в браузере через Pyodide (Python, скомпилированный в WebAssembly). Раньше для этого использовались Web Workers — изолированные потоки, которые не могли выполнить JavaScript из ответов. Теперь вместо них Service Workers — сетевые прокси на уровне браузера, которые позволяют ответам обрабатываться нормально, включая JS-скрипты.

Что нового

  • Замена Web Worker на Service Worker для перехвата HTTP-запросов в браузере
  • Service Worker работает как сетевой прокси, а не как изолированный поток — это позволяет исполнять JS в ответах
  • ASGI-приложение (FastAPI/Starlette) запускается внутри Pyodide и обрабатывает запросы, перехваченные Service Worker'ом
  • Реализация выполнена AI-агентом (Claude Opus 4.8) по задаче, а не вручную

Вердикт

Паттерн Service Worker + Pyodide + ASGI применим для любых Python-веб-приложений, которые нужно запускать в браузере без сервера. Ограничения: это ранний прототип, нет метрик производительности, Service Workers не работают в некоторых контекстах (incognito, HTTP). Для Datasette Lite миграция ещё не завершена.

Service Worker в роли ASGI-прокси позволяет Pyodide-приложениям в браузере отдавать полноценные HTTP-ответы с исполняемым JS — в отличие от Web Worker, где <script> теги мертвы.