JS Optimization / Performance: сравнение объектов с использованием JSON.stringify - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время я создаю небольшое приложение Vanilla JS (без каких-либо зависимостей, таких как lodash / jquery), и мне нужно было сравнить два объекта, чтобы проверить равенство ключей и значений.Мне было просто интересно, как оптимизировать эту проблему.

Ключи обоих объектов расположены в том же порядке, что и они получены из одного и того же метода.Согласно этому ответу , самый быстрый и эффективный способ сделать это - использовать JSON.stringify(object1) === JSON.stringify(object2).

Однако в моем приложении, если два объекта не равны, я перебираю два из них и выполняю некоторые операции.Проблема в том, что эти операции довольно тяжелые и иногда выполняются.Мне нужно оптимизировать мое решение.

Поэтому мне было интересно, если JSON.stringify также выполняет какой-то цикл for внутри.В моем приложении более вероятно, что два объекта будут неравными.Поэтому, если JSON.stringify также запускает какой-то цикл for, я мог бы просто снять проверку и сразу запустить нужные мне операции (, что приведет к разнице в программе, только если два объекта неравны ) экономит время и делает его более оптимизированным.Если я этого не сделаю, то я буду технически запускать два цикла for для одной и той же цели, когда два объекта неравны, и запускать один цикл for в любом случае, когда два объекта равны.Если JSON.stringify является внутренним циклом for, то я могу использовать только один цикл for, независимо от того, равны ли объекты.Имею ли я здесь смысл?Пожалуйста, дайте мне знать, если вы чего-то не понимаете.Является ли эта проверка бесполезной, и мне следует удалить ее, чтобы оптимизировать мой код?

1 Ответ

0 голосов
/ 31 декабря 2018

Ваш вопрос касается 4 различных областей:

  • Реализация (и, следовательно, производительность) JSON.stringify
  • Реализация (и, следовательно, производительность) итерации объекта
  • Качество и производительность JIT-компилятора
  • Скорость выделения памяти (JSON.stringify - это большой объем памяти для больших объектов)

Так что совершенно очевидно, чтотеперь является универсальным ответом для всех движков и операционных систем JS.

Я рекомендую вам проверить ваш код ... почему?

  • Хотя сейчас порядок атрибутов может бытьпостоянное, дальнейшее обслуживание вашей кодовой базы может изменить это и привести к трудно отслеживаемой ошибке.
  • Хорошей практикой является создание метода isEqual для всех типов объектов, которые вы используете
  • * удобнее для чтения.

Конечно, есть и недостатки:

  • Ваш код станет больше (это может быть связано с лучшей читаемостью)
  • ЧТО-нибудь еще явозможно, забыл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...