## 使用 URLPattern 的原生 JavaScript SPA 路由器 本文详细介绍了如何仅使用原生 JavaScript 和新推出的 `URLPattern` API 构建一个简单的单页面应用程序 (SPA) 路由器。路由的核心挑战不是条件渲染,而是准确地将浏览器 URL 匹配到相应的组件——特别是那些具有动态片段的 URL(例如 `/posts/{post_id}`)。`URLPattern` 简化了此匹配过程。 该方法涉及一个组件,它接收路由器配置(一个将 URL 映射到 Web 组件的数组),并根据当前 URL 渲染适当的组件。处理导航需要拦截链接点击 (`preventDefault()`) 并使用 `window.pushState` 手动更新 URL,以模拟页面过渡。至关重要的是,需要服务器配置(例如 Vite 的 `spa` 模式或 Netlify 重定向),以确保所有路由都提供主 HTML 文件。 浏览器 `popstate` 事件处理后退/前进按钮导航,根据更新的 URL 触发重新渲染。作者提供了一个可运行的 StackBlitz 示例,并提醒注意安全漏洞——特别是避免基于 URL 参数动态注册组件,以防止潜在的 XSS 攻击。最后,文章承认从头开始构建路由器很复杂,并建议考虑使用成熟的框架,同时强调理解底层原生 API 的教育价值。
## Hachi:自托管个人图像搜索引擎 – 摘要
Hachi是一个自托管搜索引擎,旨在高效地搜索用户个人数据,最初专注于图像,并计划扩展到其他媒体类型。 受到个人数据日益增多且分散在各种设备和云服务中的影响,该项目旨在提供注重隐私、可定制的搜索体验。
其核心动机源于现有搜索引擎的局限性——单向查询流程、无法处理部分信息以及缺乏用户反馈机制。 Hachi优先向用户展示所有资源属性,从而实现迭代查询优化,并利用传统的和语义的(基于机器学习的)搜索能力。
该实现强调极简主义、可修改性和性能。 它使用Nim和Python,侧重于避免不必要的依赖并实现轻松修改。 关键特性包括自定义元数据数据库、用于语义搜索的向量索引以及模块化设计,可能允许使用低成本硬件进行分布式查询。
尽管仍在开发中,Hachi展现出良好的性能和稳定性,展示了从各种来源索引数据的流程。 该项目体现了开源开发的理念,优先考虑用户控制,并挑战大型科技公司的数据实践。 未来的开发将侧重于完善界面、扩展功能并探索可持续的资金模式。