先说好处(本机实数)
- 全局包现在只有 42.7 KB CSS + 14.6 KB JS;已有 23 个插件、484 KB 资源是独立按需文件,不在包里。
- 首页/版块页这类不需要它们的页面,样式体积直接从 ~540 KB 量级降到 ~57 KB;CSS 是渲染阻塞资源,省的是解析/布局时间,不只是带宽。
- 缓存友好:全局包任何一个插件改了,hash 变 → 所有访客缓存全失效;按需文件只有自己改时才变,且 URL 里的 ?v=sha256 可当永久缓存。
- JS 用 defer 单独加载,不需要的页面连脚本都不请求,也不执行。
- 和 links 配套时是完整的「零常驻」:PHP 不 include、CSS/JS 不加载,独立游戏插件对其它页面成本接近 0。
机制
- 非按需插件:assets 函数在保存时被调用,产物按插件 ID 字母序拼进全局 app/assets/plugins.css / plugins.js,每个页面都加载,整包一个 hash 做版本号。
- 按需插件:单独写 app/assets/plugins/<id>.css|js,不进全局包;plugin_asset_require() 只在请求内标记 ID,最终渲染时把 <!--plugin-assets:css--> 占位符替换成「全局标签 + 每个被申请插件的独立标签」,URL 带 ?v=<sha256>。
- 文件失踪会自愈:清单说有资源但文件没了,plugin_assets_html() 会对缺失 ID 触发一次重建(每请求最多一次)。
- 插件保存/启用/停用/卸载 → 该插件资源重建;只有成员变化才重打全局包。
最后由 bbs1 编辑于 2026-10-30 10:55主楼