У меня есть исходный код для обнаружения человеческого лица и возвращает не только глубину, но и координаты реального мира с левой камерой (или правой камерой, я не мог вспомнить), являющейся источником. Он адаптирован из исходного кода «Learning OpenCV» и относится к некоторым веб-сайтам, чтобы заставить его работать. Результат, как правило, довольно точный.
Я не знаю ни о каком способе сделать это, однако свести повторения к минимуму, Вы могли попытаться проверить на существование __count__
и если это не существует (т.е. не Firefox) тогда, Вы могли бы выполнить итерации по объекту и определить его для более позднего использования, например:
if (myobj.__count__ === undefined) {
myobj.__count__ = ...
}
Этот способ, которым любой браузер, поддерживающий __count__
, использовал бы это и повторения, будет только выполнен для тех, которые не делают. Если количество изменяется, и Вы не можете сделать этого, Вы могли бы всегда делать его функцией:
if (myobj.__count__ === undefined) {
myobj.__count__ = function() { return ... }
myobj.__count__.toString = function() { return this(); }
}
Этот путь каждый раз, когда Вы ссылаетесь на myobj. __count__
функция будет стрелять и повторно вычислять.
Если бы Вы на самом деле сталкиваетесь с проблемой производительности, я предложил бы обернуть вызовы, которые добавляют/удаляют свойства, to/from объект с функцией, которая также увеличивает/постепенно уменьшает соответственно именованный (размер?) свойство.
только необходимо вычислить начальное количество свойств однажды и идти дальше оттуда. Если нет фактической проблемы производительности, не беспокоиться. Просто обертка, что бит кода в функции getNumberOfProperties(object)
и быть сделанным с ним.
Я не думаю, что это возможно (по крайней мере, не используя некоторые внутренности). И я не думаю, что Вы получили бы много путем оптимизации этого.
Вот некоторые тесты производительности для трех методов;
https://jsperf.com/get-the-number-of-keys-in-an-object
20,735
Очень простой и совместимый. Выполнения быстро , но дорогой, потому что это создает новый массив ключей, которые это затем выброшено.
return Object.keys(objectToRead).length;
15,734 операции в секунду
let size=0;
for(let k in objectToRead) {
size++
}
return size;
Немного медленнее, но нигде около использования памяти, так вероятно, лучше, если Вы интересуетесь оптимизацией для мобильных или других маленьких машин
953,839,338 операции в секунду
return mapToRead.size;
В основном, Карта отслеживает свой собственный размер, таким образом, мы просто возвращаем числовое поле. Далеко, намного быстрее, чем какой-либо другой метод. Если Вы имеете контроль над объектом, преобразовываете их в карты вместо этого.