Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопросы по оптимизации (https://javascript.ru/forum/misc/4051-voprosy-po-optimizacii.html)

hp5741 18.06.2009 07:54

Вопросы по оптимизации
 
Здравствуйте.
1. Возник вопрос если я выполняю get_array(array); то передается сам массив или ссылка на него?
var array = [1,2,3];
function get_array(a) {
    alert(a[0]);
}
get_array(array);

ответ: По ссылке
2. Как мне лучше использовать document.getElementById();?
в начале скрипта создать переменную с глобальной областью видимости и потом использовать внутри функций?
dom_link = document.getElementById('mydiv');
function my_alert() {
     alert(dom_link.width);
}
function my_alert2() {
     alert(dom_link.height);
}

или в каждой функции создавать новый var с ссылкой или может есть какий то другой варианты?
ответ:
var dom_link = document.getElementById('mydiv');
function my_alert() {
     alert(dom_link.width);
}

3.Есть 2 массива и в функции нужно выбрать какой использовать, не понимаю как правильно это сделать с стороны производительности ?
array1 = [];
array2 = [];
array1.push(1,2,3);
array2.push(4,5,6);
function set_array() {
....
if(i == 1) {
    var g = array1;
}else{
    var g = array2;
}
alert(g[0]);
}

ответ:
var array1 = [1,2,3];
var array2 = [4,5,6];
function set_array() {
....
var g = i == 1 ? array1 : array2;
alert(g[0]);
}

Заранее благодарю тех кто поможет.

Большой Респект за:

var $d = document;
$d.byId = $d.getElementById;

var $ = function(elem/* id */) {
    return typeof elem == 'string' ? document.getElementById(elem) : elem;
};

var g = i == 1 ? array1 : array2;

Riim 18.06.2009 07:57

Цитата:

Сообщение от hp5741
то передается сам массив или ссылка на него?

ссылка.

Цитата:

Сообщение от hp5741
elementGetById

нет такого метода.

hp5741 18.06.2009 08:10

поправил getElementById

Riim 18.06.2009 09:43

Цитата:

Сообщение от hp5741
в начале скрипта создать переменную с глобальной областью видимости и потом использовать внутри функций?

Цитата:

Сообщение от hp5741
или в каждой функции создавать новый var с ссылкой

Распространенная ошибка. Запись "var dom_link = document.getElementById;", равносильна записи "window.dom_link = document.getElementById;"
Внутри метода, this, ссылается на область, из которой он (метод) вызывается. Теперь this будет ссылаться не на document, а на window. Если при этом, внутри метода, this как-либо используется, то метод может сработать не верно. Если нужно сократить запись, то лучше так:
var $d = document;
$d.byId = $d.getElementById;

Теперь вместо document.getElementById можно писать $d.byId .

Так же хороший вариант создать функцию:
var $ = function(elem/* id */) {
	return typeof elem == 'string' ? document.getElementById(elem) : elem;
};


Цитата:

Сообщение от hp5741
как правильно это сделать с стороны производительности

Со стороны производительности лучше вот это:
array1 = [];
array2 = [];
array1.push(1,2,3);
array2.push(4,5,6);


заменить на:
array1 = [1, 2, 3];
array2 = [4, 5, 6];

И var-ы где надо добавить. Остальное нормально.

hp5741 18.06.2009 10:31

Щикарненько

Kolyaj 18.06.2009 10:38

Цитата:

Сообщение от hp5741
передается сам массив или ссылка на него?

Бессмысленный вопрос. Может хотели спросить "копия массива или ссылка на него"?

Цитата:

Сообщение от hp5741
Как мне лучше использовать document.getElementById();?
в начале скрипта создать переменную с глобальной областью видимости и потом использовать внутри функций?

Зависит от ситуации. Если у вас один и тот же DOM-элемент повсеместно используется, то имеет смысл единожды получить ссылку на него.
Цитата:

Сообщение от Riim
Распространенная ошибка.

А ошибка-то в чем?

Цитата:

Сообщение от hp5741
не понимаю как правильно это сделать

var g = i == 1 ? array1 : array2;

Riim 18.06.2009 10:42

Цитата:

Сообщение от Kolyaj
А ошибка-то в чем?

Так я же описал там.

Цитата:

Сообщение от Kolyaj
var g = i == 1 ? array1 : array2;

Речь была о производительности, а не о объеме кода. Хотя может и это пригодится.

Kolyaj 18.06.2009 10:45

Цитата:

Сообщение от Riim
Так я же описал там.

Там что-то про this. А при чем здесь this?

Цитата:

Сообщение от Riim
Речь была о производительности, а не о объеме кода.

Какая нафиг производительность в одном if и двух присваиваниях?

Riim 18.06.2009 10:50

Цитата:

Сообщение от Kolyaj
Там что-то про this. А при чем здесь this?

Для некоторых видимо не причем.

Цитата:

Сообщение от Kolyaj
Какая нафиг производительность в одном if и двух присваиваниях?

Я не знаю. Это вы пытаетесь увеличить производительность (именно об этом ТС просил) заменой конструкции:
if(i == 1) {
    var g = array1;
}else{
    var g = array2;
}

на конструкцию:
var g = i == 1 ? array1 : array2;

hp5741 18.06.2009 10:56

Если я правильно понял то вместо этого

dom_link = document.getElementById('mydiv');
function my_alert() {
     alert(dom_link.width);
}

нужно писать
var dom_link = document.getElementById('mydiv');
function my_alert() {
     alert(window.dom_link.width);
}


Часовой пояс GMT +3, время: 03:25.