Skip to content

boogieLing/Tsugie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tsugie

つぎへ、一緒に
次も、また、鼓動の芽吹く場所へ
次も、また、花火の響く夜へ
ときめきは、ゆっくり積もっていく。

心之所往
下一次,再次,走去心跳生长的地方
下一次,再次,听着花火打响的夜晚
期待,会慢慢堆积。

Tsugie 品牌视觉

Tsugie 在做什么

打开 App,不需要登录,不需要配置,不需要学习复杂操作。 Tsugie 会在当下这个时刻,给出最值得去的下一站。


产品能力

1) 下一站决策引擎

  • 以“当前时间 + 当前地点”为输入,直接给出下一站值得去的
  • 首屏全屏地图直达决策链路,无登录门槛、无学习成本。
  • 地图点位 -> quickCard -> 详情页,一步步把“想去”变成“立刻出发”。

2) AI 推荐算法 + AI 热度推算

  • AI 推荐同时建模空间距离、时间状态、活动热度,实时重排候选集合。
  • AI 热度与惊喜度贯穿卡片和详情表达,让“为什么推荐它”可感知、可解释。
  • unknown / ended / 长等待 活动执行严格门禁与降权,推荐池持续保持可行动质量。

3) 地图视角 + 时间视角双引擎

  • 地图页负责“此刻在哪儿去”,日历页「時めぐり」负责“接下来哪天去”。
  • 两条视角共享统一时间状态模型:upcoming / ongoing / ended / unknown
  • 地图、轮播、详情、日历保持同源判断,用户在任何入口都能得到一致结论。

4) 装饰系统 + 打卡图章系统

  • 收藏语义固定为“想访问”,打卡语义固定为“已访问”,全场景统一 logo 表达。
  • 装饰、图章、状态反馈形成可积累体验,每一次互动都会留下可见痕迹。
  • 未到开始时间禁止打卡,顶部中间提示气泡即时反馈,规则清晰且有仪式感。

5) 一键出发能力

  • 支持 Apple 地图与 Google 地图双通道导航,点击即走。
  • 导航起点与定位策略同源:日本境内且授权通过使用真实定位,否则使用东京天空树默认点。
  • 本地通知支持开始前提醒,帮助用户把“想去”转成“到场”。

6) 稳定与沉浸体验

  • 密集点位下仍保持点位、气泡、装饰、按钮可点击、可预期。
  • 多语言体验完整覆盖 ja / zh-Hans / en,文案语气统一。
  • 动效节奏与交互反馈持续优化,保持连贯、顺滑、低打断的地图体验。

技术亮点

1) 地图计算引擎

Tsugie 将“地图推荐”实现为完整算法链路,贯穿数据、检索、排序与展示。

A. 地图资源包准备:Hash Geo 分块 + 二进制帧索引

  • 全量活动数据先做统一清洗与语义对齐,再进入空间索引阶段。
  • 采用 Geohash 前缀做空间哈希分桶(Hash Partition),将全国数据切成可随机访问的小块。
  • 每个桶独立编码,最终写入二进制 payload;索引文件仅保存:
    • bucket -> offset/length
    • 校验信息
    • 编解码协议元数据
  • 运行时按 offset/length 直接跳读命中桶,避免全量扫描。
  • 这本质上是“空间索引 + 文件级随机访问”,目标是把 I/O 从全量线性读取降到命中桶读取。

B. 地理位置编码:多阶段纠错 + 重叠修复门禁

  • 坐标链路采用多阶段可靠性治理:
    • 主来源坐标直用
    • 低置信度项走联网 geocode(含缓存)
    • 极端缺失再走兜底策略并标记来源
  • 对“同坐标堆叠脏数据”做二次修复:
    • 以经纬度 6 位小数聚类(哈希聚类)
    • 对低置信度重叠组逐条重查
    • 命中新坐标且与旧值不同才覆盖写回
  • 导出前设质量门禁:高风险重叠组超过阈值直接阻断发包。
  • 目标是将“错误坐标可视化污染”前置消灭在数据端,客户端保持稳定消费链路。

C. 周边快速检索:扩圈检索 + Top-K 排序

  • 用户位置先编码为中心 Geohash,再基于网格边界计算检索步长。
  • 检索采用 Ring Expansion(扩圈)策略:R -> 2R -> 4R,逐级放大,不命中不做无谓解码。
  • 每轮只读取命中桶分片,解码后进入候选池,再做分层筛选:
    • 高精度坐标优先
    • 低置信度坐标降权
    • 过期活动粗排剔除
  • 最终做 Top-K 输出,保证首屏和轮播在高负载下仍稳定出结果。

