Xnova фиксы

рекомендую всем у кого стоят сборки просмотреть логи мускул-запросов, там можно много чего интеерсного найти...
мне лично очень понравилось при просмотре галактики 275 запросов из которых по 4-8 штук на каждую из полей галактики одинаковые :)
для просмотра запросов делаем следующее:

Внимание! алгоритм просмотра запросов примерно следующий:
очищаем лог файл, если он уже был создан
нажимаем один раз на - Галактика
после идём в директорию с лог файлом и просматриваем его
PS: прежде прошу запастить валедолом или принять на грудь для храбрости)))
PSS: оптимизировал себе свёвшы обзор галактики до 33 запроса +1 запрос на заселённую планет
 
MSW, все что Вы описали под хайдом, без проблем реализуется средствами mysql - он умеет логировать запросы сам. Можно логировать и только "тяжелые" запросы, либо административные (типа OPTIMIZE TABLE, ради выполнения которого выкладывался тот огромадный и безумный фикс).
Но вот открывать бедный файл "275" раз за одно выполнение скрипта и писать в него... Ну уж хотя бы надо было единожды открыть, а потом лишь писать в него.

Число запросов - не показатель. можно свести потребности страницы галактики к одному запросу даже для солнечной системы с 15 планетами (ну + запросы по игроку в common.php, его планета, учетка, которые общие для всех страниц), объединив запросе три таблицы. Но вот насколько это будет быстрее - вопрос. К тому же, если включено кеширование запросов, то "4-8 штук на каждую из полей галактики одинаковые" практически никак не сказывается на производительности.
Я проводил "умеренный" рефакторинг, до запросов типа (сейчас накидаю)
Код:
SELECT * FROM game_galaxy g
LEFT JOIN game_planets p ON g.id_planet=p.id
LEFT JOIN game_users u ON p.id_owner=u.id
LEFT JOIN game_lunas l ON g.id_luna=l.id
WHERE g.galaxy=1 and g.system=1
//ORDER BY g.planet ASC
не доходило :) Хотя данный запрос возвращает абсолютно все данные (информация о планете, о игроке, о луне) в кортеже, необходимые на странице галактики, в независимости от числа планет.
По сути, сейчас посмотрел как он быстр на средней БД и нагруженном сервере - 0,0215секунды (900 записей в users, 3800 в planets). Ну и плюс, он даже слишком много лишнего тянет - можно еще и уменьшить расходы.
 
на попробуй мой файлик может получится, у меня все прекрасно отнимает
Посмотреть вложение 23540

Спасибо,но я уже разобрался в чём проблема.

А это небольшая заметочка для тех кто будет редактировать файлы add_ и del_ (там вроде всё по одному и томуже принципу строится).Покажу на примере кораблей (del_ship.php).

 
MSW, все что Вы описали под хайдом, без проблем реализуется средствами mysql - он умеет логировать запросы сам. Можно логировать и только "тяжелые" запросы, либо административные (типа OPTIMIZE TABLE, ради выполнения которого выкладывался тот огромадный и безумный фикс).
а разве я говорил что только это единственный способ отследить запросы?
просто мне такой способ легче и проще так как независимо от того сколько людей в данный момент в игре и обновляют страничку в лог запишутся запросы только от меня.
Но вот открывать бедный файл "275" раз за одно выполнение скрипта и писать в него... Ну уж хотя бы надо было единожды открыть, а потом лишь писать в него.
на выложенный код яж не наложил авторские права, а это значит что каждый в праве изменять его как ему хочется, ещё раз повторю - мне так было сделать проще и быстрее.
Число запросов - не показатель. можно свести потребности страницы галактики к одному запросу даже для солнечной системы с 15 планетами (ну + запросы по игроку в common.php, его планета, учетка, которые общие для всех страниц), объединив запросе три таблицы. Но вот насколько это будет быстрее - вопрос. К тому же, если включено кеширование запросов, то "4-8 штук на каждую из полей галактики одинаковые" практически никак не сказывается на производительности.
насколько я знаю именно по причине нагрузки на сервер, которая создаётся этим множеством запросов, на разных хостингах и закрывают эти игры, так как создают большую нагрузку

