Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2009, 07:54
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

Вопросы по оптимизации
Здравствуйте.
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;

Последний раз редактировалось hp5741, 01.07.2009 в 13:24.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2009, 07:57
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

Сообщение от hp5741
elementGetById
нет такого метода.
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2009, 08:10
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

поправил getElementById
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2009, 09:43
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от 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-ы где надо добавить. Остальное нормально.

Последний раз редактировалось Riim, 18.06.2009 в 11:17.
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2009, 10:31
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

Щикарненько

Последний раз редактировалось hp5741, 18.06.2009 в 10:56.
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2009, 10:38
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от hp5741
Как мне лучше использовать document.getElementById();?
в начале скрипта создать переменную с глобальной областью видимости и потом использовать внутри функций?
Зависит от ситуации. Если у вас один и тот же DOM-элемент повсеместно используется, то имеет смысл единожды получить ссылку на него.
Сообщение от Riim
Распространенная ошибка.
А ошибка-то в чем?

Сообщение от hp5741
не понимаю как правильно это сделать
var g = i == 1 ? array1 : array2;
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2009, 10:42
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Kolyaj
А ошибка-то в чем?
Так я же описал там.

Сообщение от Kolyaj
var g = i == 1 ? array1 : array2;
Речь была о производительности, а не о объеме кода. Хотя может и это пригодится.
Ответить с цитированием
  #8 (permalink)  
Старый 18.06.2009, 10:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Riim
Так я же описал там.
Там что-то про this. А при чем здесь this?

Сообщение от Riim
Речь была о производительности, а не о объеме кода.
Какая нафиг производительность в одном if и двух присваиваниях?
Ответить с цитированием
  #9 (permalink)  
Старый 18.06.2009, 10:50
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Kolyaj
Там что-то про this. А при чем здесь this?
Для некоторых видимо не причем.

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

на конструкцию:
var g = i == 1 ? array1 : array2;
Ответить с цитированием
  #10 (permalink)  
Старый 18.06.2009, 10:56
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

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

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);
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
первый опыт jquery. Вопросы. Titto jQuery 0 17.09.2008 10:32