D. 复杂度表达

  • 空间命中:O(B_hit)(命中桶数)
  • 候选排序:O(M log M)(候选量 M)
  • 随机读取:O(1) 索引寻址 + 顺序解码命中分片
  • 工程目标:把“全国数据问题”转成“附近小集合问题”

E. 线段树思维:时间轴区间治理

  • Tsugie 将时间状态按区间问题处理:
    • ongoing
    • upcoming(<3h / <12h / <24h / >24h)
    • ended
    • unknown
  • 这是一种 Segment-Tree 风格的区间命中思维:先命中时间段,再套对应评分与门禁规则。
  • 好处是规则可扩展、可解释、可稳定迭代,不会因为“补一个 if”把排序搞乱。

2) AI 推荐算法 + AI 热度推算

Tsugie 将 AI 推荐与 AI 热度推算整合为统一决策内核,确保“可去性”和“吸引力”同时被计算。

A. 多信号特征融合:空间 + 时间 + 动态热度 + 动态惊喜

  • 推荐内核采用多目标信号融合:空间可达性、时间可行动性、动态热度、动态惊喜、近场增益与临场窗口增益并行建模。
  • 排序核使用分层融合器与置信度惩罚链路,将弱置信、低时效候选稳定压制在后排。
  • 空间衰减负责“去哪更顺路”,时间门控负责“什么时候更值得”,热度与惊喜负责“为什么此刻更想去”。

B. 时间状态门禁:先判可行动,再做分数竞争

  • 粗排阶段先剔除 ended,避免过期活动进入推荐池。
  • 精排阶段把 unknown 明确压到最后层级,确保“时刻已知”候选优先曝光。
  • upcoming 采用 <3h / <12h / <24h 阶梯窗口,>24h 进入连续衰减,避免远期开场误占前排。
  • ongoing + near 通过专用增益项强优先,确保“正在进行且离你近”的活动稳定进入前列。

C. 类别先验与同分策略:保证业务优先级稳定

  • 类别先验采用可配置策略矩阵,在同分与近同分区间参与最终裁决。
  • 同分处理加入稳定化规则,避免轮播首位因微小扰动频繁抖动。
  • 类别先验与时间门禁协同执行,保证低时效候选无法绕过时机约束。

D. 热度推算:从静态分值到动态体感

  • 动态热度具备完整时段行为:开场前预热、进行中抬升、结束后冷却。
  • 动态惊喜在进行中与临近开场区间获得额外增益,并与距离信号耦合。
  • 热度与惊喜度共同驱动推荐与详情表达,确保排序结论与氛围反馈一致。

E. 可解释推荐:结果可追溯、文案可感知

  • 每个推荐结果都可由“距离、时间状态、动态热度、动态惊喜、近场增益”解释。
  • 排序核与卡片展示层共享同源信号,避免“排第一但解释不通”的断裂体验。
  • 推荐输出稳定遵循同一规则,不因入口差异而改变决策口径。

3) 装饰系统 + 打卡图章系统

Tsugie 将收藏、打卡、图章、装饰统一为单一状态体系,让“操作结果”在全场景可见且一致。

A. 统一语义层:收藏与打卡不再分裂

  • 收藏语义固定为“想访问”,打卡语义固定为“已访问”。
  • 打卡自动联动收藏,避免用户出现“已到场但不在收藏”的语义冲突。
  • 地图、卡片、抽屉、详情共享同一语义层,状态表达不漂移。

B. 图章双阶段机制:先反馈、后沉淀

  • 交互初期采用瞬态图章提供即时反馈,降低点击后的空窗感。
  • 当用户形成收藏或打卡行为后,图章进入稳定锁定阶段。
  • 这套机制兼顾“轻反馈速度”与“长期记忆沉淀”。

C. 装饰显示策略:焦点优先,避免视觉污染

  • 装饰层优先跟随当前焦点点位,突出当前决策对象。
  • 非焦点装饰被主动收敛,减少密集地图上的干扰和误触。
  • 在重叠点位场景中,装饰不会破坏主交互层级。

D. 打卡门禁:状态机统一裁决

  • upcoming 活动不允许打卡,规则在全入口一致执行。
  • 拦截后触发顶部中间提示气泡,反馈即时且可感知。
  • 提示自动销毁,避免常驻遮挡和二次干扰。