Вот пример того что было, на сборке RageOnline Repack v0.9, (13 планет заселённых) (166 запросов)
Код:
SELECT * FROM game_config
SELECT * FROM `game_users` WHERE `username` = 'MSW';
UPDATE `game_users` SET `onlinetime` = '1243022100', `user_lastip` = '212.92.246.66', `user_agent` = 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10' WHERE `id` = '1' LIMIT 1;
SELECT `lastupdate` FROM game_update LIMIT 1;
SELECT * FROM game_iraks WHERE `zeit` <= '1243022100'
SELECT * FROM game_planets WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `id_planet` = '1';
SELECT * FROM game_planets WHERE `id` = '1';
SELECT * FROM game_lunas WHERE `id` = '0';
SELECT * FROM game_galaxy WHERE `id_planet` = '1';
SELECT * FROM game_fleets WHERE `fleet_owner` = '1';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '1';
SELECT * FROM game_planets WHERE `id` = '1';
SELECT * FROM game_users WHERE `id` = '1';
SELECT * FROM game_planets WHERE `id` = '1';
SELECT * FROM game_users WHERE `id` = '1';
SELECT * FROM `game_users` WHERE `id` = '1';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '2';
SELECT * FROM `game_users` WHERE `id` = '';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '3';
SELECT * FROM `game_users` WHERE `id` = '';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '4';
SELECT * FROM game_planets WHERE `id` = '1264';
SELECT * FROM game_users WHERE `id` = '8';
SELECT * FROM game_planets WHERE `id` = '1264';
SELECT * FROM game_users WHERE `id` = '8';
SELECT * FROM `game_users` WHERE `id` = '8';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '8'
SELECT * FROM `game_alliance` WHERE `id` = '13'
SELECT COUNT(DISTINCT(id)) FROM `game_users` WHERE `ally_id` = '13'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '5';
SELECT * FROM game_planets WHERE `id` = '8';
SELECT * FROM game_users WHERE `id` = '8';
SELECT * FROM game_planets WHERE `id` = '8';
SELECT * FROM game_users WHERE `id` = '8';
SELECT * FROM `game_users` WHERE `id` = '8';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '8'
SELECT * FROM `game_alliance` WHERE `id` = '13'
SELECT COUNT(DISTINCT(id)) FROM `game_users` WHERE `ally_id` = '13'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '6';
SELECT * FROM game_planets WHERE `id` = '4';
SELECT * FROM game_users WHERE `id` = '4';
SELECT * FROM game_planets WHERE `id` = '4';
SELECT * FROM game_users WHERE `id` = '4';
SELECT * FROM `game_users` WHERE `id` = '4';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '4'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '7';
SELECT * FROM game_planets WHERE `id` = '5';
SELECT * FROM game_users WHERE `id` = '5';
SELECT * FROM game_planets WHERE `id` = '5';
SELECT * FROM game_users WHERE `id` = '5';
SELECT * FROM `game_users` WHERE `id` = '5';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '5'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '8';
SELECT * FROM game_planets WHERE `id` = '3';
SELECT * FROM game_users WHERE `id` = '3';
SELECT * FROM game_planets WHERE `id` = '3';
SELECT * FROM game_users WHERE `id` = '3';
SELECT * FROM `game_users` WHERE `id` = '3';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '3'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '9';
SELECT * FROM game_planets WHERE `id` = '9';
SELECT * FROM game_users WHERE `id` = '9';
SELECT * FROM game_planets WHERE `id` = '9';
SELECT * FROM game_users WHERE `id` = '9';
SELECT * FROM `game_users` WHERE `id` = '9';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '9'
SELECT * FROM `game_alliance` WHERE `id` = '2'
SELECT COUNT(DISTINCT(id)) FROM `game_users` WHERE `ally_id` = '2'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '10';
SELECT * FROM game_planets WHERE `id` = '2';
SELECT * FROM game_users WHERE `id` = '2';
SELECT * FROM game_planets WHERE `id` = '2';
SELECT * FROM game_users WHERE `id` = '2';
SELECT * FROM `game_users` WHERE `id` = '2';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '2'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '11';
SELECT * FROM game_planets WHERE `id` = '6';
SELECT * FROM game_users WHERE `id` = '6';
SELECT * FROM game_planets WHERE `id` = '6';
SELECT * FROM game_users WHERE `id` = '6';
SELECT * FROM `game_users` WHERE `id` = '6';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '6'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '12';
SELECT * FROM game_planets WHERE `id` = '7';
SELECT * FROM game_users WHERE `id` = '7';
SELECT * FROM game_planets WHERE `id` = '7';
SELECT * FROM game_users WHERE `id` = '7';
SELECT * FROM `game_users` WHERE `id` = '7';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '7'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '13';
SELECT * FROM game_planets WHERE `id` = '1016';
SELECT * FROM game_users WHERE `id` = '4';
SELECT * FROM game_planets WHERE `id` = '1016';
SELECT * FROM game_users WHERE `id` = '4';
SELECT * FROM `game_users` WHERE `id` = '4';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '4'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '14';
SELECT * FROM game_planets WHERE `id` = '1392';
SELECT * FROM game_users WHERE `id` = '18';
SELECT * FROM game_planets WHERE `id` = '1392';
SELECT * FROM game_users WHERE `id` = '18';
SELECT * FROM `game_users` WHERE `id` = '18';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '18'
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND `planet` = '15';
SELECT * FROM game_planets WHERE `id` = '333';
SELECT * FROM game_users WHERE `id` = '108';
SELECT * FROM game_planets WHERE `id` = '333';
SELECT * FROM game_users WHERE `id` = '108';
SELECT * FROM `game_users` WHERE `id` = '108';
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotection'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectiontime'
SELECT * FROM `game_config` WHERE `config_name` = 'noobprotectionmulti'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '1'
SELECT * FROM `game_statpoints` WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '108'
SELECT * FROM `game_alliance` WHERE `id` = '49'
SELECT COUNT(DISTINCT(id)) FROM `game_users` WHERE `ally_id` = '49'
а вот пример уже основательно переделанного: (14 планет заселено) (52 запроса)
Код:
SELECT * FROM game_config
SELECT * FROM game_users WHERE `id` = 1
UPDATE game_users SET `onlinetime` = UNIX_TIMESTAMP(), `user_lastip` = '212.92.245.65', `user_agent` = 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10' WHERE `id` = 1 LIMIT 1;
SELECT lastupdate FROM game_update LIMIT 1;
LOCK TABLE game_update WRITE
UPDATE game_update SET lastupdate = 1243156165
UNLOCK TABLES
SELECT * FROM game_fleets WHERE `fleet_start_time` <= '1243156165';
SELECT * FROM game_fleets WHERE `fleet_end_time` <= '1243156165';
SELECT * FROM game_iraks WHERE zeit <= '1243156165'
SELECT * FROM game_planets WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `id_planet` = '1';
SELECT * FROM game_lunas WHERE `id` = '0';
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '1' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '1' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '2' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '2' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '3' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '3' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '4' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '4' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '5' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '5' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '6' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '2';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '6' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '7' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '7' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '8' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '8' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '9' AND planet_type =  '1';
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '10' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '10' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '11' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '11' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '12' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '1';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '12' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '13' AND planet_type =  '1';
SELECT ally_id, ally_name, username, authlevel, onlinetime, id,bana  FROM game_users WHERE `id` = '3';
SELECT * FROM game_galaxy WHERE `galaxy` = '1' AND `system` = '1' AND planet = '13' Limit 1;
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '14' AND planet_type =  '1';
SELECT * FROM game_planets WHERE `galaxy` = '1' AND `system` = '1' AND planet = '15' AND planet_type =  '1';
думаю что явное преимущество второго варианта, он гораздо лучше обработается сервером
PS: Dem2n вместо того чтоб разводить дискусии как что и куда - выложите свой работающий вариант отслеживания запросов, а другие уже каждый для себя выберет что ему больше подойдёт
PSS: Ясное дело что для полной оптимизации нужно смотреть не только количество запросов но и "тяжесть" каждого из них.
 
