Skip to content

Releases: wozsun/ImageShow

v6.8.18

Choose a tag to compare

@github-actions github-actions released this 21 Oct 17:41
v6.8.18
418347f

Node.js 于 2026-10-21 发布安全更新,修复多项高危漏洞;本版只升级运行时与可升级的依赖,功能、接口与数据库结构不变,升级无需维护数据库。

build:

  • 镜像基础升级到 Node.js 26.12.1,修复 2026-10-21 安全发布中的多项高危漏洞:TLS 证书主机名校验绕过与 Brotli 解码越界写入涉及外链图片抓取,TLS 与 keep-alive 响应错配涉及 S3 访问;内置 undici 更新到 8.12.2,外链抓取的 fetch 层也纳入上游修复。
  • 依赖在原版本范围内更新:AWS S3 SDK 3.1154.0、ALTCHA 服务端库 2.7.0、undici 8.12.3(HTTP/2 超时后替换无响应连接)、TanStack Query 5.104.5、React Router 8.5.0、Vite 8.3.5(导入映射的文件哈希纳入预加载依赖,避免跨版本缓存时预加载过期文件),开发依赖 knip 6.42.1、linkedom 0.18.14。

v6.8.17

Choose a tag to compare

@github-actions github-actions released this 19 Oct 10:02
v6.8.17
8fdff5a

多域名入口下,未配置独立公开地址的图片此前固定使用主站域名,从附加站点域名打开页面时图片仍回到主站加载,不经过该入口自己的 CDN;本版让这类图片与页面同源,并更新可升级的依赖。

feat:

  • 本地存储公开 URL 留空、对象存储未设公开地址时,图片地址改为同源路径 /images,主站与各附加站点分别经当前访问域名加载图片;已配置的图片与静态资源公开地址不变。图片列表与详情接口的字段不变,设置了主站域名时这类图片的 base_url 由主站绝对地址变为 /images;随机 JSON 的 url 按本次请求的协议和域名生成绝对地址,mode=redirect 跳转到当前访问域名下的 /images/ 路径。使用附加站点域名且图片未配置独立公开地址的部署,升级后图片改经各附加域名加载,这些域名前置的 CDN 需按图片规则透传 Referer 并按 Vary: Referer 缓存。

docs:

  • 配置说明、部署说明与随机 API 文档写明未配置独立公开地址时图片随当前访问域名,多域名接入步骤补充附加域名 CDN 的图片规则,静态资源一节与后台静态资源公开 URL 的占位提示更正为留空时随当前访问域名;后台附加站点域名与本地存储公开 URL 的提示及公开地址冲突提示同步改写,安全与 Web 参考同步资源地址与预连接说明。

build:

  • 升级 TanStack React Query / Query Core 至 5.104.4(修复 throwOnError 返回 false 时假值错误不在挂载时重试、queryClient.clear() 后变更状态不更新、无限查询重新获取时丢失 null 首页参数)、ALTCHA 登录组件至 3.4.1(修复 V1 挑战识别回退)、开发依赖 knip 至 6.42.0;间接依赖 strtok3 升至 10.6.2、postcss 升至 8.5.31。

test:

  • 主站 Host 边界用例不再断言图片基础地址随主站域名变化,附加域名上的随机跳转改为期望相对地址,读模型用例中等于本站大图的原图链接改按站点地址解析为绝对地址;删除外链原图用例中已不存在的依赖参数。

v6.8.16

Choose a tag to compare

@github-actions github-actions released this 18 Oct 19:18
v6.8.16
47e7d65

6.8.15 起图片时间由图片 ID 唯一提供,metadata.image_time 只为回退保留;本版确认不再回退,删除该列,并对全库做一次遗留代码、补丁叠加与冗余测试审计,把重复处理收口到各自的职责源头。

