Это связано с реализацией структуры данных или микрооптимизацией?
Да.
Более длинный ответ: возможно, оба, но единственный способ ответить на него наверняка - детально рассмотреть реализацию каждого браузера.
Большие различия, которые вы измерили, в частности, выглядят так, как будто они могут быть связаны с принципиально различным выбором структур данных под капотом; однако даже при той же базовой структуре данных эффективность остальной части реализации может иметь огромное значение (я видел 10x - 100x).
Кроме того, ИМХО ваши результаты несколько подозрительны: Chrome и Node используют один и тот же движок V8 и должны иметь очень похожие характеристики. Результаты типа «indexOf» или «splice (remove 1)», где вы видите разницу примерно в 10 раз между тем, что должно быть примерно таким же результатом, указывают на то, что что-то может быть не так в ваших тестах. И если этим двум результатам нельзя доверять, то почему вы больше уверены в своих результатах Edge / Firefox?
Говоря о качестве эталона: использование только одного типа массива (только одного размера, только одного типа содержимого, всегда плотного) - еще одна причина, по которой ваши результаты, вероятно, не отражают полную историю; поэтому, пожалуйста, будьте осторожны, делая выводы из этого.
Почему такая большая разница в производительности
Потому что быстрые встроенные методы Array
- это тонна инженерных усилий. Инженерная команда каждого браузера делает все возможное, чтобы тратить время на функциональность, которая, по их мнению, имеет наибольшее значение. В результате вы увидите различные степени оптимизации в различных реализациях.
Если есть различия в выбранных структурах данных под капотом (я не знаю), то это, как правило, компромиссы: один выбор может быть быстрее в X, но медленнее в Y, чем другой выбор; или один может быть быстрее, но потреблять больше памяти; и т.д.