![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
derek |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.7.2006 Репутация: нет Всего: нет |
допустим нам надо много (50 раз подряд) просклонять что-нибудь при помощи яндекс-склонятора.
воспользуемся таким кодом
работает медленно. как должен выглядть код, оптимизированный под вот такие многократные запросы? зы. я надеюсь понятно что задача задана абстрактно, в реале одно и то же слово 50 раз склонять не надо |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
опыта разработки высоконагруженных систем не имею, к соображению прошу относиться со здоровым скептицизмом.
итак, идея. проблема в том, что работа с сетью в PHP в данном случае синхронна - пока не придет ответ на первый запрос, второй запрос отправлен не будет. потому необходимо добиться ассинхронности. вариант 0. делаем отдельный сервис, умеющий работать ассинхронно. им передаем пачку запросов, сервис формирует передачу запроса/получение ответа и возвращает ответ тоже кучно. достоинство: время реакции измеряется длиной максималього по продолжительности запроса, потому как запросы идут в несколько потоков. недостаток: PHP скрипт должен дождаться обработки всего пакета. даже если вместо 50*1=50 секунд надо ждать 2 секунды, то все равно - скрипт висит, занимает ресурсы. вариант 1. отделяем формирование запроса(к сайту или сервису-посреднику) от обработки ответа: один скрипт формирует пакетный запрос из 50 запросов и завершает свою работу, сервис отправляет пакет, получает ответ и запускает 50 экемпляров скрпта-обработчика, передавая каждому скрипту "свой" результат запроса. вот такие идеи. |
|||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: 20 Всего: 20 |
Оптимизировать можно только используя многопоточность. Средствами php это реализовать не возможно. Есть вариант используя curl_multi (и не только) ускорить скачивание, но обработка все равно будет идти одним потоком.
-------------------- ![]() |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Для ускорения в некоторых случаях можно еще использовать какую нибудь систему кеширования ваших запросов.
-------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |