Почему жесткий кодировщик лучше работает при ограниченном мелком копировании?

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

Интересно, почему и если это практично, или есть еще лучшие способы.

Мой первый вопрос здесь, спасибо.

0 ответов

Другие вопросы по тегам