iphone - 在慢速连接上快速移动 I/O 的最佳实践是什么?

标签 iphone android networking caching mobile

我有一个移动应用程序,它非常受数据驱动,尽管只是通过文本和图像。 在当前版本中,每次点击或触摸都需要从服务器 (appache/php) 中提取新数据。由于网络延迟,第一个内容出现很容易需要 1-2 秒,这太长了。

我听说过并考虑过以下选项,但不确定其中一些是否会适得其反,或者我是否遗漏了一些重要的东西?

  • 从一开始就大量下载所有数据,并带有加载屏幕?
  • 运行预取线程,在后台预测和下载用户可能需要的数据?
  • 始终保持与服务器的连接打开?
  • 在不同的连接中并行加载数据的不同部分? (类似于 Facebook )
  • 使用大量数据压缩?

有关此事的综合文章也是一个很好的答案。

最佳答案

我想说的是,这些建议中的大多数都...非常一般。除了使用压缩。一定要在您使用的 Web 服务器上启用压缩。您绝对不想保持一个连接打开或有多个连接。移动设备的最大问题是延迟,而不是带宽,因此使用多个连接无济于事,反而会很快耗尽电池电量。至于保持连接打开,甚至不要考虑这样做。这是移动开发的最大假设之一 - 仅在需要时保持连接打开。

移动瘦客户端的经验法则是在绝对必要时下载尽可能少的数据。这里有一些提示:

  • 不要随数据一起发送太多元数据。如果是 JSON,请考虑更改结构,这样您就不会为每条记录发送字段名称。以下面的 JSON 为例:
{
 success: true,
 data:[
   {ProductName: "Coca-Cola can", Weight: 380, imageUrl: "http://path.to/image.png"},
   {ProductName: "Gillete deodarant", Weight: 500, imageUrl: "http://path.to/image.png"}
 ]
}

如您所见,有很多重复的字段名称,您可以像这样去掉它们以减少负载:

{
 success: true,
 fields: {"ProductName": 0, "Weight" : 1, "imageUrl": 2}
 data:[
   ["Coca-Cola can", 380, "http://path.to/image.png"],
   ["Gillete deodarant", 500, "http://path.to/image.png"]
 ]
}
  • 减少每次发送的数据量。不要一次发送足够 10 个屏幕的数据。可能提供两三个屏幕,并使用无限滚动或某种分页。

  • 研究 HTTP 缓存。确保设置了缓存 header ,并确保您使用的网络客户端尊重这些 header 。

  • 积极缓存。查看适用于 iPhone/Android 的任何 Twitter 客户端。他们不会在每次启动时下载所有可见的推文,它们存储在本地。

关于iphone - 在慢速连接上快速移动 I/O 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3465155/

相关文章:

iphone - 错误 "could not retrieve certificate chain from keystore"

ios - Swift 3 - 直接打开 App Store 评论选项卡(不是 iTunes Store 评论选项卡)

iphone - 核心数据 TableView 部分使用 NSSortDescriptor 按工作日排序

java - Android Studio DatatypeFactoryImpl 未找到

sql - Android:获取列中的最高值

iphone - 使用静态 NSDate 确定通过时间

android - Environment.getExternalStorageState() 在虚拟设备上返回 false

ios - 从 iOS 14 或 14.0.1 开始 WiFi 可以工作,但 LTE 不能

python - friend 的私有(private)(Raspberry)数据服务器

ios - iCloud - NSMetadataQuery 返回旧结果,显示已删除的文件