PDA

Просмотр полной версии : презентация об оптимизации кода


iflamberg
18.07.2009, 21:17
http://docs.google.com/present/view?id=d4jrvds_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 разы быстрее (у меня в релиз плеере).

iflamberg
20.07.2009, 16:46
Да, действительно. Про переменные в строку там какая-то фигня написана.

BlooDHounD
20.07.2009, 18:15
iflamberg, смените машинку :) pathfinder у нас ищет путь мгновенно. тормозит там совсем другое, но Вам конечно виднее.