Pyodide 让 ASGI 应用在浏览器中运行
Simon Willison··作者 Simon Willison
关键信息
之前的实现虽然可以渲染 HTML,但由于嵌入的 JavaScript 无法执行,导致部分 Datasette 功能和大量插件失效。Willison 表示,他让 Claude Opus 4.8 在 Claude Code for web 中协助研究这种 service worker 方案,并计划在彻底弄清机制后升级 Datasette Lite。
资讯摘要
Simon Willison 介绍了一项研究项目:使用 Pyodide 和 service worker,把 Python ASGI 应用完全运行在浏览器中。它与他现有的 Datasette Lite 有关,后者本身就是一个基于 WebAssembly、完全在浏览器中运行的 Datasette 版本。最初的实现使用了 Web Workers,并通过自定义代码拦截导航操作,再由 Python 应用生成并返回 HTML。这个方案总体可用,但有一个明显缺点:`<script>` 标签中的 JavaScript 无法执行,因此一些 Datasette 功能以及很多插件会失效。
为了寻找更好的架构,Willison 让 Claude Opus 4.8 通过 Claude Code for web 帮助分析如何在 Pyodide 中借助 Service Workers 运行 ASGI 应用。结果看起来是可行的,他已经发布了一个基础的 ASGI FastCGI 演示,以及一个在浏览器中运行 Datasette 1.0a31 的演示。Willison 说他仍在弄清这种机制的内部工作方式,但一旦理解得更完整,就会考虑把 Datasette Lite 本身升级到这个新方案。
资讯正文
<strong>研究:</strong><a href="https://github.com/simonw/research/tree/main/pyodide-asgi-browser#readme">通过 Pyodide + service worker 在浏览器中运行 Python ASGI 应用</a>
<a href="https://lite.datasette.io/">Datasette Lite</a> 是我版本的 Datasette,它完全使用 WebAssembly 中的 Pyodide 在浏览器里运行。
我最初在<a href="https://simonwillison.net/2022/May/4/datasette-lite/">四年前</a>构建它时,使用的是 Web Workers,以及通过运行 Python 应用来拦截导航操作并获取生成的 HTML 的代码。
这个方案是有效的,但缺点是,位于 <code><script></code> 标签中的任何 JavaScript 都不会执行——这会破坏一些 Datasette 功能,以及大量 Datasette 插件。
今天早上,我把<a href="https://github.com/simonw/research/pull/112">让 Claude Opus 4.8 负责这项任务</a>(在 Claude Code for web 中),目标是弄清楚如何改为在 Pyodide 中借助 Service Workers 运行 Python ASGI 应用,结果似乎真的可行!这里有一个<a href="https://simonw.github.io/research/pyodide-asgi-browser/">基础的 ASGI FastCGI 演示</a>,这里还有一个<a href="https://simonw.github.io/research/pyodide-asgi-browser/datasette.html">运行 Datasette 1.0a31 的演示</a>。
我仍在努力完全弄明白它的工作原理,但一旦搞清楚了,我计划把 Datasette Lite 本身也升级到这个方案。
标签:<a href="https://simonwillison.net/tags/javascript">javascript</a>、<a href="https://simonwillison.net/tags/python">python</a>、<a href="https://simonwillison.net/tags/datasette">datasette</a>、<a href="https://simonwillison.net/tags/asgi">asgi</a>、<a href="https://simonwillison.net/tags/service-workers">service-workers</a>、<a href="https://simonwillison.net/tags/pyodide">pyodide</a>、<a href="https://simonwillison.net/tags/datasette-lite">datasette-lite</a>、<a href="https://simonwillison.net/tags/claude-code">claude-code</a>
来源与参考
收录于 2026-05-31