Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.08.2007, 01:34
Kopilkus вне форума Посмотреть профиль Отправить личное сообщение для Kopilkus Найти все сообщения от Kopilkus
  № 1  
Ответить с цитированием
Kopilkus
 
Аватар для Kopilkus

Регистрация: Sep 2005
Сообщений: 11
По умолчанию Длина имен

вот такой вопрос: отрожается ли как-нибудь длинна имен полей и методов на скорости выполнения программы. ведь, как я понял, даже после транслирования в байт код именна остаются неизменными для сохраниения возможности манипуляции клипом извне. есть ли разница, например я назову метод btnSetScrollPositionOnRelease() или f1()?

Старый 28.08.2007, 01:46
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 2  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
На такой вопрос легко получить ответ:
Код:
function btnSetScrollPositionOnRelease( i ){
 return i+1;
}
function f1( i ){
 return i+1;	
}

var t = getTimer();
var n = 100000;
while( n-- )f1( i );
trace(getTimer() - t);
	
	
 t = getTimer();
 n = 100000;
while( n-- )btnSetScrollPositionOnRelease ( i );
trace(getTimer() - t);
у меня выводит 793 и 803

Старый 28.08.2007, 02:44
Kopilkus вне форума Посмотреть профиль Отправить личное сообщение для Kopilkus Найти все сообщения от Kopilkus
  № 3  
Ответить с цитированием
Kopilkus
 
Аватар для Kopilkus

Регистрация: Sep 2005
Сообщений: 11
спасибо, как видно: разница не такая уж и большая. осмысленные имена рулят)

Старый 28.08.2007, 02:57
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Разницы вообще нет. Такой метод не точный, при следующем запуске может быть и 805/780, и 800/800 и тд.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.08.2007, 03:16
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Ну не знаю, я поставил проверку на интервал - короткая стабильно обгоняет. Для чистоты эксперимента поменял функции местами - длинная снова отстает.
Где-то я вроде читал про имена переменных длиннее 8 символов. Ощущение есть такое.

У меня получилось в среднем 4% разницы, пока чай пил.


Последний раз редактировалось Kikasso; 28.08.2007 в 03:34.
Старый 28.08.2007, 04:07
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
У меня длинная всегда "чуть" быстрее. Так, что "твоя" закономерность не подтвердилась
Я ж говорю, что метод не точный. С его помощью можно судить о порядке скорости, но ни как ни о 100% точности. И разница при таком числе итераций роли не играет.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.08.2007, 09:50
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Разницы вообще нет никакой. Хоть километровые пишите.
Вызов метода происходит по ссылке, а не по имени. Даже если и по имени, скорость поиска метода от длины строки никак не зависит.
Загляните в спеку по байткоду, е-мае, а не делайте совершенно сомнительные тесты. Вся несостоятельность теста проявляется, если использовать имена одинаковой длины.

Кстати, вот, что мне выдал трейс при двух запусках (для функций с разными длинами имен):

Цитата:
Сообщение от trace
823
804
795
817
В одном случае, второе быстрее, во втором — первое.


Последний раз редактировалось etc; 28.08.2007 в 10:08.
Старый 28.08.2007, 10:51
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 8  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Я нашел откуда "ощущение осталось" - это из другой оперы. http://php.spb.ru/php/speed.html#2

Старый 28.08.2007, 12:08
Kopilkus вне форума Посмотреть профиль Отправить личное сообщение для Kopilkus Найти все сообщения от Kopilkus
  № 9  
Ответить с цитированием
Kopilkus
 
Аватар для Kopilkus

Регистрация: Sep 2005
Сообщений: 11
может я конечно много всего не понимаю, но байткод же конечный этап трансляции, вот, например, там есть строка:

Код:
push 'a'
тоесть в этот момент плеер должен среди всех переменных найти переменную с именем "а". значит должен быть какой-то ящик, которому на вход должно приходить имя переменной, а на выход он должен давать ее значение. но так-как на вход ему приходит только текстовое имя, значит у него должен быть какой-то мегаалгоритм поиска нужной переменной по имени, так что пиоск среди переменных с более-менее похожими длинными именами должен быть дольше.

Старый 28.08.2007, 12:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Неправда. Длина строки никоим образом не влияет на скорость поиска.

Этот «ящик» называется стек. А в данном случае произошла ретрансляция пи-кода (чтобы читать было проще и не смотреть каждый раз в словарь). В реальности в push в байт-коде написан индекс элемента из словаря констант. Т.е., примерно так:

Код:
push c:0
Например, код:

Код:
a = 10;
b = a;
Пи-код, выдаваемый flasm-ом (чаще всего):

Код:
constants 'a', 'b'
	push 'a', 10
	setVariable
	push 'b', 'a'
	getVariable
	setVariable
	end
Смотрим байт-код:

Код:
88 06 00 02 00 61 00 62 00 96 07 00 08 00 07 0A
00 00 00 1D 96 04 00 08 01 08 00 1C 1D 00
Или так:
Код:
88 06 02 00 61 00 62 00 = constants 'a', 'b'
96 07 00 08 00 07 0A 00 00 00 = push c:0, 10
1D = setVariable
96 04 00 08 01 08 00 = push c:1, c:0
1C = getVariable
1D = setVariable
00 = end
Как видно, в push используются Dictionary Lookup, т.е. переданный индекс ссылается на элемент в словаре.
Я не знаю точного механизма работы getVariable и что происходит в памяти, но уверен, что длина имени никак не повлияет на скорость нахождения необходимой переременной в памяти, в текущем пространстве. Потому как происходит перебор всех объектов в данной области видимости и запрос имени. Если имя совпадает с переданным (а имя, скорее всего, является тем же Dictionary Lookup, т.е. простым индексом), то в стек помещается ссылка на объект в памяти. И поиск, как я уже говорил, скорее всего идет по индексу, а не по имени, как таковому. А при таком подходе длина имени никак не повлияет на скорость. Даже если и по имени, то скорость будет зависеть от количества объектов в памяти (в конкретной области видимости), а не длины имени.


Последний раз редактировалось etc; 28.08.2007 в 12:44.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.