refactor:

  • 数据库结构去掉 metadata.image_time,接入提交不再写入、启动必需列契约不再包含该列;接入请求的 image_time / batch_time 输入与后台按图片时间排序不变。已有数据库中的该列非空且无默认值,新版本不再写入,须在启动前处理,否则启动检查会拒绝并报告该列。
  • 有序翻页游标只按排名定位,随机窗口按图片 ID 现算后缀分数;Redis Lua 命令注册不再写回客户端选项。
  • 图片编辑提交后的缓存交接、回收站永久删除的加锁取消、外链原图代理的同源 Referer 各由唯一一层负责:代理跨域重定向时每一跳使用该跳自身的同源 Referer,与导入抓取一致。
  • 微博导入上限只在抓取时检查一次,导入时区不再逐层传递而由时间解析统一读取;版本冲突判断、缓存条目解析与 Redis 可用性判断各由所属模块唯一提供;删除只剩测试使用的函数、无人读取的配置项、从未传入的参数与走不到的防御分支,重复图片查询去掉恒无效的排序与逐行子查询。
  • 后台图片列表与分组详情在切换筛选、排序或视图时,由列表 Hook 在绘制前统一清空选择并回到顶部;展映渲染 runtime 自行读取并跟随减少动态设置,不再由页面在创建时传入;数字输入框回车先同步结算再提交表单。
  • 删除从未传入的组件参数、接入任务里只写不读的字段、无人读取的 data 属性、反馈目标标签与不起作用的样式声明,!important 改为明确的选择器优先级;Redis JSON 读取去掉无人消费的三态包装。
  • shared 导出存储删除阻断原因、删除动作、永久删除任务状态与回收站检查问题种类的取值数组,前端不再另抄一份;编码事实类型移到服务端,图片对象键格式只定义一次。

fix:

  • 词表与分组管理在最后一页删除最后一项时,列表会先显示一帧越界的空页;后台图片末页恢复或删除后也会短暂显示错误空态。现在分页状态在渲染时收敛有效页码,保留原有缓存与重试语义。
  • 数据库启动检查拒绝阻止应用 INSERT 的额外必填列,并报告具体列名,避免启动就绪后才发现写入失败;可空、有默认值或自动生成的额外列继续兼容,既有结构与数据保持只读。

build:

  • 删除不再使用的本机开发脚本与 Vite 开发代理(会把数据写入未被忽略的目录,并在占位域名下把 /api 以明文 HTTP 代理出去);产物装配去掉整目录重建后走不到的清理分支,门禁不再允许依赖已删除的目录。

test:

  • 测试夹具不再写入图片时间列;删除测内部实现、文案、图标路径与初始状态形状的断言及不具判别力的断言,以及与挂载用例或公开入口重复的用例;以真实 Redis 核心抽样覆盖替代参数数组镜像,补数据库额外必填列和页面错误空态回归;随机限流过期用例放宽时间余量,回收站进度流的截止定时器不再拖住进程。

docs:

  • 部署说明写明额外列的兼容条件及启动失败处理;数据库参考同步该规则并更正非空库启动检查的范围,架构参考、结构指南与测试说明对齐现状;提交信息规范要求正文只写功能、行为与影响。

v6.8.15

Choose a tag to compare

@github-actions github-actions released this 18 Oct 15:01
v6.8.15
3a1f0ef

6.8.14 的图片 ID 已按发布时间生成 UUIDv7,却另存一份 image_time 用于排序、游标、索引、Redis 投影和接口输出;单值的主题、作者、标签筛选写成 = ANY(数组),PostgreSQL 回源无法沿 (筛选值, 时间) 索引按序取数,时间上集中的标签和稀有主题在数据量大时明显变慢。本版以图片 ID 为发布时间的唯一来源,metadata.image_time 暂时保留供回退,只在入库时随 ID 写入,后续版本再删除,请勿自行删列(本版仍会写入并在启动时核对该列)。升级须停机:先停止应用并备份,用 SELECT count(*) FROM metadata WHERE uuid_extract_timestamp(id) <> image_time; 确认结果为 0(不为 0 时升级后这些图片的排序与显示时间会按 ID 改变),清空 ImageShow 使用的 Redis 逻辑库(管理员需重新登录,未完成的上传与导入作废),再在数据库执行下方 DDL,然后启动新版本;应用不自动修改数据库。

