сортировка функции

Ознакомиться с этим эталоном: http://jsben.ch/#/bWfk9

В моих предыдущих тестах, где скорость была главной проблемой, я нашел

JSON.parse(JSON.stringify(obj))

- самый быстрый способ глубокого клонирования объекта (он выдает jQuery.extend с установленным значением глубокого флага на 10-20%).

jQuery.extend довольно быстро, когда для флага глубокого значения установлено значение false (мелкий клон). Это хороший вариант, поскольку он включает некоторую дополнительную логику для проверки типов и не копирует неопределенные свойства и т. Д., Но это также немного замедлит вас.

Если вам известна структура объекты, которые вы пытаетесь клонировать или можете избежать глубоких вложенных массивов, вы можете написать простой цикл for (var i in obj), чтобы клонировать ваш объект при проверке hasOwnProperty, и он будет намного быстрее, чем jQuery.

Наконец, если вы пытаясь клонировать известную структуру объекта в горячем цикле, вы можете получить МНОГО БОЛЬШЕ БОЛЬШЕ ПРОИЗВОДИТЕЛЬНОСТИ, просто вставив процедуру клонирования и вручную создав объект.

Механизмы слежения за JavaScript присасываются при оптимизации циклов for..in и проверка hasOwnProperty также замедлит вас. Ручной клон, когда скорость является абсолютной необходимостью.

var clonedObject = {
  knownProp: obj.knownProp,
  ..
}

Остерегайтесь использования метода JSON.parse(JSON.stringify(obj)) на объектах Date - JSON.stringify(new Date()) возвращает строковое представление даты в формате ISO, которое JSON.parse() не обращается обратно к объекту Date. См. этот ответ для получения дополнительной информации .

Кроме того, обратите внимание, что в Chrome 65, по крайней мере, нативный клонирование не подходит. Согласно этот JSPerf , выполняющий собственное клонирование, создавая новую функцию, почти на 800 раз медленнее, чем использование JSON.stringify, которое невероятно быстро распространяется по всем направлениям.

0
задан Qirel 24 March 2019 в 20:02
поделиться