Releases: SECTL/ViewStage
Releases · SECTL/ViewStage
v0.21.1
v0.20.0
🚀 性能优化
- PDF 渲染管线重写 — PDF.js 从 v3 UMD 升级到 v6 ES Module,新增 Canvas 池、PDFPage 缓存、延迟瓦片初始化、空闲预加载、批量 cleanup 等,100 页文档元数据提取从 6-10s 降到 1.5-3s
- 缩放流畅度 — 滚轮/双指缩放添加 rAF 节流、transform 脏检查、will-change GPU 合成层优化
- GPU 显存 — 空面板/摄像头移除冗余 will-change(省 ~32MB),tile 合成层从 16 个合并为 1 个,缩放期间隐藏 overlay canvas
✨ 新功能
- 统一手势模块
- 计划任务管理 — 设置页新增"去除计划任务"按钮,可手动移除 ViewStage_MemClean
- 惯性移动开关 — Canvas 设置页新增 toggle(默认关闭)
♻️ 重构 & 清理
- 移除 29 个无用 JS 函数
- 移除 12 个死配置项 + 4 个遗留 image-adjustment 字段
- 完全移除文本层代码 — getTextContent + renderTextLayer 彻底删除,省去每页 50-200ms
- 统一 custom-select 下拉框打开/关闭逻辑
- memreduct 独立 C 项目文件夹删除
🐛 Bug 修复
- 小黑板模块加载失败 — _handle_touch_end 缺失闭合花括号导致语法错误
- DPR 切换白屏 — PDF canvas 先渲染到离屏 canvas,resize 后 drawImage 原子复制
- 手掌擦除 — 取 Math.min(w,h) 消除旋转角度影响,面积只计算一次
- 镜像站下载失败 — URL 拼接缺少 /,失败时自动回退到原始 GitHub URL
- 配置文件容错 — Rust 后端 20+ 数字字段范围校验,前端防御性处理 null/类型异常
- 动态 DPR — 被 idle-shrink 降为 1 的瓦片重新进入视野时正确更新
Full Changelog: v0.19.5...v0.20.0
v0.19.5
优化
- 双指缩放焦点改为可视区域中心 — 捏合缩放时不再跟随手指中点,缩放中心固定为屏幕中心,避免因手指偏移导致画面异常移动
- 额外手指触控保护 — 两指缩放中若有第 3 指意外触屏,缩放暂停;手指抬起后自动以当前画布位置无缝恢复缩放手势,无跳跃
修复
- 双指手势与画笔宽度 — 移除缩放死区与速度限制,消除画布抖动的根本原因;添加惯性滑动和平滑缓动;视觉笔触宽度在不同缩放级别下保持一致
- 笔锋算法统一 — 统一钢笔模式绘制算法
Full Changelog: v0.19.4...v0.19.5
v0.19.4
双指缩放/平移手势修复(main.js, blackboard.js, document_reader.js)
- 移除旧版 if/else 分支(缩放变化时用锚点公式,未变化时重置为起始位置+平移增量),
改为统一公式canvasX = centerX - (startScaleX - startCanvasX) * (newScale / startScale),
消除死区中平移重置导致的画面跳动 - 移除缩放死区内的纯平移分支,死区中保持当前缩放,画布位置始终由统一公式计算
- 速度限制改为基于目标位置的追赶式限幅(
clamp(target - current, -MAX, +MAX)),
取代旧的基于上一帧位移的钳制,消除累积滞后和拖尾感 - 清理废弃状态字段:
_lastGestureX/Y,touchStartCenterX/Y,_last_gesture_x/y,_dr_last_gesture_x/y
惯性滑动系统(main.js, blackboard.js, document_reader.js)
- 添加 EMA 速度追踪(单指 α=0.6,双指 α=0.4)
- 添加自适应摩擦系数:
friction = 0.85 - 0.20 * exp(-speed / 8),
高速时近似无摩擦,低速时快速停止,约 200ms 停稳 - 松手时速度 > 2px/帧 则启动惯性,否则直接缓动到位
- 新触摸/指针开始时自动取消惯性,防止新旧手势冲突
- 惯性结束时调用缓动动画归位
画笔/擦除视觉宽度恒定(main.js, drawing-engine.js, document_reader.js)
- batch_draw(overlay)的
cachedDrawLineWidth改为以当前缩放计算:
penWidth / currentScale,确保 overlay 经setTransform(scale)后视觉宽度恒为penWidth - 图块渲染
main_render_strokes_to_context中统一使用当前缩放重新计算线宽:
baseLineWidth = (storedLineWidth * strokeScale) / renderScale,
变宽笔迹同理乘以strokeScale / renderScale - 擦除(非速度模式)也统一使用
eraserSize / currentScale,与速度擦除和 tile 行为一致"
Full Changelog: v0.19.3...v0.19.4
v0.19.3
主要变更:钢笔模式重写
- 重写钢笔算法(pen_tessellator.js + batch-draw.js),优化可变宽度曲线细分渲染
- 新增速度擦末端绘制(Limited 模式按速度自动收尾)
- 开发者选项新增:收尾时长、单帧位移上限、速度阈值等调节项
修复 - 绘制时偶现的异常问题(main.js, batch-draw.js)
- 手势擦除显示范围与实际范围不一致
- 阅读器中残留的惯性移动逻辑(移除)
优化 - 添加位移限制,防止跳变(黑板 + 阅读器 + 主画布)
- 更新默认阈值参数
Full Changelog: v0.19.1...v0.19.3
v0.19.1
Important
这是一个修复更新,包含对上个版本的异常修复
🎯 新增功能
- 恢复上次阅读位置:重启应用后自动还原文档、缩放比例、平移位置和批注
- 手掌擦除大小提示:显示擦除范围虚线框
🐛 修复
- 两指不能移动画布:修复两指过渡到单指时拖拽状态重置、缩放死区、惯性滚动等
- 编译异常:修复 Rust 编译错误
⚡ 优化
- 两指平移无延迟:纯平移跳过 rAF 直接处理,消除阻尼感
- 重绘逻辑优化:减少无效重绘,修正撤销/清除白屏问题
- 存储逻辑重构:文档状态移至 configDir/doc_state/(独立于缓存目录),annotation cache 版本升级到 v4
🧹 清理机制
- 自动过期清理:cache_validate_auto_clear 删除 15 天未打开的文档状态记录
- 开关控制:设置页新增"恢复上次文档"开关,关闭时自动清理状态
Full Changelog: v0.19.0...v0.19.1
v0.19.0
新功能
- 手掌擦除 — 新增手掌擦除功能,擦除大小自动适配手掌尺寸,默认关闭(需在设置中开启)
- 速度擦 — 新增速度擦开关,支持独立橡皮擦粗细预设调节,默认关闭
- 开发者选项 — 全新开发者选项页面,包含:
- 开发者模式开关
- 性能监视器(实时显示 FPS、JS 堆内存、渲染 DPR、渲染压力)
- 监视器更新频率三档可选(快 100ms / 正常 200ms / 慢 500ms)
- 宽度比例调节
- Fluent UI 内联 SVG 图标
- 默认粗细可更换 — 允许用户自定义默认画笔粗细
- 文档转换检测 — 打开文档时自动检测是否需要转换,自动进入阅读器模式
- 阅读器模式增强 — 通过默认打开或拖入文件时自动进入阅读器模式
性能优化
- 批注绘制与 tile 渲染性能大幅提升(3-4x):
- 多 tile 场景预渲染至 offscreen canvas,drawImage 复合各 tile
- 变宽笔画逐段 Path2D 替换为 beginPath/stroke,减少 GC 暂停
- 路径批处理合并连续段 Canvas API 调用,减少 40-60%
- 自适应 FPS 升帧修复,后笔刷延迟从 600ms 降至 45ms
- 曲面细分渲染路径批处理 — 连续线宽相近的段合并为同一路径,Canvas 调用减少 40-60%
- 批注模式动态降摄像头帧率 — 批注/橡皮擦模式降至 15fps,移动模式恢复全帧率
- 监视器性能优化:
setInterval替代requestAnimationFrame,消除 GPU 空转- 增加 CSS
contain: paint layout style隔离,避免大范围重合成 - 缓存文本值,未变化跳过 DOM 写操作
- 渲染压力算法改进 — 从脏 tile 比例改为绘制耗时占比 + 待绘积压 + FPS 掉帧率,更准确反映真实负载
- 黑板启动性能优化 — 延迟子模块初始化到首次 open(),resize 去抖 100ms
- 批注
add_stroke移除冗余 clip 操作,减少 GPU 裁切管线开销
Bug 修复
- 全面修复极限情况崩溃与逻辑缺陷:
- Rust 后端 4 处
.expect()改为 match 优雅降级,避免 panic config_path.parent().unwrap()保护根路径- tile 尺寸/Canvas 宽高加非零守卫防除以零
batch-drawscreenW/screenH 空值保护 + getContext null 检查- IntersectionObserver 泄漏修复(实例属性存储 + close 时 disconnect)
- 5 处静默错误改为
console.warn - resize 匿名监听器改为具名函数,beforeunload 中移除
- Rust 后端 4 处
- 修复工具栏高度及异常问题
- 修复拍照效果与实时预览不一致(改用原始帧 + CSS filter)
- 修复
pen-control-panel无法唤出 - 修复开发者选项因 IIFE 头部丢失导致空白页
- 修复性能监视器因
display:none写死不可见 - 修复监视器 DPR 读取逻辑(改为读取可见 tile)
- 修复部分情况下 DPR 不生效、动态分辨率异常
- 修复图片错误使用摄像头亮度和对比度
- 修复部分条件下像素丢失、画笔丢失
- 修复 Linux 构建失败
- 修复切换图片后侧边栏缩略图变黑
UI/UX 改进
- 优化多指触控与触控体验
- 工具栏按钮尺寸优化(外置主题从 70/58 缩至 48×48)、sidebar 高度/宽度调整
- 工具栏按钮添加文字标签和 i18n 翻译键
- 外置主题新增适老化适配方案
- 清空屏幕方式体验优化
- 优化设置为默认打开方式的体验
- 缩放新增非线性动画
- 阅读器内打开黑板不再关闭阅读器面板
- 黑板关闭按钮添加图标
- 更换设置为默认程序的图标、返回摄像头的按钮
其他
- 模块文件与 src 目录整理
- 监视器标签中文化(压力、批绘、积压、耗时、模式、内存等)
- 命名调整:瓦片 → 分块
- 去除无用设置
New Contributors
- @hanzn-zzx made their first contribution in #2
Full Changelog: v0.18.3...v0.19.0
v0.18.3
晚点写更新报告~
Full Changelog: v0.18.2...v0.18.3
v0.18.2
v0.18.1
📖 新功能:PDF 渲染与内存优化
- PDF 页面改为阅读器内 Canvas 直接渲染,移除预渲染为 JPEG Blob 的中间流程,降低内存占用
- 窗口 resize 时自动缩放批注坐标、重建 tiles、重绘页面,适配容器尺寸变化
- 页面虚拟化:远离视口的页面自动释放 GPU 资源,保留占位符,滚回时重建
- 批注缓存改为按文件 MD5 命名,避免移动后缓存冲突;退出时自动清理
- 侧边栏页数超过 160 时切换虚拟列表,只渲染视口内 ±8 项
- PDF 缩略图直接 Canvas 渲染 + Blob URL 缓存 + IntersectionObserver 懒加载
📖 新功能:PDF 高缩放倍数文字清晰度提升
- 删除旧版
scale > 2 → return 1错误逻辑,改为按缩放比例等比提升渲染 DPR(上限 4x),放大时文字锐利 - 放大 >1.5x 时仅当前页使用高 DPR,其余页降为 1x 节约显存
- 翻页后 DPR 变化自动强制重绘
🖊️ 新功能:MemReduct 内存清理集成
- 设置页新增 MemReduct 清理开关,支持启动时自动清理
- 未安装时灰掉开关并提示安装
- 后端新增 Windows 内存监控线程,内存超 80% 自动调用 MemReduct 清理
🖊️ 交互改进
- 阅读器内滚轮直接缩放,移除 Ctrl 键要求
- 缩放期间仅更新 CSS transform,停止 300ms 后统一批量刷新渲染,消除连续缩放卡顿
- 画笔/橡皮擦按钮双击弹出控制面板
🌐 国际化
- 补充 MemReduct 清理功能及遗漏翻译条目,中/英/繁同步更新
📝 Bug 修复
- 修复打开多个 PDF 后无法在文档间切换
- 修复橡皮擦提示位置计算
- 修复 PDF 文本层
--scale-factor未设置导致的偏移 - 修复 tile 可见区域未乘
cached_inv_scale导致的计算偏差
Full Changelog: v0.18.0...v0.18.1