Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在网络层优化重新创建报头的最佳方法_Ios_Swift_Performance_Optimization - Fatal编程技术网

Ios 在网络层优化重新创建报头的最佳方法

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

我的应用程序非常频繁地调用api,每次创建带有一些细节的标题部分时都会调用api

标题详细信息的类型

  • 代币可能会在两者之间发生变化
  • 未更改的值,如设备型号
  • 随版本更改的值:版本名称和捆绑包编号
  • 从用户默认值获取的值
  • 我的代码如下所示:

    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)访问。你可以在谷歌上搜索一下,看看这是否是你真正需要的。