2016-10-06 13 views
3

私のアプリでJSON解析にSwiftyJSONを使用しています。私は最近Swift3に私のアプリをアップグレードし、重要なパフォーマンスの問題を観察しています。問題を小さなプロジェクトに分離しようとしました。私は別のライブラリに切り替えることを検討しているまたはネイティブ(しかし、これは私のアプリでは多くの仕事)が、コミュニティ内の誰かが同様の問題を観察しているかどうかを確認したいと思います。どんな援助も感謝し、前もって感謝します。Swifty JSON Swift3、XCode8、iOS10によるパフォーマンス低下

以下のコードは、Swift2で秒以下を取るために使用されるが、Swift3を使用して、リリース、実行可能で15秒かかる:

func parseSampleJson() { 
     let st = NSDate() 

     let file:NSString = Bundle.main.path(forResource: "testJson", ofType: "json")! as NSString 
     let jsonData:NSData = NSData.dataWithContentsOfMappedFile(file as String) as! NSData 
     let json = JSON(data: jsonData as Data) 

     let dataJson = json["data"] 
     for (_, subJson): (String, JSON) in dataJson { 
//   NSLog("Name = " + subJson["Name"].stringValue) 
      let castes = subJson["Castes"] 
      for (_, cn): (String, JSON) in castes { 
//    NSLog(" Name = " + cn["Name"].stringValue) 
      } 
     } 
     let et = NSDate() 
     let timeTaken = et.timeIntervalSince(st as Date) 
     NSLog("******* Time taken = \(timeTaken)") 
    } 

完全なプロジェクトがhttps://github.com/good2best123/SwiftyJSONTestでgithubの上にあるが。

+0

これはまだ問題のようです!まだ解決策はありますか? –

答えて

1

私は同じ動作を見ています。 SwiftyJSON 2.3.2/Swift 2.2とSwiftyJSON 3.1.1/Swift 3.0の間には、重要なパフォーマンスの低下があるようです。

最初に、インデックスを使用してJSONデータにアクセスしようとしました。

let dataJson = json["data"] 
let n = dataJson.count 

for djIndex in 0...n-1 { 
    let subJson = dataJson[djIndex] 
    let castes = subJson["Castes"] 
    let castesCount = castes.count 

//   NSLog("Name = " + subJson["Name"].stringValue) 

    for cnIndex in 0..castesCount-1{ 
    let cn = castes[cnIndex] 
    //    NSLog(" Name = " + cn["Name"].stringValue) 
    } 

} 

私のコードで行ったテストから、JSON配列の解析はCPUサイクルが使用されていることが明らかでした。

Swift 3/SwiftJSON 3.1.1コードのパフォーマンスを元のSwift 2.2/SwiftyJSON 2.3.2コードのものに戻してしまったのにもかかわらず、変数に複数のJSONプロパティをキャッシュするのは醜いです。

こちらがお役に立てば幸いです。

2

バージョン3.1.3にアップグレードできますか?問題は解決されましたthere

関連する問題