What's New · 产品迭代时间轴
更新日志
每一次发布都可追溯:性能、功能、视觉、数据、基建、修复,一目了然。 最近更新:2026-04-18
2026年4月20日 – 4月26日
4 项-
性能 2026-04-24
性能优化 + 首页/导航/工具列表可见改版
根因(与代码核对,非猜测):① `resources/views/components/tool-list-icon.blade.php` 默认 `loading='eager'`,首页与列表页大量工具图标会在首屏同时抢网络。② `public/js/icon-optimize…
查看全部改动(4 条)
- 根因(与代码核对,非猜测):① `resources/views/components/tool-list-icon.blade.php` 默认 `loading='eager'`,首页与列表页大量工具图标会在首屏同时抢网络。② `public/js/icon-optimizer.js` 又把外链图标统一改为立即加载,并重复注册 `/sw-icon-cache.js`,造成重复初始化。③ 首页与 `tools/index` 虽已有数据和入口,但视觉焦点分散,老板打开页面不容易第一眼感知最近做了哪些优化。
- 性能:`resources/views/components/tool-list-icon.blade.php` 改为默认 `loading='lazy'`,并按 eager/lazy 自动设置 `fetchpriority`;`public/js/icon-optimizer.js` 改为尊重模板层的显式 `loading`、使用 `requestIdleCallback` 延后优化、移除重复 SW 注册;`resources/views/layouts/app.blade.php` 中 `/sw-icon-cache.js` 改为浏览器空闲后单次注册,`icon-optimizer.js` 仅在首页/工具/分类/探索等需要图标的页面按需加载。
- 视觉与交互:`resources/views/layouts/app.blade.php` 顶栏新增品牌文案、本周更新胶囊、右侧「本周更新 N 项」入口和带图标的提交按钮;`resources/views/home.blade.php` 首页 Hero 改为双栏结构,加入增长信号、快捷入口、更新数字与更强的搜索主视觉;`resources/views/tools/index.blade.php` 工具总览页改为大搜索 Hero + 站点规模卡 + 搜索状态卡 + 分类分组白卡;`resources/views/partials/tool-grid-card.blade.php` 卡片新增「站内详情/官网直达」徽章、底部 CTA 与更明显的 hover 反馈。
- 自检:`npm run build` 成功生成最新 `public/css/app.css`;`C:\tools\php82\php.exe artisan view:cache` 成功,Blade 视图编译通过。
-
性能 2026-04-23
更新日志:/changelog 时间轴页面与解析器
`app/Support/ChangelogParser.php`(日期块解析 + 六分类自动归类 perf/fix/feat/ui/data/infra + 按周聚合 + `recentCountCached` 首页安全调用);`app/Http/Controllers/Ch…
查看全部改动(5 条)
- 动因(与现有代码核对):老板汇报时反馈「看不出改动」。近一个月的优化(图标 data URI 下线、顶栏折叠、列表分页、Seeder 扩充)大多是「打开页面看不出来的隐形工程」,需要一个可访问的时间轴页把 `修改记录.txt` 变成站内可见的成长信号。
- 新增:`app/Support/ChangelogParser.php`(日期块解析 + 六分类自动归类 perf/fix/feat/ui/data/infra + 按周聚合 + `recentCountCached` 首页安全调用);`app/Http/Controllers/ChangelogController.php`;`resources/views/pages/changelog.blade.php`(Hero + 分类筛选 chips + 时间轴卡片 + 空态);路由 `Route::get('/changelog', ...)`→`changelog`。
- 修改:`resources/views/layouts/app.blade.php`(顶栏新增「更新日志」chunk,主动参与「更多」折叠)。
- 兼容:Parser `defaultSourcePath` 优先使用 `storage/app/changelog/source.txt`,再兜底根目录中文文件名;避免某些 PHP 构建在 Windows 上的中文文件名 I/O 问题。
- 副本:`storage/app/changelog/source.txt` 通过 `copy` 原样二进制镜像自 `修改记录.txt`(UTF-8 字节一致)。
app/Support/ChangelogParser.phpapp/Http/Controllers/ChangelogController.phpresources/views/pages/changelog.blade.phpresources/views/layouts/app.blade.php -
性能 2026-04-23
/internal/perf-report:性能与能力对比报告(内部)
`app/Http/Controllers/Internal/PerfReportController.php`(指标 delta_pct 自动计算;Lighthouse 截图按 `<key>.before.png` / `<key>.after.png` 自动配对显示);`c…
查看全部改动(4 条)
- 动因:把「2026-04-20 图标 data URI 下线 / 列表分页 / 数据扩充 / 顶栏折叠 / 404 友好页」等隐形工程以 Before/After 数字 + 证据链方式集中展示,可直接向管理层复盘。
- 新增:`app/Http/Controllers/Internal/PerfReportController.php`(指标 delta_pct 自动计算;Lighthouse 截图按 `<key>.before.png` / `<key>.after.png` 自动配对显示);`config/perf_report.php`(预填 12 项真实指标,每项附 `source` 指向 修改记录.txt 日期或具体文件);`resources/views/pages/internal/perf-report.blade.php`(分组表格 + 截图对比 + 补图说明)。
- 路由:`Route::middleware(['auth', 'admin'])->get('/internal/perf-report', ...)`→`internal.perf-report`。
- 使用:还原 `code-backups/kaixinniao.com-pre-opt-*.zip` 各跑一次 Lighthouse,把截图放入 `public/internal/perf/<key>.before.png` / `.after.png` 即自动成对出现。
app/Http/Controllers/Internal/PerfReportController.phpconfig/perf_report.phpresources/views/pages/internal/perf-report.blade.php -
性能 2026-04-20
性能:工具图标不再内联 data URI(列表/首页 HTML 体积)
`app/Http/Controllers/ToolStoredIconController.php`;路由 `GET /tool-icon/{tool}` → `tools.stored-icon`(仅已发布、校验与 Tool 模型一致,二进制响应 + ETag + `Cac…
查看全部改动(5 条)
- 备份(优化前):仓库根目录 `code-backups/kaixinniao.com-pre-opt-20260420-192353.zip`(含 app、bootstrap、config、database、public、resources、routes、scripts、tests 及 composer/package 清单,不含 vendor/node_modules)。
- 根因(有据):Network 中大量 `data:image/...` 且 Initiator 为文档,与 `Tool::getDisplayThumbnailUrlAttribute` 在存在有效 `icon_base64` 时直接返回整段 data URI 一致;HTML 巨大导致 DOMContentLoaded 极慢。
- 新增:`app/Http/Controllers/ToolStoredIconController.php`;路由 `GET /tool-icon/{tool}` → `tools.stored-icon`(仅已发布、校验与 Tool 模型一致,二进制响应 + ETag + `Cache-Control: public, max-age=31536000, immutable`)。
- 修改:`app/Models/Tool.php`(入库位图改为 `route('tools.stored-icon')`;`rawSelectHasBitmapIconHint` / `isStoredBitmapIconPayload` / `shouldServeStoredBitmapIconAsHttp`);`app/Http/Controllers/ToolController.php`(列表查询不再 SELECT `icon_base64`,改为 SQL 表达式列 `has_bitmap_icon_hint`;缓存键 `category_tools_*_st5`、`tools_index_categories_subtree_v6`);`routes/web.php`;`app/Support/ToolPublicDisplayCache.php`、`app/Console/Commands/SyncToolsToSubcategoriesCommand.php`、`database/seeders/ToolSubcategoriesSeeder.php`(补充 forget v6)。
- 部署后:建议 `php artisan cache:clear` 或至少清上述键;可选 `php artisan route:clear`。
app/Http/Controllers/ToolStoredIconController.phpapp/Models/Tool.phpapp/Http/Controllers/ToolController.phproutes/web.phpapp/Support/ToolPublicDisplayCache.phpapp/Console/Commands/SyncToolsToSubcategoriesCommand.php+1 个文件
日志根据仓库根 修改记录.txt 自动解析 · 每 10 分钟刷新一次缓存