Как сохранить окружение между запросами

Xeon303

Новичок
Как сохранить окружение между запросами

У десктоп-приложений, в отличии от веба, есть очень большие преимущества. Например, для desktop-приложений простительно загружаться по 5-10 секунд, а когда пользователь просматривает сайт, ему хочется получить результат мгновенно, несмотря на тот факт, что любая PHP-система готовит своё окружение при каждом запросе. Хотя, сама операция может быть довольно легкой, приходится каждый раз устанавливать соединения с базой данных, загружать множество библиотек и настроек.

Собственно вопрос именно в этом, как наиболее эффективно сохранить окружение включая все объекты, переменные, чтобы можно было использовать их между запросами. Вообще, это возможно как-то на PHP? Или повторная загрузка окружения неизбежна?

P.S. Любого рода кэш решает эту проблему лишь косвенно. Всё таки из кеша данные тоже необходимо загрузить и обработать.
 

dimagolov

Новичок
приходится каждый раз устанавливать соединения с базой данных, загружать множество библиотек и настроек.
сколько времени у тебя это занимает в среднем на запрос?
 

Xeon303

Новичок
бывало в среднем около секунды:
1. Подключить туеву хучу библиотек;
2. БД - самое просто, в расчет не беру;
3. Еще пока все эти библиотеки инициализируются, чтобы с ними работать можно было.

Короче, единственное чем тогда получилось ускорить процесс - это шаманство с компиляцией библиотек... (слияние многих файлов в один большой)

Сама логика приложения в большинстве случаев простая, но невозможно её реализовать, не подключив эти библиотеки.
 

dimagolov

Новичок
1. Lazy Load
2. А ты возьми и посмотри сколько времени. Ты хочешь pconnect или что-то вроде этого, но для экономии времени коннектов mysqlproxy более эфективна и надежна, так как кол-во коннектов не бесконечное
3. оптимизируй

-~{}~ 05.10.09 12:46:

Короче, единственное чем тогда получилось ускорить процесс - это шаманство с компиляцией библиотек... (слияние многих файлов в один большой)
для этого есть акселераторы php, которые кешируют уже байт-код, а то, что ты написал это маразм.
 

Xeon303

Новичок
dimagolov
На этой машине как раз и стоял eAccelerator (Win32). Как ни странно с помощью этого шаманства удалось сэкономить 50% времени на один запрос. На *nix, это конечно дало менее заметный результат.

-~{}~ 05.10.09 20:01:

dimagolov
1. Тот же Zend Framework в одном запросе подключает не один десяток своих библиотек, которые все взаимосвязаны, поэтому Lazy Load тут не в тему немного. Говорю же, я хочу ОДИН раз всё загрузить и забыть про это.
2. Про БД я сказал, что её не брал в расчет, т.к. на неё тратилось наименьшее кол-во времени.
3. Я не считаю что должен оптимизировать библиотеки сторонних разработчиков. Не из-за того что я такой жадный, а потому что выйдет новая версия - и опять всё заново?

Да дело не в том, сколько это занимает времени. Мне не жалко 60-100 мб в оперативной памяти на то, чтобы в ней весел мой процесс, который хранит все данные, какие только пожелаю. А так получается что одни и те же операции выполняются от запроса к запросу с одинаковым результатом. И что? Кроме кэша ничего толковее нет?
 

dimagolov

Новичок
Xeon303, Zend Framework в чистом виде весьма прожорливая к ресурсам штука. Это факт и можно или жить с ним или допиливать его для оптимизации.

п.3 реализуется за счет кешей. кешировать можно на любых уровнях абстракции.

про "висел процесс" есть shared memory решения, но это близко по идеологии к кешированию.

-~{}~ 05.10.09 13:24:

Да дело не в том, сколько это занимает времени
дело в первую очередь в этом. иначе это разговор не о чем. веб приложения изначально обрабатывают одно соединение, все остальное уже дополнения изначальной идеологии и подгонка ее под иные, чем это было изночально, задачи.

п.с. а как в твоец парадигме определять, что клиент ушел и больше не нужно держать "процесс" под него? аналогично сессиям, по таймауту и так же собирать мусор?
 

Xeon303

