1. Нужно, как минимум, уменьшить трафик между сервером и клиентом. в текущей версии для чата, событий и т.д., каждый раз передается весь список последних сообщений. подозреваю, что на стороне сервера оформлено в виде:
mysql_query("SELECT * FROM `chat` ORDER BY `date` DESC LIMIT 15");
для всех этих мест, нужно запоминать id последнего посланного пользователю сообщения (в сессии этого пользователя), ну и запрос будет соответственно:
mysql_query("SELECT * FROM `chat` WHERE `message_id`>".$_SESSION['last_message_id']." ORDER BY `message_id` ASC LIMIT 5"); ... $_SESSION['last_message_id']=$new_messages[count($new_nessages)-1]['message_id'];
в клиенте же, обновление чата делать не как сейчас - перезаписью содержимого всего окна чата, а добавлением новых пришедших сообщений. кстати. тут можно было бы и без LIMIT 5, но, на всякий случай лучше добавить, может в будущем потребуется вывод старых сообщений - чтобы портянка пересылаемых за один раз сообщений не вышла большой, берем только а за несколько запросов эти сообщения по порциям получить.
но это само по себе не поможет снизить нагрузку на проц (не намного уменьшит), но зато уменьшит трафик сервера в несколько раз.
прой же сервера, в основном, загружен непомерно высоким количеством sql запросов, поэтому, избавимся от большинства насовсем!
2. Избавляемся от ненужных sql запросов.
есть такая штука. memcache называется. хранит значения по ключу в оперативной памяти. используя его можно не делать лишних запросов в базу. например, для пример с чатом из п.1. у нас есть запрос, который выбирает сообщения с ID больше такого то. на нужно во время добавления сообщения в чат:
1) записать его в mysql базу
2) это же сообщение записать в мемкеш, например по ключу "chat_message_$ID"
3) записать его ID по ключу LAST_MESSAGE_ID=$ID.
тогда при обращении к chat.php из сессии пользователя берется последний посланный ему ID сообщения. сравнивается с LAST_MESSAGE_ID и если этот LAST_MESSAGE_ID не равен тому, что записан у пользователя в сессии. взять (из мемкеша) сообщения, по ключам от "chat_message_".($_SESSION['last_message_id']+1) ... до LAST_MESSAGE_ID, их послать пользователю как массив новых (возможно выкинув из них сообщения, которые пользователь не имеет права видеть), и записать в сессию пользователя значение из LAST_MESSAGE_ID.
в общем такой механизм. В результате на чат вообще не будет почти никакой нагрузки и обновление его можно сделать несколько раз в секунду.
может немного непонятно, но стоит почитать про memcache в php. ну и, если интересно, то могу от своего проекта чат откострировать и тебе выслать готовый рабочий код, как демку. на основе его напишешь для своего проекта. причем для начала переделать чат, после подобовлять данный механизм и во все остальные скрипты: sobitiya.php, mir.php, personalMir.php и newRound.php