E. 长会话一致性:状态不抖、不丢、不串

  • 状态更新采用幂等策略,重复触发不会造成回退。
  • 清理与重建后状态可恢复,减少“重进后变样”的不确定感。
  • 结果是:用户的每一次互动都能被稳定记住并持续可见。

4) 动态资源回收与生命周期治理

Tsugie 把资源治理做成常态化机制,目标不是“短时能跑”,而是“长时稳定运行”。

A. 多触发回收矩阵:主动治理而非被动补救

  • 定期回收周期:180s
  • 内存看门狗巡检:8s
  • 相机变化触发:跨距 180km 或累计 14 次显著移动。
  • 多触发并行存在,保证不同负载场景都能及时收敛。

B. 双阈值内存策略:高压与紧急分级处置

  • 高压阈值:380MB,进入主动回收路径。
  • 紧急阈值:460MB,先裁剪渲染集合,再执行实例重建。
  • 分级处置避免“一刀切”重建带来的体验跳变。

C. 回收链路原子化:清理顺序可控

  • 回收时同步清理查询签名、缓存快照、异步任务和临时状态。
  • 地图实例重建与推荐上下文解耦,避免回收过程污染当前视野推荐。
  • 通过统一清理顺序阻断旧状态残留导致的幽灵行为。

D. 页面生命周期闭环:入场/离场都可验证

  • 入场建立必要观察链路与调度任务。
  • 离场统一终止任务与观察者,杜绝悬挂引用。
  • 详情重资源在离场时显式释放,防止反复进入导致内存台阶上升。

E. 长会话稳定性目标:可持续而非一次性

  • 在连续拖动、连续选点、频繁进出详情的组合压力下保持响应。
  • 资源回收不破坏交互上下文,不出现“回收后推荐口径跳变”。
  • 最终效果是:会话越长,体验曲线仍保持稳定。

5) 分阶段渲染方案

Tsugie 在详情页采用“粉末渲染”管线,把重渲染拆成可控节奏。

A. 三阶段渲染编排:header -> media -> full

  • 首阶段只输出标题与关键状态,先保证“信息可读”。
  • 媒体阶段延后展开,避免首帧被图像解码阻塞。
  • 完整阶段再补齐长内容,保证结构稳定后再填细节。

B. 骨架优先策略:先交付结构,再交付重量

  • Hero 图、氛围区、延迟模块都提供对应骨架块。
  • 骨架采用统一节奏过渡,降低白屏感与闪断感。
  • 用户在等待资源期间始终有可理解的页面骨架。

C. 媒体解码策略:后台加载 + 下采样

  • 插图与活动主图均采用异步加载,避免主线程长阻塞。
  • 插图下采样上限 420,主图下采样上限 1280,兼顾清晰度与内存占用。
  • 可见性优先加载,让首屏视觉先完整再逐步精修。

D. 出场销毁策略:资源不常驻

  • 详情离场时主动释放位图引用,避免隐性堆积。
  • 重新进入时按需重建,不携带旧图缓存污染新页面。
  • 该策略显著降低“多次开关详情后”内存累加。

E. 体验收益:打开更快,滚动更稳

  • 首次进入时延下降,用户先读信息再等细节。
  • 分阶段填充减少一次性大渲染引发的掉帧。
  • 在复杂详情内容下仍保持可控的交互连续性。

6) 多处动画防抖与交互抗抖动优化

Tsugie 对“拖动 -> 重排 -> 点选”链路建立了完整抗抖控制。

A. 事件分流:连续事件与稳定事件分轨

  • 连续相机事件只做轻量心跳,不直接触发重计算。
  • 只有稳定事件点才进入重算链路,避免逐帧重排。
  • 这让地图拖动保持流畅,后台计算保持克制。

B. 视口重算门限:有阈值才重排

  • 位移阈值:0.12km
  • 缩放阈值:1.05
  • 默认去抖窗口:220ms
  • 三重条件共同抑制“微抖动 -> 大重排”的放大效应。

C. 程序化相机抑制:系统跳转不扰动用户链路

  • 程序化相机变化进入抑制窗口,不参与手势重排判定。
  • 定位重置、卡片聚焦、地图重建等动作不会意外触发推荐翻页。
  • 用户手势与系统动作边界清晰,行为可预期。

