Я работаю над реагирующим настраиваемым рендерером, который мне нужно копировать реагирующим реквизитом в элемент бэкэнда, для которого есть зарезервированные свойства, такие как "ключ", "ref", "потомки", которые я должен отфильтровать, особенно"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
Интересно, почему иесли это практично, или есть еще лучшие способы.
Мой первый вопрос здесь, спасибо.