我正在开发一个反应自定义渲染器,我必须将反应道具浅复制到后端元素,其中有一些保留属性,如“key”、“ref”、“children”,我应该过滤掉,尤其是“children”与元素的“children”属性冲突,Object.assign 不能这样做。我不需要复制未知属性,只需要复制一个重要的受限集。
我发现了一些奇怪的东西,与 Object.assign 相比,在迭代中硬编码 switch 语句可以在大多数现代浏览器上获得更好的性能,我发现与手写代码相比,使用生成的代码构建“函数”可以获得更好的性能(我不确定,它的性能与我重构代码中的手写代码相同)。
for (var key of Object.keys(source)) {
switch (key) {
case 'a': target.a = source.a; break;
case 'b': target.b = source.b; break;
// ....
}
}
我创建了几个测试用例:
https://jsperf.com/copy-known-properties-few
https://jsperf.com/copy-known-properties-many/4
https://jsperf.com/copy-known-properties-polymorphic
第二个包括一个额外的构造函数案例。
这里也是一个重构版本测试,更容易阅读:
https://stackblitz.com/edit/limited-assign-perf
我想知道为什么以及这是否可行,或者是否有更好的方法。
我的第一个问题,谢谢。