标题是在官方网站上的介绍。但我有个问题。有人能解释“小”和“大”吗?在编程中,如果我有一个包含20个对象的模型。我应该将模型保存在20个单独的键值对中,还是只保存在一个对中?哪一个更有效率?
发布于 2016-12-12 12:10:42
我刚刚深入研究了RCTAsyncLocalStorage的源代码,特别是这个块:
- (NSDictionary *)_writeEntry:(NSArray<NSString *> *)entry changedManifest:(BOOL *)changedManifest
{
if (entry.count != 2) {
return RCTMakeAndLogError(@"Entries must be arrays of the form [key: string, value: string], got: ", entry, nil);
}
NSString *key = entry[0];
NSDictionary *errorOut = RCTErrorForKey(key);
if (errorOut) {
return errorOut;
}
NSString *value = entry[1];
NSString *filePath = [self _filePathForKey:key];
NSError *error;
if (value.length <= RCTInlineValueThreshold) {
if (_manifest[key] == (id)kCFNull) {
// If the value already existed but wasn't inlined, remove the old file.
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
[RCTGetCache() removeObjectForKey:key];
}
*changedManifest = YES;
_manifest[key] = value;
return nil;
}
[value writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];其中RCTInlineValueThreshold在(来源)之前定义为以下几行:
static const NSUInteger RCTInlineValueThreshold = 1024;
因此,小于或等于1024的值(您的对象将被序列化为字符串)将存储在序列化字典中,更大的对象存储在单独的文件中。
至于将对象扩展到n个键值对,它可能会影响性能,因为您必须对存储执行n个查询(涉及从JS到本机的通信,反之亦然,这是一个昂贵的操作),但它也可能取决于数据被查询的频率以及查询的方式(例如,如果一个对象经常被查询,而其他对象不被查询,那么为了避免长字符串的序列化和反序列化,拆分它们可能是有意义的)。
https://stackoverflow.com/questions/41096819
复制相似问题