Почему переключатель жесткого кодирования работает лучше при ограниченном мелком копировании? - PullRequest
0 голосов
/ 24 октября 2018

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

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

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

...