bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
[Заметка] Как уменьшить время загрузки карты?
Весь следующий текст - это не статья, а просто заметка, для тех, кто этого еще не знал.
***Изучая внутренности инициализации карты, я понял, что варкрафт3 делает много лишних вещей.Он делает предзагрузку (объявление) функций, которые СКОРЕЕ ВСЕГО не будут использоваться в вашей карте. Например: функция InitBlizzard() и все ее внутренности (думаю их установка занимает 40% времени загрузки карты). Для людей, которые считают каждый лишний использованный байт или просто для тех, кто хочет значительно снизить длительность загрузки своей карты, я советую открыть war3map.j своей карты и просмотреть функции, которые вызываются в main() и config(). Ведь по сути, если человек программирует без использования BJ (а такие, думаю - почти все, кто свободно делает карты на Jass), то ему эта функция, да и все ее содержимое не нужно. ***Вот простенький пример: раньше, когда мне нужно было найти minx,maxx,miny,maxy своей картыдля безопасного передвижения дамми или просто юнитов, то я использовал следующий код для объявления: » Но потом, когда понял что убрав все ненужное, кроме самого необходимого из функции main(),Код:
моя карта загружается за полторы секунды, я вывел самую быстрый способ найти эти координаты (вывел из BJ). » Этот код делает примерно в пять раз меньше вызовов функций.Код:
Главное - понять, что у многих способов реализации задуманного есть способ еще проще и оптимальнее. ***...и еще напоследок, я скажу пару слов об одной функции...» Если вызвать эту функцию при инициализации, карта не будет записывать реплей, а это значительно снижает время загрузки. Может быть полезно, если вы тестируете какую-нибудь способность или просто алгоритм на карте, где сохранение реплея не понадобиться.Код:
***Надеюсь это простой рассказ кому-то помог и кто-нибудь узнал что-то новое. Успехов. :)Отредактировано bee, 18.09.2012 в 08:12. |
06.09.2012, 14:45 | #1
+13/−2
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Всего создается около 200 лишних глобальных объектов. Что не есть тру. Так же еще что бы быстрее проект загружался, лучше использовать вместо разрушаемых - декорации:) впрочем я думаю это и так все знали. |
06.09.2012, 14:50 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Она не просто снижает время загрузки, а снижает потребление жесткого диска для захвата виртуальных пакетов во время игры, которые потом служат реплеем.
ScorpioT1000 добавил: Может собрать все-все факты об оптимизации перфоманса карты, потестировать их на производительность в промышленном масштабе и написать норм статью с каждым пунктом ? |
06.09.2012, 14:53 | #3
+6/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
Могу заняться. Хотя я даже не знаю с чего начать.
|
06.09.2012, 14:55 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
ScorpioT1000, поддерживаю, очень актуальная тема. |
06.09.2012, 14:57 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
bee, полазь тогда форум и сайтостатьи на тему оптимизации и вываливай сюда в кучу, будем разбирать, фиксить (фиксить там много надо), а тестить - недолго) и кстати можно много нового открыть |
06.09.2012, 15:01 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
а ты имеешь в виду все? то есть там всякие оптимизации звуков, иконок, музыки, всяких integer'ов? можно заняться. будет интересно
bee добавил: http://xgm.guru/p/wc3/import-optimization - я в этом не шарю, к сожалению http://xgm.guru/p/wc3/triggers-and-jass-optimization - это кстати хоть и полезно, но баян, надо переписать с новыми советами/фичами я даже и не знаю что можно добавить, разве что mpq? нужно рассказать что карту можно редактировать без we. http://xgm.guru/p/wc3/inside_w3m_files |
06.09.2012, 15:13 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Намного больше ускоряет загрузку перенос объектов из *.w3* в таблицы, делает программой Widgetizer в пару кликов. |
06.09.2012, 15:15 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
просто дело в том, что не все об этом знают, есть маза расписать в одной статье, как по-максимуму можно оптимизировать всю карту.
|
06.09.2012, 15:16 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
|
06.09.2012, 15:23 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
bee, мб не отсановишся только на оптимизации jass кода а затронут тему в целом, с моделями, объектами и тд, тогда статья действительно будет полезной. |
06.09.2012, 15:30 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
внесу свою лепту... юзайте vJass функции
//! inject config //! endinject //! inject main //! endinject также советую юзать прелоад триггеров динамичный, а не сразу при инициализации я делаю примерно так. onUnitSold GetSoldUnit() -> Init_SoldUnitTypeFunc в общем то так. По возможности подгружаю данные также паралельно размещая их на карте магазины, нейтралы и их данные. юзаю RecycleTimer/Group/Unit функции, без их прелоада как такового (создаю лишь по одному объекту во время загрузки карты) позволило сократить время загрузки карты с 25 секунд до 1.5 секунды, лагов не имеется. |
06.09.2012, 15:52 | #12
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
|
06.09.2012, 15:54 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
YellowStar, я и винайзером до 3 сек загрузку сделал, и только юнитов создавал в игре, а всё остальное было как есть... но в сильно нагруженных картах походу не прокатит... |
06.09.2012, 15:55 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
что касается прелоада триггеров... ну, допустим, спеллы мы будем грузить динамично: представь, на тебя напал враг, он начинает применять способность, ты начинаешь убегать и ВНЕЗАПНО ЛАГ, после которого ты видишь "вы умерли! сплясать на могиле?" |
06.09.2012, 15:56 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
Цитата:
У меня 16 героев все спеллы у них полностью написаны тригерно. Widgetizer - сокращает время загрузки на много, Vexorian Optimizer еще больше, но все это грузится в течении 6 секунд на моём ноуте, что в принципе долго, для маленькой карты тестера, поэтому после еще махинаций, на старом ноуте 1.5 секунды, это стоящий результат в 4 раза. Ну в итоге на мощных машинах, как я понял загрузку не видно почти совсем (ну тут в целом из-за отсутствия ландшафта как такового, если будет ландшафт на мощных машинах даю 1.5 сек загрузки, на слабых до 4-6) YellowStar добавил: Цитата:
не совсем так, они подгружаются как только ты приобрёл героя |
||
06.09.2012, 15:59 | #16
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
YellowStar:
Ненавижу инвокера (из доты) как кто пикнет, залаг, секунд на 5... Ну конешно у кого длинный вступительный ролик в карте это +, так как пока все смотрят ролик, или чёрный экран, то происходит подгрузка всего необходимого.... |
06.09.2012, 16:02 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Я бы предложил подождать пока все пикнут и потом создать для всех =) |
06.09.2012, 16:08 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
такая предзагрузка делается не только для инвока, просто у него спелов оч много
у некоторых она просто не заметна или ее нет, ибо нет прелода |
06.09.2012, 16:13 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
Подгрузку инвока можно распределить, подгружая спеллы ему паралельно, то есть в течении 10 секунд. Все равно их не натыкать...
|
06.09.2012, 16:18 | #20
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|