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