Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   презентация об оптимизации кода (http://www.flasher.ru/forum/showthread.php?t=127624)

iflamberg 18.07.2009 21:17

презентация об оптимизации кода
 
http://docs.google.com/present/view?...rvds_0hjb794hr

многое я знал. Некоторые вещи смущают.

Например, где рассказывается про оптимизацию list.push(i); Простой эксперимент показал небольшую разницу, 1352 vs 1384. Правда на большом массиве. А, вот второй эксперимент на пачке небольших массивов показал другой результат 1267 vs 2610. Ну тоже, никак не "about 3 times faster".
Странно так же, что длинное название переменной влияет на скорость, я думал, что компилятор их не сохраняет. По крайней мере после декомпиляции имена локальных переменных внутри функции не сохраняются.
Про list[int(i)] - не совсем верно. Если i:int - то будет не прирост, а падение скорости.

Вообще не понял про "Array splicing" - стр. 60. Что автор имел ввиду? list[i]=null ничего не стирает, length не изменяется.

Про "Nulling vs deleting"(стр. 65), что-то тоже я сомневаюсь. После "dict[key]=null" - key остается, и по его адресу находится null, т.е. память не освобождается. Т.е. delete dict[key] и dict[key]=null немного разный смысл несет. И можно в памяти оставить туеву кучу null'ей.

wvxvw 19.07.2009 19:56

По поводу объявлений в одной строке вместо для каждого объявления - новая строка - вообще бред, это один и тот же код, абсолютно никакой разницы...

Psycho Tiger 19.07.2009 20:04

Цитата:

Вообще не понял про "Array splicing" - стр. 60. Что автор имел ввиду? list[i]=null ничего не стирает, length не изменяется.
Сначала занулить, потом сделать slice. Странно, что работает быстрее, кстати.
Цитата:

И можно в памяти оставить туеву кучу null'ей.
Нет. delete тоже зануливает его и прячет от тебя - его потом съест GC.

terbooter 20.07.2009 14:38

Полезная презентация.
А где бы полный текст доклада взять?

iNils 20.07.2009 15:31

Презентация о том, как не надо оформлять код.

iflamberg 20.07.2009 15:45

Это зависит от того, чем ты занимаешься. Если ты программируешь веб-сайты или какие-то простые вещи, где тормоза флеша не важны, то это не нужно, конечно. А вот для программирования игр на флеше(или даже, о боже, трехмерной галереи) - очень важно.

Да и где читаемость кода ухудшается? Если я пишу list[list.length]=item; - это тяжелее читать, чем list.push? Да ни разу. a*=.5 хуже читается, чем a/=5? Смысл переменной selectedIcon теряется, если ее переименовать selIco?
Везде нужно сохранять здравый смысл. А то, развелось тут товарищей, которые плодят лишние классы, просто для того, чтобы упростить читаемость кода и разнести его по разным файлам.

BlooDHounD 20.07.2009 16:15

соглашусь с iNils'ом. если это дейсвительно даёт прирост скорости, то этим должен заниматься компилятор, а не я.

iflamberg 20.07.2009 16:22

Угум. А потом в таймзеро pathfinder секунды три ищет путь на моем eeePC.

iNils 20.07.2009 16:37

Цитата:

list[list.length]=item; - это тяжелее читать, чем list.push?
Тяжелее. Более того, никакого прироста это не дает. Как и * vs. /
Только что проверил.
А про описание переменных в одну строчку... я даже хотел закрыть вкладку.

2morrowMan 20.07.2009 16:40

Между list.push(item) и list[list.length] = item в производительности почти разницы нет.

Если брать list.push(item) и list[length] = item, где length — отдельный счетчик, то второй вариант в 2 разы быстрее (у меня в релиз плеере).


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

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