Ожидается, что один символ стоит дороже, чем строка, потому что строки очень быстрые и эффективные в JS.
Обычно символ включает описание, потому что это полезно, и создание символа Symbol('increment')
не может быть более эффективным, чем строка 'increment'
, поскольку символ включает в себя как символ, так и строку.
Там, как правило, не должно быть никакой разницы в производительности после их создания, но это зависит от двигателя. В любом случае, оба метода очень быстрые, и эта проблема считается преждевременной оптимизацией и должна быть исключена, если не доказано иное.
С другой стороны, практические соображения должны быть приоритетными. Символы могут быть полезны, потому что действия Flux / Redux могут пострадать от коллизий, а строковые значения предпочтительно должны быть уникальными; это можно решить с помощью пространств имен, таких как INCREMENT = 'foo increment'
.
Символы нельзя эффективно использовать в качестве действий по причинам, описанным в этой проблеме Redux . Они не могут быть (де) сериализованы без специальной обработки - и даже тогда не будет никакой гарантии, потому что символы должны полагаться на описание для их уникальности, а описания все еще являются строками. Это может повлиять на любые сторонние инструменты или библиотеки, которые не поддерживают символы как действия, например, Расширение Redux DevTools .