Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> указатели на переменные, есть что нибудь вроде этого в яваскрипте 
:(
    Опции темы
sergejzr
Дата 29.9.2004, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Хочу изменить переменную MyVar.
Необходимо сделать это так:

Код
var MyVar;
MyChange(MyVar);


После этого MyVar должна принять изменённое значение.
Как это ещё можно сделать не прибегая к обьектам?




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Gregof
Дата 29.9.2004, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.6.2004

Репутация: 1
Всего: 12



Нет без объектов этого сделать нельзя.
А зачем так? Чем плох подобный вариант:
Код
var MyVar;
MyVar=MyChange(MyVar);

--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф)
PM MAIL ICQ   Вверх
sergejzr
Дата 29.9.2004, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Надо бы несколько локалных переменных в функции пересадить. Около 30. и делать это несколько раз в разных местах функции...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 29.9.2004, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Примитивы всегда передаются по значению, обьекты по ссылке.
Почему нельзя использовать обьекты? Смахивает на изврат... wink.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 29.9.2004, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Да, просто не хотел в цикле использовать вызовы аттрибутов обьекта.

ведь Object.value это тоже самое, что Object[value]. А там опять хеши итд. тормоза короче smile.gif
Вот я иинициализирую локальную и с ней работаю. А если таких локальных 30?
каждый раз надо инитиализировать... вот и хотел сделать в функции.
Вроде как не совсем изврат smile.gif

Я уже решил проблему совсем другим подходом smile.gif Просто интересно узнать


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 29.9.2004, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Ну тогда приоткрою занавесу тайны smile.gif
Код
test="blabla"; //глобальная переменная
window.test2="blabla2";
//а теперь фокус
alert(window.test);
alert(test2);

Видим что все локальные переменные являются свойствами обьекта window.
А хеш таблицы ну очень быстры для поиска, потому то их и юзают wink.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 29.9.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(Sardar @ 29.9.2004, 21:40)
А хеш таблицы ну очень быстры для поиска

Это да, но зачем мне искать то, что у меня уже есть?
Ну и потом, если юзать обьекты - 2 раза перессылаемся

Код
window[Object][value]


Но дело не в том, что это правильно/неправильно. Просто быстрее. Даже в Си если мы опустим указатели, прога ускоряется. А в яваскрипте это намного ярче выражено.

Во время обработки события мыши например мне без разницы это время. Ведь если оно произойдёт, значит юзер сам этого захотел. Но если там цикл автоматом обрабатывается, то каждый такой ненужный переход стоит ресурсов. С мира по нитке, а в итоге ускорение происходит...

А то, что переменные по умолчанию глобальные, стоило мне сегодня целого дня smile.gif Никак не мог врубится, почему после обработки подсветки асма, а потом дельфи, алгоритм раскрашивает нечто средним асм/дельфи.

Оказалось, что пара переменных не была задекларирована с var и пересаживалась при переставке языка smile.gif


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Aliance
Дата 29.9.2004, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(sergej @ 29.9.2004, 21:25)
там опять хеши итд. тормоза короче

Мдя...использование хэш-таблиц наоборот УВЕЛИЧИВАЕТ скорость...
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 29.9.2004, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(sergej @ 29.9.2004, 21:54)
А в яваскрипте это намного ярче выражено.

И какими наблюдениями ты пришел к этому выводу? wink.gif
Код
<script language="Javascript" type="text/javascript">
<!--
bla={};
d=new Date();
for(var i=0; i<10000; i++) {
window.bla["test"+i]=i;
}
alert((new Date()).getTime() - d.getTime());

d=new Date();
for(var i=0; i<10000; i++) {
window["test"+i]=i;
}
alert((new Date()).getTime() - d.getTime());
//-->
</script>

Поменяй оба участка кода местами и увидишь, что всегда тормозит последний - ему меньше памяти достается smile.gif
Уменьши количество создаваемых переменных и ты увидишь, что оба цикла выполняются с одинаковым количеством времени. Другое дело что у тебя никогда не будет более 1000 переменых в одном скрипте wink.gif

