iOS에서 simdjson으로 JSON 분석
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
/// json
[self testWithSDJSONFileName:@"citm_catalog"];
[self testNSJSONFileName:@"citm_catalog"];
[self testWithSDJSONFileName:@"package-lock"];
[self testNSJSONFileName:@"package-lock"];
[self testWithSDJSONFileName:@"package"];
[self testNSJSONFileName:@"package"];
//twitterescaped
[self testWithSDJSONFileName:@"twitter"];
[self testNSJSONFileName:@"twitter"];
[self testWithSDJSONFileName:@"random"];
[self testNSJSONFileName:@"random"];
[self testWithSDJSONFileName:@"mesh.pretty"];
[self testNSJSONFileName:@"mesh.pretty"];
//small data
//twitter_timeline
[self testWithSDJSONFileName:@"twitter_timeline"];
[self testNSJSONFileName:@"twitter_timeline"];
[self testWithSDJSONFileName:@"repeat"];
[self testNSJSONFileName:@"repeat"];
[self testWithSDJSONFileName:@"truenull"];
[self testNSJSONFileName:@"truenull"];
[self testWithSDJSONFileName:@"flatadversarial"];
[self testNSJSONFileName:@"flatadversarial"];
[self testWithSDJSONFileName:@"demo"];
[self testNSJSONFileName:@"demo"];
}];
[op start];
});
}
//simdjson JSON
- (void) testWithSDJSONFileName:(NSString *)fileName {
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
id object = [MTJSONSerialization sd_JSONObjectWithData:data];
CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
NSLog(@"%@ simdjson Linked in %f ms", fileName ,linkTime *1000.0);
}
/// JSON
- (void) testNSJSONFileName:(NSString *)fileName {
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
id object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL];
CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
NSLog(@"%@ system Linked in %f ms", fileName ,linkTime *1000.0);
}
테스트 결과
2019-06-21 21:01:42.320578+0800 MTSimdjson[5427:64308] citm_catalog simdjson Linked in 32.685995 ms 2019-06-21 21:01:42.331235+0800 MTSimdjson[5427:64308] citm_catalog system Linked in 9.927034 ms
2019-06-21 21:01:42.332638+0800 MTSimdjson[5427:64308] package-lock simdjson Linked in 0.445008 ms 2019-06-21 21:01:42.333043+0800 MTSimdjson[5427:64308] package-lock system Linked in 0.244975 ms
2019-06-21 21:01:42.334273+0800 MTSimdjson[5427:64308] package simdjson Linked in 0.033975 ms 2019-06-21 21:01:42.334433+0800 MTSimdjson[5427:64308] package system Linked in 0.016928 ms
2019-06-21 21:01:42.349764+0800 MTSimdjson[5427:64308] twitter simdjson Linked in 12.775898 ms 2019-06-21 21:01:42.355304+0800 MTSimdjson[5427:64308] twitter system Linked in 5.193949 ms
2019-06-21 21:01:42.372887+0800 MTSimdjson[5427:64308] random simdjson Linked in 14.144063 ms 2019-06-21 21:01:42.379515+0800 MTSimdjson[5427:64308] random system Linked in 6.255984 ms
2019-06-21 21:01:42.400383+0800 MTSimdjson[5427:64308] mesh.pretty simdjson Linked in 15.720010 ms 2019-06-21 21:01:42.423751+0800 MTSimdjson[5427:64308] mesh.pretty system Linked in 22.629023 ms
2019-06-21 21:01:42.425485+0800 MTSimdjson[5427:64308] twitter_timeline simdjson Linked in 0.821948 ms 2019-06-21 21:01:42.426221+0800 MTSimdjson[5427:64308] twitter_timeline system Linked in 0.571012 ms
2019-06-21 21:01:42.427058+0800 MTSimdjson[5427:64308] repeat simdjson Linked in 0.325918 ms 2019-06-21 21:01:42.427323+0800 MTSimdjson[5427:64308] repeat system Linked in 0.105023 ms
2019-06-21 21:01:42.428360+0800 MTSimdjson[5427:64308] truenull simdjson Linked in 0.326991 ms 2019-06-21 21:01:42.428588+0800 MTSimdjson[5427:64308] truenull system Linked in 0.064015 ms
2019-06-21 21:01:42.429058+0800 MTSimdjson[5427:64308] flatadversarial simdjson Linked in 0.024080 ms 2019-06-21 21:01:42.429219+0800 MTSimdjson[5427:64308] flatadversarial system Linked in 0.014901 ms
2019-06-21 21:01:42.429624+0800 MTSimdjson[5427:64308] demo simdjson Linked in 0.027061 ms 2019-06-21 21:01:42.429761+0800 MTSimdjson[5427:64308] demo system Linked in 0.012040 ms
실험을 통해simdjson 순수 해석 json 데이터가 NSJSONserialization보다 빠르지만 해석된 json 데이터를 OC NSDictionary나 NSArray로 전환하는 효율이 NSJSONserialization보다 낮다는 것을 발견했다. 현재simdjson은arm64 구조를 지원하지 않기 때문에 iOS 리얼리티 장치에서 실행할 수 없고 x86-64에서만 테스트 데모 주소를 실행할 수 있다.https://github.com/BestiOSDev/MTSimdjson
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.