Отказ от ответственности: Я инженер-программист на двигатель Чакра Javascript в Internet Explorer 9, а затем (Привет из здания 18!)
Короче говоря: «это зависит», - мы должны знать, как многие объекты, которые вы создаете, насколько они сложны (поскольку JavaScript не имеет классов, но прототипов и экземпляров), как часто вы их создаете, и если ваш скрипт/программа заставит GC собирать объекты (и GC бежит не очень).
Некоторые советы:
- Если вы храните много простых объектов данных, использовать массив, чтобы воспользоваться любой оптимизации времени выполнения будет иметь. И если вы используете массив, убедитесь, что все элементы имеют один и тот же базовый тип (например, не смешивайте объекты JavaScript с номерами в одном массиве).
- JavaScript-сборщик мусора, что означает, что он имеет все связанные с ним недостатки, включая приостановку выполнения всего сценария во время работы GC. Если многие объекты становятся доступными для сбора сразу, то пауза GC будет работать некоторое время. Следите за фрагментацией памяти.
- Избегайте свойства экземпляра (например, свойства использования прототипа или свойства конструктора), то есть:
Bad:
for(var i = 0; i < 1000; i++) {
var foo = { baz: function() { return 5; } };
foo.bar();
}
Хорошо:
function Foo() { } // `Foo` constructor.
Foo.prototype.baz = function() { return 5; };
for(var i=0; i < 1000; i++) {
var foo = new Foo();
foo.bar();
}
Также хорошо:
function Foo() { }
Foo.baz = function(foo) { return 5; };
for(var i=0; i < 1000; i++) {
var foo = new Foo();
Foo.bar(foo);
}
Что касается вашего примера кода, если вы находитесь в корневой области (global
, который в браузерах сглажен объектом window
), то ключевое слово var
вносит свой вклад в создание свойства. Так что это:
var Obj1 = somethig;
var obj200 = something;
window.Obj1 = Obj1; // there is no `window.global` object
window.Obj200 = Obj200;
... не делает ничего: var Obj1
является то же самое, как window.Obj1
.
И, наконец, протекция: дают только функции конструктора TitleCase
имена, иначе все остальное (vars, parameters, locals и т. Д.) lowerCase
имена. Вызов экземпляра Obj1
заставил меня подержать лицо.
Как всегда, золотое правило: преждевременная оптимизация есть корень всех зол - профильный код первого, чтобы увидеть, если есть проблема, прежде чем вносить существенные изменения в код (и IE 11 в F12 инструментах велики для проверки памяти и производительности обработки вашего кода, кстати, не то, чтобы я непредвзято!).
Сколько стоит «много»? –
«Слишком много» подразумевает больше, чем необходимо, что является проблемой самого и самого себя. –
Обратите внимание, что фрагмент кода, который вы показали, * не создает * любой объект. Он просто назначает переменные и свойства для обозначения уже существующих. – Bergi