2

我正在开发一个反应自定义渲染器,我必须将反应道具浅复制到后端元素,其中有一些保留属性,如“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

我想知道为什么以及这是否可行,或者是否有更好的方法。

我的第一个问题,谢谢。

4

0 回答 0