我的应用程序的 webView 加载了一个页面,我注入了一些 javascript 来自动为我点击并将一个项目添加到我的愿望清单中。对于这样的事情,您会建议使用数据会话还是临时会话来加载页面?速度对我来说很重要,我在 Objective-C 中尽可能地优化(是的,甚至毫秒)。
该页面基本上加载了一个产品页面,因此除了实际产品之外的所有内容总是相同的(背景视图、网站菜单栏、按钮图像等)。现在我正在使用 NSURLConnection,我正在尝试更新我的代码以使用 NSURLSession。
我的应用程序的 webView 加载了一个页面,我注入了一些 javascript 来自动为我点击并将一个项目添加到我的愿望清单中。对于这样的事情,您会建议使用数据会话还是临时会话来加载页面?速度对我来说很重要,我在 Objective-C 中尽可能地优化(是的,甚至毫秒)。
该页面基本上加载了一个产品页面,因此除了实际产品之外的所有内容总是相同的(背景视图、网站菜单栏、按钮图像等)。现在我正在使用 NSURLConnection,我正在尝试更新我的代码以使用 NSURLSession。
默认会话的行为类似于其他用于下载 URL 的 Foundation 方法。他们使用持久的基于磁盘的缓存并将凭据存储在用户的钥匙串中。
使用全局或共享 cookie、缓存和凭证存储对象的配置。行为类似于 NSURLConnection。
共享会话使用全局单例凭据、缓存和 cookie 存储对象。这可以用来代替使用 +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 的现有代码
临时会话不将任何数据存储到磁盘;所有缓存、凭证存储等都保存在 RAM 中并与会话相关联。因此,当您的应用程序使会话无效时,它们会被自动清除。
后台会话类似于默认会话,不同之处在于一个单独的进程处理所有数据传输。后台会话有一些额外的限制,在“<a href="https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid /TP40013509-SW44" rel="noreferrer">后台传输注意事项。”</p>
后台会话类似于默认会话,但它可以用于代表暂停的应用程序执行网络操作,在一定的限制。
与默认会话类似,但即使应用程序处于挂起状态,也可以执行数据的上传或下载。
来自Apple Doc的参考资料
//Default session
+ (NSURLSessionConfiguration *)defaultSessionConfiguration;
//Ephemeral
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;
//Background
+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier;
NSURLSession 任务和委托
下图解释了 NSURLSession 任务的类型及其层次结构。
我认为您会使用默认会话,因为您希望它将数据缓存到磁盘。临时会话没有的东西
瓶颈几乎总是 IO,因此您希望在数据不改变时进行缓存。对于快速链接数据,这不值得,但您明确表示数据不会改变