Solid简介 #

一、什么是Solid #

Solid 是一个用于构建用户界面的声明式、高效且灵活的 JavaScript 库。它采用细粒度响应式系统,在运行时直接更新 DOM,无需虚拟 DOM,性能卓越。

1.1 核心定位 #

text
Solid = 细粒度响应式 + 直接DOM操作

Solid 的核心思想:

  • 细粒度响应式:精确追踪依赖,最小化更新
  • 无虚拟DOM:直接操作真实 DOM,零运行时开销
  • 编译时优化:JSX 编译为高效的 DOM 操作
  • 类React语法:熟悉的 JSX 和组件模型

1.2 核心特点 #

特点 说明
细粒度响应式 精确依赖追踪,最小化更新范围
无虚拟DOM 直接操作 DOM,性能卓越
零运行时 编译后代码极小
类React语法 JSX + Hooks 风格,学习成本低
高性能 基准测试中表现优异
TypeScript支持 完善的类型推断

二、细粒度响应式原理 #

2.1 响应式系统对比 #

text
┌─────────────────────────────────────────────────────────────┐
│                    React 状态更新                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   setState() → 整个组件重新渲染 → 虚拟DOM Diff → 局部更新    │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    Component                         │  │
│   │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐           │  │
│   │  │ A   │ │ B   │ │ C   │ │ D   │ │ E   │           │  │
│   │  │更新 │ │不变 │ │不变 │ │不变 │ │不变 │           │  │
│   │  └─────┘ └─────┘ └─────┘ └─────┘ └─────┘           │  │
│   │              全部重新执行                             │  │
│   └─────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                    Solid 细粒度更新                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   setSignal() → 精确追踪依赖 → 只更新受影响的DOM            │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    Component                         │  │
│   │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐           │  │
│   │  │ A   │ │ B   │ │ C   │ │ D   │ │ E   │           │  │
│   │  │更新 │ │跳过 │ │跳过 │ │跳过 │ │跳过 │           │  │
│   │  └─────┘ └─────┘ └─────┘ └─────┘ └─────┘           │  │
│   │              只执行相关代码                           │  │
│   └─────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

2.2 响应式原语 #

Solid 提供三个核心响应式原语:

jsx
import { createSignal, createMemo, createEffect } from 'solid-js';

function Counter() {
  const [count, setCount] = createSignal(0);
  
  const doubled = createMemo(() => count() * 2);
  
  createEffect(() => {
    console.log(`Count is ${count()}`);
  });
  
  return (
    <div>
      <p>Count: {count()}</p>
      <p>Doubled: {doubled()}</p>
      <button onClick={() => setCount(c => c + 1)}>Increment</button>
    </div>
  );
}

2.3 依赖追踪机制 #

text
Signal (状态源)
    │
    ├──→ Memo (派生状态)
    │        │
    │        └──→ Effect (副作用)
    │
    └──→ Effect (副作用)

当 Signal 变化时:
1. 通知所有依赖的 Memo 重新计算
2. 通知所有依赖的 Effect 重新执行
3. 更新绑定的 DOM 节点

三、与传统框架对比 #

3.1 Solid vs React #

方面 Solid React
运行方式 编译时 + 运行时 运行时
虚拟DOM
包体积 ~7KB ~42KB
响应式 Signal useState
更新粒度 细粒度 组件级
学习曲线 低(类React) 中等
生态成熟度 发展中 成熟

3.2 Solid vs Vue #

方面 Solid Vue
模板语法 JSX HTML模板
响应式 Signal Proxy
包体积 ~7KB ~33KB
更新粒度 细粒度 组件级
学习曲线
单文件组件 .jsx/.tsx .vue

3.3 Solid vs Svelte #

方面 Solid Svelte
编译方式 JSX编译 模板编译
运行时 有(极小)
包体积 ~7KB ~2KB
响应式 Signal 编译时追踪
学习曲线
TypeScript 原生支持 支持

3.4 性能对比 #

text
js-framework-benchmark 结果

操作耗时(越小越好)
├── Solid:     1.0ms  ██
├── Svelte:    1.2ms  ███
├── Vue 3:     2.1ms  █████
└── React:     3.5ms  ███████

启动时间(越小越好)
├── Solid:     5ms    ██
├── Svelte:    4ms    ██
├── Vue 3:     28ms   ████████████
└── React:     45ms   ███████████████████

四、应用场景 #

4.1 适合场景 #

text
✅ 推荐使用 Solid
├── 高性能Web应用
├── 实时数据展示
├── 复杂交互界面
├── 大型SPA应用
├── 嵌入式组件
└── 渐进式增强

4.2 SolidStart 全栈应用 #

SolidStart 是 Solid 的官方全栈框架:

text
SolidStart 特性
├── 文件系统路由
├── 服务端渲染(SSR)
├── 静态站点生成(SSG)
├── API 路由
├── TypeScript 支持
└── 流式渲染

4.3 实际案例 #

text
知名使用案例
├── Cloudflare 部分产品
├── Netlify 部分功能
├── 各种高性能Dashboard
└── 实时协作工具

五、技术栈概览 #

5.1 核心技术栈 #

text
┌──────────────────────────────────────┐
│            Solid.js                  │
├──────────────────────────────────────┤
│  SolidStart    │    Solid Router    │
│  (全栈框架)    │    (路由管理)       │
├──────────────────────────────────────┤
│  Vite          │    Vitest          │
│  (构建工具)    │    (测试框架)       │
└──────────────────────────────────────┘

5.2 开发工具 #

  • VS Code 插件:Solid (vscode-solid)
  • 浏览器扩展:Solid DevTools
  • 构建工具:Vite(推荐)
  • 测试工具:Vitest + Testing Library

六、学习路线 #

text
基础阶段
├── JSX语法
├── Signal响应式
├── 组件基础
└── 事件处理

进阶阶段
├── Memo和Effect
├── Store状态管理
├── 组件通信
└── 生命周期

高级阶段
├── SolidStart
├── 服务端渲染
├── TypeScript集成
└── 性能优化

七、快速体验 #

7.1 在线体验 #

7.2 本地创建项目 #

bash
# 使用 Vite 创建项目
npm create vite@latest my-solid-app -- --template solid-ts

# 进入项目目录
cd my-solid-app

# 安装依赖
npm install

# 启动开发服务器
npm run dev

八、总结 #

Solid 的核心优势:

  • 极致性能:细粒度更新,无虚拟DOM开销
  • 熟悉语法:类React的JSX和组件模型
  • 简洁API:Signal、Memo、Effect三剑客
  • 类型安全:完善的TypeScript支持
  • 灵活强大:支持各种复杂场景

选择 Solid 的理由:

  • 追求极致性能
  • 喜欢React风格但想要更好性能
  • 构建实时数据密集型应用
  • 对细粒度响应式感兴趣
  • 希望代码简洁高效
最后更新:2026-03-28