Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Зацените (https://javascript.ru/forum/project/1542-zacenite.html)

Бухалыч 10.08.2008 17:37

По поводу глобальных/локальных переменных:
Разве функция работает не быстрей, если обращается к локальным переменным?

Kolyaj 10.08.2008 18:58

Dmitry A. Soshnikov, innerHTML тоже не используете?

Цитата:

Сообщение от Dmitry A. Soshnikov
А теперь вы скажите, чем вам он угодил

Я его использую там, где он уместен.

Dmitry A. Soshnikov 10.08.2008 19:49

Kolyaj, я что-то не пойму вашу позицию =)

Цитата:

Сообщение от Kolyaj
innerHTML тоже не используете?

использую; и хоть он не стандартизован W3C, innerHTML имеет меньше минусов (см. ссылки выше), чем document.write

Цитата:

Сообщение от Kolyaj
Я его использую там, где он уместен

объективно, я вижу только одно место - запись скрипта в документ, но это не касается обсуждаемого скрипта, поэтому ваша позиция весьма странная. Так что - давайте, - ради интереса - поменяемся местами - вы аргументированно доказывайте (естественно, с ссылками на официальные источники), а я послушаю про все "прелести" document.write (а также, все-таки, - что там за "натяжки", - ответ на которые вы игнорировали =).

ZoNT 10.08.2008 20:00

Цитата:

Сообщение от Бухалыч (Сообщение 4397)
По поводу глобальных/локальных переменных:
Разве функция работает не быстрей, если обращается к локальным переменным?

Быстрее, в некоторых случаях.

В данном же случае приходится в функции каждый раз создавать огромный массив. Соответсвенно создать используемые данные всегда лучше 1 раз...

Не стоит также забывать, что джаваскрипт - интерпретируемый язык... Так что чем больше строк - тем медленнее работает...

Dmitry A. Soshnikov 10.08.2008 20:06

ZoNT,

Цитата:

Сообщение от ZoNT
Быстрее, в некоторых случаях.

Во всех случаях.

P.S.: а вот к вопросу о памяти (если функция выступает в качестве конструктора) - лучше, ествественно, хранить однотипные сущности в одном месте (как правило - в прототипе конструктора).

ZoNT 10.08.2008 20:08

Цитата:

Сообщение от Dmitry A. Soshnikov (Сообщение 4405)
ZoNT,


Во всех случаях.

Код не видел - а уже утверждаешь...

Или ты хочешь, чтобы я тебе пример привёл с цифрами, а потом отнекиваться будешь???

Dmitry A. Soshnikov 10.08.2008 20:16

Цитата:

Сообщение от ZoNT
Код не видел - а уже утверждаешь...

почитай про scope-chain и как (в какой последовательности) производится поиск пропертей в нем (конкретный код тут не при чем)

Цитата:

Сообщение от ZoNT
Или ты хочешь, чтобы я тебе пример привёл с цифрами, а потом отнекиваться будешь???

ага, с удовольствием посмотрю, всегда интересно узнать что-то новое (только не "отнекиваться", а "принять правильную точку зрения, если она будет таковой" - но еще раз повторю - сначала стоит почитать 10.1.3 и 10.1.4)

ZoNT 10.08.2008 20:34

<html>
<body>
<script type="text/javascript">
// local var
function F1(){
	var a = [];
	for (var i=0;i<1000;i++) a.push(i);
	
	var str = [];
	for (var i=0;i<1000;i+=10) str.push(a[i]);
}

var start = new Date();
for (var i=0;i<1000;i++) F1();
var res1 = (new Date())-start;
//**********************************


// Global var
var arr = [];
for (var i=0;i<1000;i++) arr.push(i);

function F2(){
	var str = [];
	for (var i=0;i<1000;i+=10) str.push(arr[i]);
}

start = new Date();
for (var i=0;i<1000;i++) F2();
var res2 = (new Date())-start;
//**********************************


alert([res1,res2]);

</script>
</body>
</html>

Dmitry A. Soshnikov 10.08.2008 20:46

ZoNT, ты утверждаешь яро что-то, пытаясь аргументировать практически, - это смело, я ценю, но, дружище, давай так - если приводишь практические примеры, то, пожалуйста, без мухлежа =) Твой опыт (если все по-честному относительно локальных/глобальных переменных) должен быть таким:

<html>
<body>
<script type="text/javascript">
// local var
function F1(){
    var a = [];
    for (var i=0;i<1000;i++) a.push(i);

    var str = [];
    for (var i=0;i<1000;i+=10) str.push(a[i]);
}

var start = new Date();
for (var i=0;i<1000;i++) F1();
var res1 = (new Date())-start;
//**********************************


// Global var
var arr = [];
var str = [];

function F2(){
    for (var i=0;i<1000;i++) arr.push(i);
    for (var i=0;i<1000;i+=10) str.push(arr[i]);
}

var start = new Date();
for (var i=0;i<1000;i++) F2();
var res2 = (new Date())-start;
//**********************************


alert([res1,res2]);

</script>
</body>
</html>


И тогда результаты соответсвуют теории. А вообще, повторю снова, сначала теория - 10.1.4 Scope Chain and Identifier Resolution

Kolyaj 10.08.2008 21:09

Цитата:

Сообщение от Dmitry A. Soshnikov
использую; и хоть он не стандартизован W3C, innerHTML имеет меньше минусов (см. ссылки выше), чем document.write

По ссылкам выше innerHTML стоит в одном ряду с document.write, поэтому, если вы приводите их в пример, то вы бы не должны использовать ни то ни другое. И какие минусы есть у document.write, которых нет у innerHTML?

Цитата:

Сообщение от Dmitry A. Soshnikov
я вижу только одно место - запись скрипта в документ, но это не касается обсуждаемого скрипта, поэтому ваша позиция весьма странная.

Запись скрипта в документ как раз удобнее производить методами DOM. Мои слова к данному скрипту вообще не относятся, впрочем как и ваши
Цитата:

Сообщение от Dmitry A. Soshnikov
часто встречаются конструкции, которые на сегодняшний день лучше не использовать

Именно в отрицании этой категоричности и состоит моя позиция. Для каждой задачи оптимален свой инструмент. Данный скрипт я щас вообще не обсуждаю.
Самый яркий пример использования document.write -- вывод текста на страницу только при условии включенного JS.

Цитата:

Сообщение от Dmitry A. Soshnikov
а также, все-таки, - что там за "натяжки", - ответ на которые вы игнорировали

Прочитайте пост повнимательнее.


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