1

我正在做的是查询一个 API 来搜索各种数据库中的文章。涉及多个步骤,每个步骤都返回一个 json 对象。每个步骤都涉及到一个 NSUrlConnection,它带有不同的 API 查询字符串

步骤 1:返回指示查询状态和记录集 ID 的 json 对象。

第 2 步:从第 1 步获取记录集 ID,并返回对查询有效的数据库列表

步骤 3:查询从步骤 2 中准备好的每个数据库并获取具有结果的 json 数据数组

我对解决此问题的最佳方法感到困惑。使用一个 nsurlconnection 并根据我所在的步骤重新打开连接是否完成加载更好。还是在每个后​​续连接结束时打开一个新连接更好?

4

2 回答 2

1

几个观察

  1. 网络延迟:

    我们需要在这里敏感的关键现象(听起来像你)是网络延迟。我们经常在一个想法场景中测试我们的应用程序(在具有高速互联网访问的模拟器上,或在连接到 wifi 的设备上)。但是,当您在实际场景中使用应用程序时,网络延迟会严重影响性能,您需要构建一个将这种情况最小化的解决方案。

  2. 模拟次优的真实网络情况:

    顺便说一句,如果您还没有这样做,我建议您安装“硬件 IO 工具”中的“网络链接调节器”(可从“Xcode”菜单中选择“打开开发人员工具”) - “更多开发人员工具”)。如果您安装了“Network Link Conditioner”,您就可以让您的模拟器模拟各种网络体验(例如良好的 3G 连接、较差的边缘连接等)。

  3. 最小化网络请求:

    无论如何,我会尝试弄清楚如何最小化依赖于前一个请求的单独请求。例如,我看到第 1 步和第 2 步,想知道您是否可以将这两个合并到一个 JSON 请求中。也许这是不可能的,但希望你明白这一点。您希望减少必须按顺序发生的单独请求的数量。

    我还会查看第 3 步,它们看起来必须依赖于第 2 步,但也许您可以同时运行其中的几个第 3 步请求,从而减少那里的延迟效应。

  4. 执行:

    就如何实现而言,我个人使用了NSOperationQueue一些合理maxConcurrentOperationCount设置的并发(例如 4 或 5,足以享受并发并减少延迟,但不会对设备或服务器征税)并提交网络操作. 在这种情况下,您可能会提交步骤 1,完成操作将提交步骤 2,完成操作将提交一系列步骤 3 请求,这些步骤 3 请求可能并发运行。

    至于如何制作一个好的网络操作对象,我可能会建议使用类似AFNetworking的东西,它已经有一个像样的网络操作对象(包括解析 JSON 的对象),所以也许你可以从那里开始。

    在重用 a 方面NSURLConnection,通常每个请求一个连接。如果我有一个应用程序希望与服务器进行长时间的消息交换(例如,您希望服务器能够随时向客户端发送消息的聊天服务,例如在聊天服务中) ,我已经完成了套接字实现,但这似乎不是正确的架构。

于 2013-07-14T19:29:14.383 回答
1

我会关闭第一个连接并为每个连接创建一个新连接。

只是,不要问我为什么。

BTW, I would understand the question if this was about reusing vs. creating new objects in some performance sensitive context like scrolling through a table or animations or if it is just about of 10 thousands of iterations where it happens. But you are talking about 3 objects to either create new or reuse the old one. What is the gain of even thinking about it?

于 2013-07-14T19:30:23.593 回答