<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sqlite3 on chai2010 的博客</title>
    <link>https://chai2010.cn/categories/sqlite3/</link>
    <description>Recent content in Sqlite3 on chai2010 的博客</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Mon, 31 Oct 2022 00:00:00 +0000</lastBuildDate>
    
        <atom:link href="https://chai2010.cn/categories/sqlite3/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>SQLite3 官方支持 WebAssembly！</title>
      <link>https://chai2010.cn/post/2022/sqlite3-wasm/</link>
      <pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://chai2010.cn/post/2022/sqlite3-wasm/</guid>
      
        <description>&lt;p&gt;SQLite 官方的 wasm 项目终于来了！这表示 WebAssembly 在 SQLite 社区完全进入工业级应用阶段！&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://chai2010.cn/images/2022/sqlite3-wasm/00.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;1-wasm-是什么&#34;&gt;1. WASM 是什么&lt;/h2&gt;

&lt;p&gt;WebAssembly，又名 WASM，是一种标准，它定义了一种低级编程语言，适合 (A) 作为与许多其他语言交叉编译的目标，以及 (B) 通过浏览器中的虚拟机运行。它在设计时考虑了通过 JavaScript 编写脚本，它提供了一种将 C 代码（以及其他代码）编译为 WASM 并通过 JavaScript 编写脚本的方法，尽管 JavaScript 和 C 之间还存在巨大的编程模型差异，但它为不同语言和 JS 的交互带来了标准桥梁。&lt;/p&gt;

&lt;p&gt;根据 &lt;a href=&#34;https://zh.wikipedia.org/wiki/WebAssembly&#34;&gt;Ending 定律&lt;/a&gt;：“所有可以用WebAssembly实现的终将会用WebAssembly实现”。SQLite 官方支持 WASM 只是再次证明和强化了定律有效性。实际上，在很早之前网上就有很多基于 LLVM 或 Emscripten 构建的 SQLite 库，它们最终可以被包装为 JS 库。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;扩展阅读：WASM 作为 W3C 的 第 4 个标准，已经在不同的领域取得巨大的进展。比如 Docker 发布集成 WebAssembly 的首个技术预览版。同时大量编程语言已经开始支持 WASM 平台（完整列表可参考 &lt;a href=&#34;https://wasmlang.org/&#34;&gt;https://wasmlang.org/&lt;/a&gt; ），国内的 Go+、凹语言、KCL 配置语言 等都把对 WASM 的支持作为较高的优先级。关于 WASM 的更多信息可以关注 《WebAssembly标准入门》。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;2-sqlite-官方支持-webassembly&#34;&gt;2. SQLite 官方支持 WebAssembly&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://sqlite.org/wasm/doc/ckout/index.md&#34;&gt;https://sqlite.org/wasm/doc/ckout/index.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://chai2010.cn/images/2022/sqlite3-wasm/01.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;其实早在 2022 年 9 月，Google 的 Chrome 开发团队宣布与 SQLite 开发团队合作，并开发了 SQLite 的 WebAssembly 版本，作为替代的 Web SQL 数据库 API。WebAssembly 起源于 SQLite 开发团队的努力。&lt;/p&gt;

&lt;h2 id=&#34;3-在浏览器体验-sqlite&#34;&gt;3. 在浏览器体验 SQLite&lt;/h2&gt;

&lt;p&gt;打开网址 &lt;a href=&#34;https://sqlite.org/fiddle/&#34;&gt;https://sqlite.org/fiddle/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://chai2010.cn/images/2022/sqlite3-wasm/03.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;4-项目的具体目标&#34;&gt;4. 项目的具体目标&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://chai2010.cn/images/2022/sqlite3-wasm/02.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;根据官网介绍，主要有 4 个目标：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;绑定一个低级的 sqlite3 API，在使用方面尽可能接近原生 API。&lt;/li&gt;
&lt;li&gt;更高级别的面向对象风格 API，类似于 sql.js 和 node.js 样式的实现。&lt;/li&gt;
&lt;li&gt;基于 Worker 的 API，以支持多线程环境更容易使用 SQLite 功能。&lt;/li&gt;
&lt;li&gt;基于 Worker API 的 Promise 包装，对用户完全隐藏了跨线程通信方面复杂性&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;不在此列的特性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WASM 作为 Web 标准，我们只认 UTF8 一种编码格式，UTF16 支持暂无计划&lt;/li&gt;
&lt;li&gt;WASM 虽然不局限于 Web 环境，但是 WASM 版本的 SQLite 依然是聚焦 Web 环境的场景&lt;/li&gt;
&lt;li&gt;WASM 只支持较新的特性，老旧特性将被乘机清除掉&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;简而言之，在提供底层 API 能力的同时，针对面向对象、多线程等环节提供简单易用的 API。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>