5月30日 21:21
RxJS 性能优化应该从哪些地方下手?
RxJS 性能优化先看三件事:有没有重复订阅,有没有处理过多无效事件,有没有订阅生命周期失控。多数慢不是操作符本身慢,而是同一个 HTTP Observable 被订阅多次、输入框每个字符都打接口、组件销毁后流还在跑。优化时不要一上来堆操作符,先用浏览器 Network、Performance 和简单日志确认瓶颈在哪里。
追问
share 和 shareReplay 应该怎么选?
share 只共享当前订阅期,晚来的订阅者拿不到历史值。shareReplay(1) 会回放最近一次结果,适合 HTTP 缓存,但要注意 refCount 和生命周期。
为什么搜索框通常用 switchMap?
用户连续输入时,旧关键词的请求结果已经没价值了。switchMap 会取消上一次内部订阅,避免慢请求晚返回覆盖新结果。
mergeMap 限制并发有什么意义?
批量请求如果不限制并发,浏览器连接数、服务端限流和内存都会被打满。可以用第二个参数控制同时执行数量。
怎么避免内存泄漏?
模板里优先用 async pipe;必须手动订阅时,用 takeUntilDestroyed() 或明确的 takeUntil(destroy$)。
写段代码
tsfrom(ids).pipe( mergeMap(id => api.load(id), 3) ).subscribe();