MSW, я просто высказался по поводу велосипеда. Не стоит расценивать как критику. Просто вспомнился случай, когда человек на php написал логер обращений к скрипту. И вот когда ткнули носом на аксесс логи апача, где все это уже пишется за него... да ладно. Так и тут, mysqld позволяет логировать все запросы, либо только выборочные. Мало того, на некоторых хостингах это включено по умолчанию. Как включить - есть в гугле :) Зачем писать то, что уже есть.
Решил еще немножко переделать страницу Галактики, а потом протестил 3 скрипта:
1. galaxy.php - мой текущий, довольно-таки давно были убраны лишние запросы, немного подправлена логика.
2. galaxy2.php - неизменный скрипт со своими функциями из /includes/functions/ с RageOnline (а они такие же на 95% как и в других сборках)
3. galaxy3.php - скрипт 1. после сегодняшней переделки. Основная цель - снизить число запросов. Сделать код красивым и максимально быстрым цель не ставилась.
*. Все работает в одном окружении, 15 планет на странице.
Результаты (время генерации страницы в с), 10 измерений:
Код:
|galaxy1.php | 0.247 0.279 0.263 0.251 0.254 0.257 0.249 0.269 0.255 0.247 |
|galaxy2.php | 0.413 0.471 0.432 0.742 0.540 0.599 0.393 0.479 0.831 0.462 |
|galaxy3.php | 0.034 0.031 0.030 0.029 0.035 0.030 0.029 0.034 0.031 0.030 |
Как видно, прирост по сравнению с RageOnline чуть бы не в 15 раз.
Сама страница с галактикой теперь создает лишь 2 запроса независимо от числа планет и лун :) И то, от одного запроса (взятие очков самого игрока) можно отказаться и унести в глубь движка (в один запрос со взятием строки из users).
MSW написал(а):
а вот пример уже основательно переделанного: (14 планет заселено) (52 запроса)
здесь лишь 39 запросов имеют непосредственное отношение к странице Галактики. Так что в вашем случае это будет 52-39+2=15 запросов.
---
Ну и выкладываю переделанную галактику...
1. Скрипт поглащает собою все функции начинающиеся на GalaxyRow* в /includes/functions/.Также GalaxyLegendPopup, ShowGalaxyTitles, ShowGalaxySelector, ShowGalaxyRows, ShowGalaxyFooter, которые теперь просто в html-шаблоне.
Их можно убрать.
2. Скрипт сам инклудит свой ShowGalaxyMISelector.php
Скрипт не прошел полную проверку - так, поверхностно. Так что на свой страх и риск :) Кто не знает php и xnova, лучше не стоит пытаться - скорее всего, потребуется еще напильник.
 

