Ios 在网络层优化重新创建报头的最佳方法
我的应用程序非常频繁地调用api,每次创建带有一些细节的标题部分时都会调用api 标题详细信息的类型Ios 在网络层优化重新创建报头的最佳方法,ios,swift,performance,optimization,Ios,Swift,Performance,Optimization,我的应用程序非常频繁地调用api,每次创建带有一些细节的标题部分时都会调用api 标题详细信息的类型 代币可能会在两者之间发生变化 未更改的值,如设备型号 随版本更改的值:版本名称和捆绑包编号 从用户默认值获取的值 我的代码如下所示: var header: [String: Any] = [:] header[Constant.Token] = getToken() // Can be changed during each call header[Constant.Model] = getM
var header: [String: Any] = [:]
header[Constant.Token] = getToken() // Can be changed during each call
header[Constant.Model] = getModel() // Device model remains same
header[Constant.Version] = getVersion() // Fetch version
header[Constant.Build] = getBuild() // Fetch build
..
..
..
..
..
..
....
// Attach header
使用一些散列值并查找差异,然后在需要时从头开始创建字典的正确方法是什么。有关应用程序版本、内部版本号等不变的信息。 您不必为每个api调用读取/创建这些头值 您可以将它们初始化为
defaultHTTPHeaders
一次,并用于所有api调用
let defaultHTTPHeaders: [String: Any] = {
return [
Constant.Model : getModel(),
Constant.Version : getVersion(),
Constant.Build : getBuild(),
]
}()
对于可以更改的信息,如Constant.Token
,您可以继续执行今天的操作。因此,更新后的实现可能看起来像-
var headers = self.defaultHTTPHeaders
headers[Constant.Token] = getToken()
通过这种方式,您仅对必要的标题(可以更改)重复此任务。对于不更改的信息,如应用版本、内部版本号等。 您不必为每个api调用读取/创建这些头值 您可以将它们初始化为
defaultHTTPHeaders
一次,并用于所有api调用
let defaultHTTPHeaders: [String: Any] = {
return [
Constant.Model : getModel(),
Constant.Version : getVersion(),
Constant.Build : getBuild(),
]
}()
对于可以更改的信息,如Constant.Token
,您可以继续执行今天的操作。因此,更新后的实现可能看起来像-
var headers = self.defaultHTTPHeaders
headers[Constant.Token] = getToken()
通过这种方式,您只需对必要的头(可能会更改)重复此任务。似乎您需要一种缓存机制,以便在值未更改时将相同的令牌取回,并在不存在时通过同时优化空间存储来不断添加新的令牌。您可以实现自己的数据结构,称为LRU缓存,它可以帮助您优化空间,并且仍然可以为您提供O(1)访问。你可以在谷歌上搜索一次,然后检查这是否是你真正需要的。似乎你需要一种缓存机制,在值没有改变的情况下收回相同的令牌,并通过同时优化空间存储来不断添加新的令牌。您可以实现自己的数据结构,称为LRU缓存,它可以帮助您优化空间,并且仍然可以为您提供O(1)访问。你可以在谷歌上搜索一下,看看这是否是你真正需要的。