我有一个很大的开关案例,每个案例都做了一些工作,将制作特定数据库对象所需的东西拉到一起,然后realm.create对象。确保持久性的最简单方法是将整个开关/盒子放入realm.write中。这会减慢每个案例中运行的代码的速度吗?
realm.write(() => {
let x, y;
switch (condition) {
case 'x':
x = //some work to generate the x object
realm.create('X', x);
break;
case 'y':
y = // some work to generate the y object
realm.create('Y', y);
break;
}
});
另一种方法是简单地使用一个变量来保持箭头函数,无论使用什么情况创建,并在最后用该箭头函数调用realm.write。很高兴这样做,但对是否有任何好处感到好奇。
let x, y, writeFunc;
switch (condition) {
case 'x':
x = //some work to generate the x object
writeFunc = () => realm.create('X', x);
break;
case 'y':
y = // some work to generate the y object
writeFunc = () => realm.create('Y', y);
break;
}
realm.write(writeFunc);
答案 0 :(得分:2)
您的两个代码示例都将执行大致相同的操作。在你的写块中执行其他代码是没问题的,所以我会选择最干净/最简单的选项。
在考虑性能时,您唯一需要担心的是拥有太多交易。理想情况下,您应该最小化您拥有的事务数量,并在单个写入事务中批量处理多个操作(创建,变异,删除),而不是为每个操作设置事务。当同时编写多个对象时,事情可以显着加快,如果您执行许多操作,那么对它们进行批处理会对性能产生实际影响。