Новичок
Короче, как я и ожидал всё обсуждение придет к memcached или подобного рода штукам. Писать специально демон на Си, мне слава богу, еще в голову не стукнуло, хотя это и есть решение, но которое не имеет ни малейшего отношения к PHP.

а как в твоец парадигме определять, что клиент ушел и больше не нужно держать "процесс" под него? аналогично сессиям, по таймауту и так же собирать мусор?
Ну например, Apache висит постоянно, по той же аналогии и я представляю такое веб-приложение. Просто на каждый запрос может быть не абсолютно чистое окружение, а иметься готовый процесс с загруженными необходимыми данными, классами, которые общие для всех запросов... Я конечно образно говорю, но идея такова.
 

dimagolov

Новичок
Xeon303, а ты вообще хорошо представляешь как работает веб-сервер + php (apache + mod_php, apache + cgi/fmp, nginx + cgi/fpm, etc.)? запрос приходит веб-серверу, он решает как его обработать (отдать файл или обратиться к хендлеру). Куда в такой архитектуре впихнуть "вечный" процесс для клиента? Кроме того, одновременно один и тот же клиент может запрашивать несколько страниц. Твой обработчик еще и многопоточным должен быть?

п.с. тут народ борется с утечками памяти в "долгоиграющих" пхп скриптах, которые все же встречаются редко, а ты хочешь их все делать долгоиграющими?

п.п.с. точно не уверен, но идеалогия, подобно той, что ты хочешь, может быть у Java Servlet-ах, вместе с многопоточностью

а вообще KISS :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
на практике оптимизация делается другими способами
тот, что ты описываешь - слишком сложный, дорогой и совсем не поддается повторному использованию
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
добавь на сервер оперативки :)
 

Xeon303

Новичок
dimagolov
представлять-то представляю, но думал может быть возможно более менее мягкими способами сделать что-то подобное.
 

zerkms

TDD infected
Команда форума
странный разговор.
Xeon303
предъяви результаты измерений, из которых ты сделал вывод, что подключение скриптов - самое тормозное в твоих скриптах.
 

Xeon303

Новичок
zerkms
тебе я ничего доказывать не собираюсь. Словам трудно поверить? Тем более я не говорил, что это только подключение.
 

Xeon303

Новичок
zerkms
на счет phpfactcgi, спасибо. Будет время - испытаю его.

Только зачем так грубо отвечать, чего-то требовать от меня? Я никому ничего не должен и не обязан, а лишь прошу совет. И меня всегда удивляло, как тут любят выпытывать у людей зачем им нужно то, другое, показать какие-то результаты тестов, которые к теме ни малейшего отношения не имеют.
 

Beavis

Banned
Xeon303
ну тебе тут тоже никто ничё не обязан если честно...
а выпытывают "зачем им это нужно", потому что очень часто люди вдолбят себе что их проблема решается только так и никак иначе, а на самом деле это не так
 

findnext

Новичок
Xeon303
веб нельзя сравнивать с десктоп приложениями. У всех своя особенность.
 

Xeon303

Новичок
Beavis
я знаю это прекрасно, поэтому ни от кого и не требую ничего. Я спросил просто, а не потребовал. Есть разница? Не хочу я тут войну развязывать из-за этого.

А вопрос был конкретный, можно просто ответить, что "это не то что тебе нужно, надо вот это", либо сказать что такого в принципе не существует.

P.S. http://code.google.com/p/phpfastcgi/ - он жив хотя бы? Репозиторий его пустой, как я понял. Либо искал плохо.
 

findnext

Новичок
Собственно вопрос именно в этом, как наиболее эффективно сохранить окружение включая все объекты, переменные, чтобы можно было использовать их между запросами
тебе же нужно один раз использовать - тогда какие дальнейшие запросы...взял, загрузил всё подряд и сервер умер :D. Откуда у тебя такая уверенность в том что для desktop приложений всё загружается сразу в память и не делается никаких сторонних запросов ко всяким там dll и т.д или ты действительно думаешь что десктоп приложения всё сразу загружают?

-~{}~ 06.10.09 12:29:

Xeon303
ты хочешь получать результат без перезагрузки страницы?

-~{}~ 06.10.09 12:30:

ДЛЯ ЭТОГО ПРИДУМАЛИ AJAX
 
Сверху