Вложения

  • galaxy_refactoring.zip
    7,8 KB · Просмотры: 42
1)
Вот исправление бага, чтобы при отмене постройки 2 ЗС при нанятом разрушителе возвращались ресы только за 1 ЗС. Вообщем не дарим ресурсы.
файлик /includes/functions/FleetBuildingPage.php
PHP:
ищем примерно в 51 строке
	if(isset($_GET[action])){
		switch($_GET[action]){
			case "cancelqueue":
					$ElementQueue = explode(';', $CurrentPlanet['b_hangar_id']);
					foreach($ElementQueue as $ElementLine => $Element) {
						if ($Element != '') {
							$Element = explode(',', $Element);	
							$ResourcesToUpd[metal] += floor($pricelist[$Element[0]][metal] * $Element[1]);
							$ResourcesToUpd[crystal] += floor($pricelist[$Element[0]][crystal] * $Element[1]);
							$ResourcesToUpd[deuterium] += floor($pricelist[$Element[0]][deuterium] * $Element[1]);
						}
					}
после чего добовляем
PHP:
//Не дарим ресы за вторую ЗС
					if ($Element = 214 && $CurrentUser['rpg_destructeur'] = 1) {
							$ResourcesToUpd1[metal] = $ResourcesToUpd[metal] / 2;
							$ResourcesToUpd1[crystal] = $ResourcesToUpd[crystal] / 2;
							$ResourcesToUpd1[deuterium] = $ResourcesToUpd[deuterium] / 2;
							} else {
							$ResourcesToUpd1[metal] = $ResourcesToUpd[metal];
							$ResourcesToUpd1[crystal] = $ResourcesToUpd[crystal];
							$ResourcesToUpd1[deuterium] = $ResourcesToUpd[deuterium];
							};
и меняем
PHP:
$SetRes = "UPDATE `{{table}}` SET ";
					$SetRes .= "`metal` = metal + '" . $ResourcesToUpd[metal] . "', ";
					$SetRes .= "`crystal` = crystal + '" . $ResourcesToUpd[crystal] . "', ";
					$SetRes .= "`deuterium` = deuterium + '" . $ResourcesToUpd[deuterium] . "', ";
					$SetRes .= "`b_hangar` = '0', ";
					$SetRes .= "`b_hangar_id` = ''";
					$SetRes .= " WHERE `id` = '" . $CurrentPlanet['id'] . "'";
					doquery($SetRes, 'planets');
на
PHP:
$SetRes = "UPDATE `{{table}}` SET ";
					$SetRes .= "`metal` = metal + '" . $ResourcesToUpd1[metal] . "', ";
					$SetRes .= "`crystal` = crystal + '" . $ResourcesToUpd1[crystal] . "', ";
					$SetRes .= "`deuterium` = deuterium + '" . $ResourcesToUpd1[deuterium] . "', ";
					$SetRes .= "`b_hangar` = '0', ";
					$SetRes .= "`b_hangar_id` = ''";
					$SetRes .= " WHERE `id` = '" . $CurrentPlanet['id'] . "'";
					doquery($SetRes, 'planets');
2)
А если и шпионов не сбивает и отчётов что сбили когда отправляеш на шпионаж не приходит что делать? где чего нехватает подскажите пжл.
3)
[quote name='sergeev' post='43983' date='20.4.2009, 12:06']скачал, САБ работает, но есть 2 проблемы
1. После атаки не удаляются союзы
2. Флот летит не равномерно, т.е. один может лететь полтора часа, а второй час. Бой происходит во время прилета того кто создал союз.[/quote]
есть такое дело, но в целом саб уже работает. по поводу удаления союзов я пробовал поступить так
includes/functions/MissionCaseACS.php
Код:
<?php
		/**
		 * This file is under the GPL liscence, which must be included with the file under distrobution (license.txt)
		 * This file was made by Anthony (MadnessRed) [http://madnessred.co.cc/]
		 * This file return acs fleets as missioncaseattack will ont return attack fleets.
		 * Do not edit this comment block
		 */
		function MissionCaseACS ( $FleetRow) {
				global $phpEx, $pricelist, $lang, $resource, $CombatCaps, $game_config;
				includelang('tech');
				includelang('system');
 --->				$flot = doquery ('SELECT flotten FROM {{table}} WHERE teilnehmer ='.$FleetRow['fleet_owner'],'acs');
				if ($FleetRow['fleet_mess'] == 0 && $FleetRow['fleet_start_time'] > time()) {
						//Well... acs in dealt with in misioncaseattack.php, so all we need to do is make the fleet return
						$QryUpdateFleet  = "UPDATE {{table}} SET `fleet_mess` = '1' WHERE `fleet_id` = '". $FleetRow['fleet_id'] ."' LIMIT 1;";
						doquery( $QryUpdateFleet, 'fleets');
				} elseif ($FleetRow['fleet_end_time'] <= time()) {
						RestoreFleetToPlanet($FleetRow);
						doquery ('DELETE FROM {{table}} WHERE `fleet_id`='.$FleetRow['fleet_id'],'fleets');
 --->				  if ($flot == $FleetRow['fleet_id'])
 --->					  {														
 --->			doquery ('DELETE FROM {{table}} WHERE `flotten`='.$Flot,'acs');
 --->			 } else {
 --->		}
				}
		}
		// MadnessRed 2008
