Python ASGI-приложения в браузере через Pyodide + Service Worker вместо Web Worker
Простым языком
Datasette Lite запускает Python прямо в браузере через WebAssembly. Раньше для этого использовался Web Worker — фоновый поток, который перехватывал навигацию и подставлял HTML от Python-кода. Но JavaScript внутри этого HTML не работал, потому что Web Worker живёт в изолированном контексте. Новый подход через Service Worker обходит это ограничение: браузер воспринимает ответы как обычные HTTP-ответы от того же сайта и исполняет JS-код в них.
Что нового
- Замена Web Worker на Service Worker для перехвата fetch-запросов — браузер корректно исполняет <script>-теги в ответах
- ASGI-приложение выполняется в Pyodide (WebAssembly), Service Worker подменяет навигационные запросы результатами
- Решение сгенерировано Claude Opus 4.8 в Claude Code — демонстрация генерации рабочего инфраструктурного кода LLM
- Работает с Datasette 1.0a31 — реальный production-ready фреймворк, а не hello-world
Вердикт
Паттерн применим, если нужно запускать Python ASGI-приложения в браузере с полной поддержкой клиентского JS. Ограничение: Simon Willison сам отмечает, что ещё разбирается в деталях работы — это early-stage research, не готовый фреймворк. Для production нужна собственная валидация security-модели Service Worker в вашем контексте.
Service Worker вместо Web Worker для Pyodide-приложений решает проблему неисполнения <script>-тегов в сгенерированном HTML — браузер видит ответ как обычный fetch от origin и исполняет JS корректно.