BEGIN;
ALTER TABLE metadata ALTER COLUMN image_time DROP DEFAULT;
ALTER TABLE metadata ADD CONSTRAINT metadata_id_check CHECK (uuid_extract_version(id) = 7);
CREATE INDEX idx_metadata_status_id ON metadata(status, id DESC);
CREATE INDEX idx_metadata_ready_id ON metadata(id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_device_id ON metadata(device, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_brightness_id ON metadata(brightness, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_device_brightness_id ON metadata(device, brightness, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_device_theme_id ON metadata(device, theme, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_brightness_theme_id ON metadata(brightness, theme, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_axes_id ON metadata(device, brightness, theme, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_theme_id ON metadata(theme, id DESC) WHERE status = 'ready';
CREATE INDEX idx_metadata_ready_author_id ON metadata(author, id DESC) WHERE status = 'ready';
DROP INDEX idx_metadata_status_image_time, idx_metadata_ready_image_time, idx_metadata_ready_device_image_time, idx_metadata_ready_brightness_image_time, idx_metadata_ready_device_brightness_image_time, idx_metadata_ready_device_theme_image_time, idx_metadata_ready_brightness_theme_image_time, idx_metadata_ready_axes_image_time, idx_metadata_ready_theme_image_time, idx_metadata_ready_author_image_time, idx_metadata_ready_random_axes;
COMMIT;

refactor:

  • 公开与后台列表、游标和派生索引构建一律按 id 排序与翻页,按时间排序的游标只编码图片 ID,升级时正在翻页的访客会收到一次 invalid_cursor,刷新即可(经 CDN 缓存列表接口时,旧游标可能在缓存期内仍会出现);Redis 投影条目去掉 sort_score,有序集合分数改为 ID 中的毫秒时间。
  • 内容接入的会话、上传意图与丢弃回执不再另存解析后的时间,入库时 image_time 由 uuid_extract_timestamp(id) 写入。
  • 随机 API 的 JSON、图片详情、后台列表与接入结果不再返回 image_time(随机 API 公开字段变化),图片时间可由 ID 的前 48 位得到;图片详情直接从 ID 显示发布时间,不再等待详情返回。
  • 数据库结构以 10 个 (筛选列, id) 索引替换 image_time 索引并删除与之重复的随机轴索引,image_time 去掉默认值,新增 uuid_extract_version(id) = 7 约束。

perf:

  • 单值主题、作者、标签筛选改写为等号,公开分页把同一游标边界并入标签成员子查询。dev 上以两个版本实际发出的 SQL 测 PostgreSQL 回源:17,456 张真实数据下标签首页 37.1 → 3.3 ms、标签随机回源 7.9 → 4.5 ms,其余列表普遍快 5%~20%;按原时间分布合成的 349,120 张下标签首页 530 → 0.84 ms、稀有主题首页 38 → 0.54 ms,主题、作者、标签的随机回源由 16~279 ms 降到 2~61 ms;派生索引分批构建快约 40%,metadata 索引体积减少约 20%,Redis 投影条目内存减少约 1.5%、读延迟不变;17k 标签中间页与 349k「电脑 + 浅色」首页分别慢约 1.2 ms 与 0.5 ms。

fix:

  • 图片详情的标签行在标签加载出来时由文字高度撑高到标签高度,下方内容随之跳动;现在标签行在加载中、无标签与有标签时同为 24px,与单行标签同高,其他属性行保持原行高。
  • 访问过的来源链接在详情加载成功的瞬间先闪出亮色边框再回落(加载占位与可用链接共用同一元素,已访问配色从文字色过渡到边框色);现在两者是不同元素,链接直接以最终样式出现。

test:

  • 测试夹具按 UUIDv7 生成图片 ID 并写入与 ID 一致的 image_time,游标、筛选参数与接入身份断言改为现行契约,删除只验证已移除字段的断言;公开分页场景补充按标签筛选、两个方向逐页翻页的断言。

docs:

  • 随机图 API 说明去掉 image_time 字段并注明 ID 的前 48 位是图片时间;架构与内容接入参考改为以图片 ID 为发布时间的唯一来源。

v6.8.14

Choose a tag to compare

@github-actions github-actions released this 18 Oct 07:04
v6.8.14
7bd46f5

6.8.13 的外部原图只对管理员开放,无法按站点需要向访客提供;图片详情的作者、标签与发布时间行要等详情返回才插入,画廊详情的主题明明列表已有值也先显示加载中;原图代理在上游节点约 10 秒连接超时后即放弃并回退跳转,浏览器随后可能被源站防盗链拒绝。

feat:

  • 新增 site.public_original(环境变量 SITE_PUBLIC_ORIGINAL、后台“公开原图”开关,默认关闭),控制访客能否通过原图入口让本站代理原图,并决定画廊、展映、嵌入页详情中是否显示原图按钮:关闭时匿名请求在解析图片和访问上游之前返回 401,开启时访客无需登录;原图入口与三档图片共用防盗链,带其他网站 Referer 的请求返回 403。原图缓存由仅管理员可用的私有协商缓存改为:代理返回的原图与三档图片一样公开长期不可变缓存,缓存键只按 Referer 区分,避免同一张图因会话或浏览器不同被反复完整取图;源站允许直连时的跳转只在发起请求的浏览器中缓存 5 分钟,代理失败的回退跳转仍不缓存。开关只影响到达应用的请求,经 CDN 时管理员打开过的原图也会被缓存并返回给访客,应用不清理已有缓存。

fix:

  • 图片详情常驻作者、标签与发布时间行,加载中、失败与无值时显示占位,不再在详情返回后插入;画廊详情直接显示列表已有的主题,不再先显示加载中。
  • 外部图片抓取(原图与导入共用)的连接超时由默认 10 秒放宽到 15 秒,原图探测与代理的单次时限由 12 秒放宽到 20 秒(含正文读取),减少连接较慢时原图过早回退与导入下载失败;原图失败后的回退行为不变。

test:

  • 在既有用例中覆盖原图公开配置的默认值、环境播种、保存与重载、权限切换、详情验证器失效、防盗链与原图缓存头,并更新访客与嵌入页原图入口断言。

docs:

  • 配置、部署与随机图 API 说明补充原图访问开关、防盗链、缓存策略与缓存生效范围。
  • 整理 AGENTS.md 与 .agents/ 维护规则:合并重复条款,删除过时的旧做法描述,Web 参考中可由源码注释取得的预取、漂浮与分块过程细节改为指向源码。

v6.8.13

Choose a tag to compare

@github-actions github-actions released this 17 Oct 14:50
v6.8.13
4743b0b

6.8.12 的漂浮按卡片未倾斜的高度判断新卡是否藏在视口外,较大档位下倾斜后的边角常先露进屏幕边缘;比 2:1 更长的图放不进入场缓冲带,在边缘淡入。展映三种模式又都在取纹理时才下载图片,手动滚动、拖动或切换星团稍快时,进入画面的卡片常要等网络。

feat:

  • 漂浮比 2:1 更长的图也在视口外入场:放不下缓冲带的卡近端贴着入场线、远端伸出带外;缓冲带统一为半屏,各档疏密不变,带内卡片与纹理占用与 6.8.12 相当,桌面较大档位带内卡片少约两到三成。

fix:

  • 较大档位下漂浮新卡倾斜后的边角不再先露进屏幕:入场位置按倾斜与摆动后的竖向跨度计算,并离视口边缘至少 16px。

perf:

  • 展映三种模式在屏外先下载即将出现的图片:纹理缓存用纹理加载没有占用的下载名额先取压缩字节、不解码,建卡时只需解码;最紧迫的预取字节在原有字节预算的一半内受保护,填满即停、不为下载新的而丢弃旧的,不增加纹理与 GPU 占用。提前量按预取的图后来上屏的把握各自确定:漂浮与瀑布按顺序取候选,在已取纹理之外分别多备两屏、三屏;星群先备当前星团接下来轮换的 4 张与它和环上邻居还没持有贴图的位置,再备其余星团各 1 张轮换图,字节预算放得下时(宽屏)另备其余星团的总览位置。离线测量(300ms 下载延迟、默认密度)中,漂浮快速甩动与漂浮、瀑布常速滚动进入画面时全部就绪(原先漂浮甩动九成以上、瀑布常速桌面约一成半、手机约九成要等网络),1000ms 慢网下桌面常速滚动也基本就绪;星群总览、切换星团、回到总览要等网络的,桌面由约七成至九成以上降到约三分之一及以下,手机切换由约四成降到不到一成;密集档受下载吞吐所限,改善有限。代价是多下载最终未上屏的图片:漂浮与瀑布 5–17%(会话结束时剩下的几屏),星群宽屏约六成、手机约七成(应用自带存储提供的图片,重复请求多由浏览器缓存返回)。

test:

  • 展映用例的纹理缓存桩补上字节预取接口;字节缓存与失败恢复用例补预取只下载不解码、建卡复用预取字节、卸载后不再写入及预取失败共用失败记录的断言;漂浮双向补图用例的带内卡片数容差按随机落位的波动放宽,消除约一成概率的误报。

chore:

  • Web 参考同步漂浮缓冲带、入场余量、扫描计数与字节预取的约束。

v6.8.12

Choose a tag to compare

@github-actions github-actions released this 17 Oct 07:49
v6.8.12
cd83179

漂浮此前桌面每屏只有约 8 张完整的大卡,竖图面积可达横图两倍多,逐卡速度差和避让调整又让画面时而成团、时而空洞;本版以星群进入星团后的卡片大小与疏密为基准重排漂浮。

feat:

  • 漂浮在触屏上支持双指缩放切换尺寸档位(两个触摸点),与 ± 按钮和 Ctrl + 滚轮同步;捏合期间暂停上浮,结束后留在屏上的手指不会拖动画面。

style:

  • 漂浮卡片改为等面积,桌面默认边长比原来小约一成半到三成,同屏(含部分露出)由约 11–16 张增至约 19–20 张;手机保留接近原来的卡片大小,同屏由约 9 张增至约 12–13 张;最大档由默认的 1.5 倍改为一行约两张,站点默认密度设为宽松(即最大档)时观感随之改变,档位数与三档设置保持不变。
  • 整条流按设置的像素/秒同速上浮(原来各卡速度不一,平均比设置快约一到二成),入场端按流过的距离以固定密度补卡并选最开阔的位置;相邻卡片按中心保持间距,交叠落在边角,单张卡被遮挡一般不超过 15%,手机和最大尺寸档同样适用,卡片可略微探出屏幕左右边缘,排布在整个上浮过程中保持均匀。
  • 悬停或聚焦的卡片释放后回到它在流中的原位(原来从停住处继续上浮);切换尺寸档位或窗口明显变化时卡片按原有顺序就近重排,放不下的淡出、需要更多时淡入补齐。

test:

  • 展映用例改为等面积的尺寸档位、按密度双向补卡和卡片离开驻留带后的焦点处理,并补充双指捏合只调整尺寸、不移动画面且释放指针捕获的断言。

chore:

  • Web 参考新增漂浮一节,记录疏密基准、同速流与按行程补卡、尺寸档位和双指缩放的约束及设计原因。

v6.8.11

Choose a tag to compare

@github-actions github-actions released this 15 Oct 21:17
v6.8.11
0d8b20c

允许不同站点域名分别接入 CDN 并回源同一实例,共享账号和图片数据,保留现有图片与静态资源地址。

feat:

  • 增加附加站点域名列表,支持配置文件、后台保存、热加载及初始化环境变量 SITE_ADDITIONAL_DOMAINS,并与主域名统一校验 Host、可信来源和资源域名冲突。

docs:

  • 说明多域名接入及独立登录行为,明确 DNS、CDN、HTTPS 证书和 Nginx 由部署者自行配置并保留访问 Host;开启外部嵌入时,嵌入页面的安全策略响应头会列出全部附加站点域名。

build:

  • 升级 undici 至 8.12.2,外链图片抓取的连接层纳入上游安全修复(其中包括恶意 HTTPS 服务器借 TLS 重协商使进程退出);升级 ALTCHA 登录组件至 3.4.0、TanStack Query 至 5.104.3。

test:

  • 扩展现有配置、HTTP、存储和后台表单回归,覆盖多域名持久化、热变更、权限边界及资源地址保持。

chore:

  • 通用规则与开发、审查流程改为在固定的开发环境部署核查:开发环境数据经用户确认后刷新;测试与审查通过后对最终候选重新部署并由用户最终核查,原型核查期间改过数据或涉及既有数据库结构 / 数据维护时先刷新生产快照并在其上演练;交付规范把这项最终核查列为提交前要求,非功能性改动不重新触发。
  • 安全参考写明多域名下的 Host 准入、可信来源与资源域名冲突约束,并区分泛指站点入口的“主站”与专指 site.domain 的主站域名;Web 参考同步登录验证 Worker 与当前站点入口同源;结构指南同步开发环境目录布局的说明位置。

v6.8.10

Choose a tag to compare

@github-actions github-actions released this 14 Oct 21:54
v6.8.10
ce529f0

展映打包了用不到的 WebGPU 与 Canvas 渲染器;Chrome / Edge 140、Firefox 133、Safari 18.2 以下的浏览器缺少 Uint8Array.prototype.toHex(),打开嵌入页面加载失败,后台上传与导入也会出错;嵌入页面文档禁止缓存,每次完整下载;公开页面要等脚本运行后才开始连接图片所在的域名。

feat:

  • 展映无法初始化时提示“当前浏览器无法显示展映(需要 WebGL)”,浏览器给出的原因写入控制台;画廊开启时提供“在画廊中浏览”,保留当前筛选与排序,嵌入展映进入嵌入画廊;不自动跳转。

perf:

  • 展映直接创建 WebGL 渲染器,不再经 PixiJS Application 的自动选择,WebGPU 与 Canvas 渲染器不再随展映下载;本地构建中展映与嵌入展映冷启动传输各少约 15.5 KB(约 5%)。浏览器不支持 WebGL 时不再尝试其他渲染器。
  • 首页、画廊与展映的页面文档预连接站点以外的图片来源(已启用存储后端的公开地址);线上 4G 限速实测首页背景显示提前约 0.5 秒(6 轮中位数)。
  • 嵌入页面文档改用与其他页面相同的缓存策略:浏览器每次向服务端校验,未变化时返回 304,CDN 可缓存约 1 分钟,过期后的数分钟内仍可能返回旧页面;移除嵌入网站或关闭嵌入因此不再立即生效。所有页面文档的 ETag 同时覆盖安全策略响应头,只修改额外脚本来源或嵌入来源时返回新文档,不依赖缓存用 304 的响应头更新已存的策略。

fix:

  • 支持范围内缺少 Uint8Array.prototype.toHex() 的浏览器(Chrome / Edge 119–139、Firefox 124–132、Safari 与 iOS Safari 17.4–18.1)打开嵌入页面时初始化失败,后台上传、导入与重试生成任务标识时出错:嵌入通信与接入标识改用通用的十六进制转换,标识格式与 UUIDv7 语义不变。

refactor:

  • 嵌入页面文档不再输出站点图标,页面读取站点配置后只更新文档已有的图标、不再补建;iframe 的图标不会显示,普通公开页面与后台的图标不变。

docs:

  • 配置说明补充:使用 CDN 时嵌入页缓存约 1 分钟,过期后的数分钟内仍可能返回旧页面,需要立即生效时清理 /embed/ 下的 CDN 缓存。
  • Web 参考写明浏览器支持范围(Chrome / Edge 119、Firefox 124、Safari 17.4 及以上)、展映只用 WebGL 及其失败界面、图片来源预连接;安全参考补充页面文档缓存与 ETag 规则。

build:

  • Node.js 镜像升级到 26.12.0,并升级 @aws-sdk/client-s3、file-type、undici、react 与 react-dom;锁文件内 Rolldown 等间接依赖随之更新。

test:

  • 配置用例中嵌入文档改按与其他页面相同的缓存头断言,修改嵌入来源后带旧 ETag 的请求得到新文档。
  • 嵌入光标用例在缺少 Uint8Array.prototype.toHex() 的环境下完成握手,覆盖这些浏览器的初始化路径。
  • 展映初始化失败用例改为断言出现提示并把原因写入控制台。

v6.8.9

Choose a tag to compare

@github-actions github-actions released this 14 Oct 19:27
v6.8.9
cb14040

前端分块依赖代码所在目录和手写的别名与特判,产生大量小块,页面加载要经历入口、路由等多次串行往返,每次发版几乎所有前端文件都随入口改名、回访要重新下载,首屏还会先显示“加载中”再等 React 的 300 毫秒揭示节流;公开基础 URL 的长度上限只检查原始值,路径含大量中文时能保存却无法再次读取。

perf:

  • 前端分块改为只按导入图和懒加载处的 /* @chunk … */ 权限、访问频率声明自动决定,声明由 Vite 的解析器定位:先把模块放入其所有懒加载根都必经的那个根,再比较访客与管理员各自要下载的字节、每个文件的请求头与导入映射条目,合并能节省的块;首次访问按访问权重计,管理员多数带缓存、按五分之一计,发版后回访只计含应用代码的块。加载一个块会连带加载它导入的块,合并的代价连同这些块一起计,且不合并会造成块间循环导入的单位;样式按内联 @import 后的全文计量。代码只合并到同层或更高权限的页面,未声明权限的懒加载代码按打开它的代码中权限最低的一方归层,声明写错、无法解析或被权限更低的代码静态导入时构建失败;每个页面因合并多下载的代码有上限。按本地测量,展映冷启动传输约少 12 KB、串行加载由 5 层减为 3 层、请求由 23 个减为 15 个,首页约少 15 KB、请求由 11 个减为 8 个,画廊少 1 个请求、传输约多 1 KB(含页面文档内联的约 1.3 KB 导入映射),后台登录页约少 9 KB;后台分组、词表、检查、账户、概览页冷启动约少 4 至 13 KB,图片页约多 15 KB、分组详情约多 10 KB、存储与设置页约多 4 至 6 KB,在图片页中打开编辑器约少 4 KB、接入约多 5 KB;首页再进画廊约多 16 KB。
  • 块之间改按稳定名互相导入,服务端在每份页面文档中内联导入映射,把稳定名映射到当前文件(地址随静态资源地址改写,CSP 按映射内容的哈希放行),发版后只有内容变了的文件需要重新下载;第三方代码与构建工具注入的辅助代码起初同应用代码分开成块,只随依赖升级变化,按成本才与应用代码合并(如访问很少的登录验证码与词表页);小于 1 KiB 的产物由 19 个减为 4 个,产物文件由 96 个减为 69 个。按模拟发版测量,公开页改动后回访展映需重新下载的部分由约 179 KB 降为约 2 KB(只有页面文档),首页 45 → 2 KB,画廊 64 → 14 KB,拼音筛选 67 KB → 0;入口组件改动后各页约 20 KB。
  • 服务端在页面文档中预加载路径实际显示的页面需要的脚本与样式(关闭的页面按路由的回退规则换成回退页面),入口运行时即开始加载该页面,就绪后再首次渲染,加载失败时显示路由的错误提示;等待期间由页面文档直接显示“加载中…”,慢速网络下从文档到达起就有提示,页面就绪后一次替换,不再等待 React 的 300 毫秒揭示节流。后台页面文档同时预加载登录状态请求,首次渲染前按登录状态加载登录页,或登录后的工作区与当前页面。连同分块变化,本地 4G 限速下首页、画廊、嵌入画廊内容出现约提前 230 至 290 毫秒,展映约 100 毫秒,后台登录页约 480 毫秒,已登录直接打开后台页面约 340 至 370 毫秒;同一版本回访时公开页约提前 290 至 310 毫秒,后台约 510 毫秒。

fix:

  • 静态资源地址与存储后端公开地址的长度上限改为同时检查规范化后的长度:路径含大量中文等需要编码的字符时,超长的值在保存时就被拒绝,不再出现保存成功、重启或读取时失败。
  • 展映与画廊向下滚动隐藏的工具栏不再接收点击,与隐藏的顶栏一致。

style:

  • 图片详情窗口管理信息中的“存储”改为“存储信息”。

refactor:

  • 后台概览、日志、用户、词表页面移入各自目录,分组请求与永久删除进度客户端移到所属页面旁;共用块的文件名统一为 common(访客也会加载)与 shared(只有管理员加载),不再按使用它的页面拼出长名字,块名按工作区相对路径计算,不同机器一致。
  • 后台工作区页面的地址、模块与所需权限集中为一张表,路由注册与首屏选择页面共用;公开页面的启用、回退与嵌入规则集中为一个函数,路由、首屏加载与服务端文档预加载共用,嵌入关闭时不再注册嵌入布局。
  • 编辑器中的图片存储迁移声明为超级管理员能力,分块时不与图片管理员代码合并。
  • 公开与后台共用的移动导航菜单文字改用后台可覆写的颜色别名,后台外观不再依赖公开样式是否加载。

test:

  • 配置用例补公开地址规范化后长度的拒绝与往返断言,页面文档改为按各自 ETag 校验条件请求并比较预加载与加载文字颜色以外的内容,补关闭页面预加载回退页、导入映射按静态资源地址改写且 CSP 按其哈希放行的断言,脚本来源断言改为含映射哈希,删除与严格保存重复的脚本来源环境播种断言;Web 构建门禁改为核对四层权限分界(登录与登录验证码不含外壳与登录文件以外的后台页面模块及图片管理员能力)、块导入无环、重复资产与文档预加载清单;静态压缩装配夹具补预加载清单,Web 用例随目录移动更新导入;站点根入口用例补路径实际显示页面的断言,模块加载用例补首屏加载失败后不再重复导入的断言,会话用例补公开页首屏会话读取按所有者重试的断言,嵌入光标与安全区用例改为按挂载启停桥接。

chore:

  • Web 参考、结构指南与通用规则同步新的分块规则、权限与访问声明和后台目录约定;安全参考写明文档 CSP 按导入映射的哈希放行,以及前端静态资源(含后台代码)公开可取、权限只由服务端强制;交付规范增加只修改拟用提交信息或 Release 文案时的审查要求(主进程自查,不重新复审或跑门禁)。
  • 根包与三个 workspace 版本统一为 6.8.9。