?>
добавил строки отмеченые " --->".. но в таком случае скуль жалуеться SQL Error', 'Table \'game_acs\' was not locked with LOCK TABLES DELETE FROM game_acs WHERE `flotten`=4824
кто, может подсказать что сделать? =)


пы.сы. вроде решил вопрос по другому, но от лишней идеи не откажусь =)



4)
сборка 0.9 (224)
в папке includes есть файл aks.php, я понимаю что это для саба, но проблема в том что во всей сборке я не нашёл запросов на этот файл или привязок которые его могут вызывать. обшарил уже вдоль и поперёк, подскажите где он должен быть прописан пжл. повторюсь общарил сборку как только возможно, от вас прошу подсказать что и как должно давать запрос на этот файл.

5)

Обращение к знающим, есть 2 таблицы например в скуле, 1 и 2 условно, в 1 таблице есть столбец в который заносятся числа через запятую, вот как написать правильно код чтобы читало информацию из определённой строки 1й таблицы и столбца где числа через запятую, по этим числам искал информацию в таблице 2, в определённом столбце считывал значение, вычислял какое из них наибольшее и это наибольшее присваивал всем необходимым строкам во 2й таблице :) вообщем вот такая схема.
 
Еще один багик: межпланетные ракеты корректно атакуют все планетарные системы ниже но не атакуют планеты выше(если я в 3 системе то атаки на 2 систему проходят, а на 4 отправляются но атаки не происходит:(confused:
Куда рыть?
 
Обнаружен баг игрок каким то образом прокачивается через исследования ((
 
Обнаружен баг игрок каким то образом прокачивается через исследования ((
это не баг, это недоработка офицеров - шпион и камандим
которые физически добавляют исследования

нужно делать чтоб они виртуально добавляли значения. которые будут использоваться только когда это необходимо
 
так они не на 2-3 левела прокачиваются а по крупному ... вот так с нуля
Шпионаж 50 Компьютерная технология 50
Оружейная технология 30 Броня космических кораблей 50
Энергетическая технология 64 Ракетный двигатель 50
Импульсный двигатель 50 Гиперпространственный двигатель 12
Лазерная технология 50 Экспедиционная технология 50
Гравитационная технология 15
 
Назад
Сверху