Я думаю, вы задаете не тот вопрос.
Прежде всего, если вы собираетесь проводить микрооптимизацию производительности (в противоположность, скажем, алгоритмической оптимизации), вы должны действительно знать, является ли рассматриваемый код узким местом в вашей системе. Устраняйте наихудшие узкие места, пока ваша производительность не будет в порядке, а затем перестаньте беспокоиться об этом. Я был бы очень удивлен, если бы разница между ними когда-либо превышала ошибку округления в серьезном приложении. Но я был удивлен раньше; отсюда и необходимость проверить .
Затем, когда дело доходит до фактической оптимизации, обе реализации лишь незначительно отличаются по скорости в любой конфигурации. Но если вы хотите проверить глубокий доступ к вашему объекту, похоже, что второй - правильный способ думать об этом. Не похоже, что это должно иметь большое значение в относительных скоростях, но первый помещает код инициализации, где он будет «выполняться перед каждым блоком и является частью теста». Второй помещает его туда, где «он будет запускаться перед каждым тестом и не является частью теста». Поскольку вы хотите сравнить доступ к данным, а не инициализацию данных, это представляется более подходящим.
Учитывая это, кажется, что у техники families && families.Trump && families.Trump.members && ...
есть небольшое преимущество в производительности. (Примечание: здесь не видно if
с или else
с!)
Но стоит ли это того? Я бы сказал нет. Код намного, намного ужаснее. Я бы не стал добавлять библиотеку, такую как lodash (или мою любимую Ramda ), просто чтобы использовать такую простую функцию, как эта, но если бы я уже использовал lodash, я бы не колебался использовать здесь более простой код , И я мог бы импортировать один из lodash или Ramda, или просто написать свой собственный в противном случае, так как это довольно простой код.
Этот нативный код будет быстрее, чем более общий библиотечный код, не должно быть сюрпризом. Это не всегда происходит, так как иногда библиотеки используют ярлыки, которые не может использовать нативный движок, но, скорее всего, это норма. Причина использования этих библиотек редко связана с производительностью, но с написанием более выразительного кода. Здесь выигрывает версия lodash, с рук в руки.