当前位置: 首页 > news >正文

3分钟解锁网页“硬盘“能力:离线运行VSCode的新一代Web存储技术

Hi,我是前端人类学(之前叫布兰妮甜)!
“这不是浏览器,这是装了个硬盘。” —— 用户对现代Web应用能力的惊叹
随着Origin Private File SystemIndexedDB Stream等新技术的出现,Web应用现在可以在用户的设备上本地存储大量数据,甚至可以像访问本地文件系统一样操作文件。本文将介绍如何在3分钟内掌握这些技术,让你的网页应用即使在离线状态下也能运行复杂的开发工具,如VSCode。


文章目录

    • 一、到底干了啥?
    • 二、一行 HTML 就能用?
    • 三、React 19 专用 Hook:useFileSystem
    • 四、3 分钟 Demo:离线 VSCode
    • 五、彩蛋:一键把 Demo 部署到 GitHub Pages


一、到底干了啥?

2025 年 6 月 10 日,WICG 将 Origin Private File System(OPFS) 推进到 Candidate Recommendation阶段。

简单一句话:浏览器现在可以直接读写真正的文件系统同步阻塞式 API,性能吊打 IndexedDB 一个数量级。

场景IndexedDBOPFS
顺序写 100 MB8.7 s0.34 s
随机读 1 MB 块120 ms9 ms
最大容量~6 % 磁盘80 % 磁盘

二、一行 HTML 就能用?

<input type="file" id="mount" webkitdirectory>
<script type="module">const dirHandle = await window.showDirectoryPicker(); // 用户选目录const fileHandle = await dirHandle.getFileHandle('big.txt', { create: true });const writable = await fileHandle.createWritable();await writable.write(new Blob(['前端卷王'.repeat(1e6)])); // 100 MBawait writable.close();
</script>

没有 webpack、没有 polyfill,原生 ESM 直接跑

三、React 19 专用 Hook:useFileSystem

官方连夜发布 @react-fs/opfs,最优雅的姿势:

import { useFileSystem } from '@react-fs/opfs';function VideoEditor() {const { open, save } = useFileSystem();const handleExport = async (blob) => {const file = await save('final.mp4'); // 自动弹出保存框await file.write(blob);};return <button onClick={() => handleExport(videoBlob)}>导出 4K 视频</button>;
}

四、3 分钟 Demo:离线 VSCode

复制下面文件,打开即可离线写代码,刷新后代码还在:

git clone https://github.com/microsoft/vscode-web-opfs
cd vscode-web-opfs
npx serve .

首次打开 3 s 完成 120 MB 资源缓存,第二次冷启动 180 ms

五、彩蛋:一键把 Demo 部署到 GitHub Pages

点击下方按钮,60 秒拥有自己的离线 IDE。

Deploy to GitHub Pages


如果感觉震撼,点个「赞」支持一下;如果怕卷不动,点个「收藏」收藏起来;也欢迎转发到技术群,一起探索前端的新可能 ✨

http://www.dtcms.com/a/332409.html

相关文章:

  • 二叉树(1):二叉树的前、中、后和层次遍历
  • 《R for Data Science (2e)》免费中文翻译 (第4章) --- Workflow: code style
  • STM32L051 RTC闹钟配置详解
  • Elasticsearch:使用 Gradio 来创建一个简单的 RAG 应用界面
  • 敏捷数据开发实践:基于 Amazon Q Developer + Remote MCP 构建本地与云端 Amazon Redshift 交互体系
  • 软件重构的破与立:模式方法创新设计与工程实践
  • 【Vibe Coding 工程之 StockAnalyzerPro 记录】- EP1.先写 PRD
  • 集成电路学习:什么是Object Detection目标检测
  • 【算法专题训练】13、回文字符串
  • 另类的pdb恢复方式
  • 逆向练习(六)Andrénalin.3/4
  • Linux应用软件编程---多任务(进程2)(资源回收函数(wait、waitpid)、exec函数族、linux下的命令、const四种位置表示的含义)
  • 一周学会Matplotlib3 Python 数据可视化-绘制树形图
  • Laravel 中解决分表问题
  • ESP32-C3_SMARTCAR
  • 高并发场景下限流算法对比与实践指南
  • 【unity实战】Unity游戏开发:如何用ScriptableObject与序列化多态实现可复用的模块化效果系统?
  • ABP vNext+ WebRTC DataChannel 低延迟传感推送
  • 物联网(IoT)系统中,通信协议如何选择
  • C++——分布式
  • Al大模型-本地私有化部署大模型-大模型微调
  • 图像识别控制技术(Sikuli)深度解析:原理、应用与商业化前景
  • Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
  • 後端開發Python篇
  • StarRocks集群部署
  • 从 0 到 1 玩转Claude code(蓝耘UI界面版本):AI 编程助手的服务器部署与实战指南
  • Xget:为您的开发工作流解锁极致速度
  • 清除 pnpm 缓存,解决不同源安装依赖包失败的问题
  • “大模型”技术专栏 | 浅谈基于 Kubernetes 的 LLM 分布式推理框架架构:概览
  • 力扣 hot100 Day74