D. 包络内轻裁剪:能少算就不多算

  • 当新视口仍落在已加载包络内,仅执行轻量裁剪。
  • 避免完整 reload 带来的闪烁与序列抖动。
  • 这一步显著提升拖动中的视觉稳定性。

E. 密集点位命中增强:从“能点中”到“点得准”

  • 采用聚类锚点与分层命中,优先保障动作按钮可点性。
  • 对重叠点位支持强制展开,降低误取消概率。
  • 气泡、装饰、按钮在紧邻场景下仍保持可点击、可预期。

7) 全量内置数据包 + 实时附近检索

Tsugie 采用“双轨数据平面”:离线内置能力保证启动速度,实时检索能力保证视野准确。

A. 冷启动优先:先可用,再扩展

  • 首屏可直接读取内置数据包,避免网络冷启动等待。
  • 进入即有可计算候选,不依赖远端接口先返回。
  • 在弱网场景下仍能保持决策链路完整。

B. 邻域按需解码:只读需要的分片

  • 视口变化后按扩展区域动态估算查询半径与查询上限。
  • 仅加载附近分片并增量替换渲染集合,不做全量粗暴加载。
  • 该策略把 I/O、CPU 与内存峰值控制在可预测区间。

C. 双路径协同:全量缓存与分片检索自动切换

  • 全量缓存可用时走内存路径,优先稳定时延。
  • 全量缓存尚未就绪时走分片附近检索,保证响应连续。
  • 两条路径共享同一排序口径,避免入口切换导致结果突变。

D. 推荐池与渲染池解耦:回收不改语义

  • 推荐候选集合与地图渲染集合独立维护。
  • 地图重建或内存回收后,推荐仍可基于当前视野重建。
  • 这避免了“回收后又回到定位点推荐”的语义回跳。

E. 韧性目标:波动网络下仍可决策

  • 在弱网、抖动网、间歇网环境下持续提供附近建议与导航入口。
  • 视口移动后的推荐刷新保持可预期,不被网络状态反复打断。
  • 速度与稳定性不是二选一,而是同一套数据平面下的并行目标。

8) 侧栏与日历预热优化

Tsugie 将“开抽屉卡顿”与“日历打开慢”作为独立性能课题治理,建立了预热优先的交互路径。

A. 启动期双预热:收藏抽屉 + 日历缓存同步预备

  • 启动阶段同步预热收藏抽屉快照与日历缓存,减少首次展开时的临场计算。
  • 预热任务与地图初始化并行执行,避免把压力集中到单次点击时刻。
  • 目标是让“首开侧栏/首开日历”从计算触发点变成缓存命中点。

B. 日历侧栏详情预热:按天预构建 + 直接命中

  • 日历详情数据按 dayKey 预分组并预排序,打开侧栏直接读取结果。
  • 详情抽屉关闭后保留缓存,不在每次开关中重复重建。
  • 在性能优先策略下允许轻微实时性牺牲,换取稳定帧率与响应速度。

C. 月块预构建池:翻页只切视图,不重做整月

  • 日历月视图采用月块池预构建,提前准备前后月份结构。
  • 翻页时优先复用池内月块,仅在缺块时增量补齐。
  • 该策略显著降低“翻月瞬时创建大量格子”造成的掉帧风险。

D. 侧栏快照缓存:固定统计不再打开时现算

  • 收藏筛选、计数与分类统计进入快照缓存,按状态修订号增量失效。
  • 收藏/打卡变更只触发局部快照更新,不做全量重算。
  • 结果是侧栏打开动作从“计算驱动”切换为“读取驱动”。

E. 抽屉动画调度:统一开关曲线与层级过渡

  • 主页侧栏与收藏抽屉采用统一动画调度,避免开关速度突变和闪烁。
  • 抽屉插入/移除使用显式过渡,减少层级切换时的视觉跳变。
  • 保持动效一致性的同时降低主线程瞬时负担,提升整体交互顺滑度。

这就是 Tsugie

一个真正以“下一步决策”为核心的地图产品。

Tsugie 从定位、推荐、交互、渲染到资源治理,形成完整系统能力。


隐私与合规文档

  • 隐私政策与提审口径(本地文档):记录/tsugie-隐私政策与提审口径-v1.md
  • 提审预检清单:ios开发/tsugie/tsugie/APP_STORE_PRECHECK.md
  • 隐私声明页面(线上):https://www.shyr0.com/idea/tsugie/privacy

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors