Собираюсь ли я улучшить производительность, используя `Symbol` в моем` action.type`? - PullRequest
0 голосов
/ 06 июля 2018

После того, как я прочитал этот вопрос , пока я работаю над Reactjs. У меня вопрос. Предположим, я хочу изменить constants.jsx с простой строки на Symbol().

Вопрос:
Получу ли я какую-либо выгоду от замены string на Symbol() при определении типа action?

Если я получу выигрыш в производительности. На сколько процентов это улучшится?


Вот пример примера

constants.jsx;

export const INCREMENT = 'increment';
export const DECREMENT = 'decrement';
export const ADD_COUNTER = 'add_counter';
export const REMOVE_COUNTER = 'remove_counter';

reducers.jsx

export const counterReducer = (state = 0, action) => {
    switch (action.type) {
        case INCREMENT:
            return state + 1;
        case DECREMENT:
            return state - 1;
        default:
            return state;
    }
};

1 Ответ

0 голосов
/ 06 июля 2018

Ожидается, что один символ стоит дороже, чем строка, потому что строки очень быстрые и эффективные в JS.

Обычно символ включает описание, потому что это полезно, и создание символа Symbol('increment') не может быть более эффективным, чем строка 'increment', поскольку символ включает в себя как символ, так и строку.

Там, как правило, не должно быть никакой разницы в производительности после их создания, но это зависит от двигателя. В любом случае, оба метода очень быстрые, и эта проблема считается преждевременной оптимизацией и должна быть исключена, если не доказано иное.

С другой стороны, практические соображения должны быть приоритетными. Символы могут быть полезны, потому что действия Flux / Redux могут пострадать от коллизий, а строковые значения предпочтительно должны быть уникальными; это можно решить с помощью пространств имен, таких как INCREMENT = 'foo increment'.

Символы нельзя эффективно использовать в качестве действий по причинам, описанным в этой проблеме Redux . Они не могут быть (де) сериализованы без специальной обработки - и даже тогда не будет никакой гарантии, потому что символы должны полагаться на описание для их уникальности, а описания все еще являются строками. Это может повлиять на любые сторонние инструменты или библиотеки, которые не поддерживают символы как действия, например, Расширение Redux DevTools .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...