Вывод: подобная оптимизация - ловля блох smile.gif
Надо оптимизировать алгоритм. Например иногда народ создает массив элементов, а потом ищет по нему последовательным поиском. Быстрее будет хештаблица(обьект).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 29.9.2004, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата
Мдя...использование хэш-таблиц наоборот УВЕЛИЧИВАЕТ скорость...

Значит ты удтверждаешь, что код

Код
for(o to 10000)
{
m=3;
}

Медленней, чем
Код
for(o to 10000)
{
Object[m]=3;
}

Потому что хэш увеличивает скорость?
qstn.gif

Может я изначально неправильно вопрос поставил? Или мы друг друга не поняли smile.gif
Добавлено @ 23:23
Цитата(Sardar @ 29.9.2004, 22:13)
Вывод: подобная оптимизация - ловля блох


Я и не говорю, что это нам много даст, но почему бы не оптимировать?

Я просто иногда не могу уснуть зная, что ещё микросекунду мона выжать smile.gif И почему то в моём воображении не процессор перемещает не электро-заряды, а тяжёлые камни. И я буквально чувствую каждое лишнее движение smile.gif.



Добавлено @ 23:24
Цитата(Sardar @ 29.9.2004, 22:13)
И какими наблюдениями ты пришел к этому выводу?

я мысленно перевожу в Си, И примерно представляю, что кроется за каждым вызовом хэш функции smile.gif


Это сообщение отредактировал(а) sergej.z - 29.9.2004, 23:16


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 29.9.2004, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(sergej @ 29.9.2004, 22:15)
Значит ты удтверждаешь, что код...

Утверждений не было wink.gif
Во всех скриптовых языках с динамическими типами ипользуют хеш таблицы для хранения переменных. Т.е. test="bla" и test.bla="bla" это все лежит в хештаблицах. Xеш таблица очень быстра когда не заполненна, а переменных у тебя не больше пары десятков, так что даже простенькую хешь таблицу ты не загрузишь.

Впрочем это дело вкуса... smile.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 29.9.2004, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(Sardar @ 29.9.2004, 22:29)
Утверждений не было

нет, я Aliance имел в виду smile.gif





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
<Spawn>
Дата 30.9.2004, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
Значит ты удтверждаешь, что код

Код 
for(o to 10000)
{
m=3;
}


Медленней, чем

Код 
for(o to 10000)
{
Object[m]=3;
}


Имеется ввиду, что хеш-таблицы работают быстрее чем:

Код
for (var i = 0; i < 10000; i++)
 if (i == 100)
 {
   m = i;
   break;
 }

Так как не требуется последовательного перебора данных.

Цитата
я мысленно перевожу в Си, И примерно представляю, что кроется за каждым вызовом хэш функции

Вот этого делать я бы не советовал: итерпретируемый и компилируемый код это несколько разные вещи.

Это сообщение отредактировал(а) <Spawn> - 30.9.2004, 11:52


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
sergejzr
Дата 30.9.2004, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата
Вот этого делать я бы не советовал: итерпретируемый и компилируемый код это несколько разные вещи.


Естественно разные, но когда я програмлю на Си, я тоже стараюсь операции на асме представить. Так как всё в конечном к тому сводится. И не надо говорить, что это неправильно smile.gif .

Если скорость очень важна, то это единственный метод (при наличии оптимального алгоритма конечно).


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 30.9.2004, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(Aliance @ 30.9.2004, 13:34)
Утверждений не было

В таком случае, что ты имел в виду этим предложением касательно моего вопроса? biggrin.gif
Цитата(Aliance @ 29.9.2004, 22:00)
Мдя...использование хэш-таблиц наоборот УВЕЛИЧИВАЕТ скорость...


Ладно, Sardar ответил на мой вопрос smile.gif, спасибо!

Тему мона закрывать smile.gif



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.