iOS端Swift调用Cloud Firestore写入数据耗时超90秒问题咨询
可能的原因如下:
- 客户端网络异常:iOS设备当前处于弱网环境(蜂窝信号差、WiFi丢包率高、DNS解析故障)时,Firestore SDK默认采用指数退避策略重试写入请求,多次重试叠加就会出现几十甚至上百秒的耗时。你可以切换不同网络环境(比如换手机蜂窝、换其他WiFi)测试验证。
- 服务区域跨距过大:如果你的Firestore实例部署的区域和当前测试设备的地理位置距离过远(比如实例部署在北美、设备在国内访问),跨区域传输本身的基础延迟就很高,叠加网络波动后耗时会进一步放大。
- 离线持久化队列阻塞:Firestore iOS SDK默认开启离线持久化,若本地缓存存在大量未同步的挂起写入任务,新的写入请求会进入队列排队等待,会导致回调触发时间大幅延迟。你可以检查是否有之前失败的写入任务一直未处理,也可以临时关闭离线持久化测试耗时是否恢复正常。
- 数据序列化异常:从你贴出的数据结构来看,
roastProfileLink字段直接传了URL对象而非字符串类型、recipeType字段的Filter也未转为字符串原始值,这类类型不匹配的问题会导致SDK序列化数据失败,触发无意义的重试,最终表现为写入耗时极长。你可以先把所有非基础类型(URL、枚举、自定义对象)都提前转为String/Number等Firestore支持的原生类型后再写入测试。 - 服务端限流排队:你近30天写入量级达到3100万次,若当前写入时段刚好遇到服务端流量峰值,可能会触发软限流,请求会进入服务端排队队列延迟处理,也会导致耗时上升。
- 客户端线程阻塞:若你调用
setData的线程或者回调绑定的队列存在大量密集计算任务,会导致回调中的打印操作被延迟执行,打印出的耗时会高于实际写入耗时。你可以通过抓包工具查看实际的HTTP请求耗时,排除客户端线程阻塞的影响。
内容的提问来源于stack exchange,提问作者sebasx
相关产品推荐
相关产品推荐

