Я бы, вероятно, пропустил кеширование - Lucene очень и очень эффективен. Возможно, так эффективно, что поиск будет быстрее, чем в кеше.
Мне кажется, что полный индекс OnApplication_Start мне не подходит - его, вероятно, следует запускать в своем собственном потоке, чтобы не блокировать другие дорогостоящие действия при запуске.
на стороне клиента:
на стороне сервера (я предполагаю, что вы сидите на каком-то unix-подобном сервере):
проверьте веб-сервер с небольшим статическим содержимым (небольшой gif или небольшая страница html), используя apache bench (ab, часть apache webserver package) или httperf , сервер должен иметь возможность отвечать как минимум на 100 запросов в секунду (конечно, это сильно зависит от размера вашего тестового контента, типа веб-сервера, оборудования и других вещей, так что не воспринимайте это 100 серьезно). если все выглядит хорошо,
протестируйте django с помощью ab
или httperf
в «статическом представлении» (в котором не используется объект базы данных), если это медленно, значит, вы нужно больше мощности процессора. проверьте загрузку процессора на сервере с помощью top
. Если все в порядке, проблема может быть в том, как веб-сервер выполняет код Python
. Если обслуживание полустатического контента в порядке, ваша проблема может быть связана с базой данных или с привязкой к вводу-выводу. Проблемы с базами данных - обширная область, вот несколько общих советов:
iostat
. если вы видите много операций записи, значит, вы получаете лучшую дисковую подсистему, более быстрый рейд, жесткие диски SSD ... или оптимизируете свое приложение, чтобы писать меньше. , если вы сообщите нам, какое оборудование / программное обеспечение вы используете, я мог бы дать более подробный совет
edit / PS: забыл одну вещь: of конечно, ваше приложение может иметь плохой дизайн и делать много ненужных / неэффективных вещей ...
Взгляните на панель инструментов отладки Django - она поможет вам с кодом на стороне сервера (например, какие запросы к базе данных выполнялись и сколько времени они занимали); и, как правило, это отличный ресурс для разработки Django.
Другие части, не относящиеся к Django, вы можете профилировать с помощью yslow .
Существуют различные инструменты, но такие проблемы нетрудно найти, потому что они большие.
У вас есть проблема, и когда вы удалите ее, вы ощутите ускорение. Предположим, что ускорение - это какой-то фактор, например, 2x. Это означает, что программа тратит 50% своего времени на ожидание медленной части. Я просто останавливаю его несколько раз и смотрю, чего он ждет. В этом случае я бы видел проблему в 50% случаев, когда останавливал ее.
Сначала я бы сделал это на стороне клиента. Если я вижу, что 50% израсходовано на ожидание сервера, я бы попытался остановить его на стороне сервера. Затем, если я увижу, что он ждет запросов SQL, я мог бы посмотреть на них.
Я почти уверен, что узнаю, что требуется больше работы, чем фактически необходимо. Обычно это не что-то эзотерическое, вроде «горячей точки». или «алгоритм». Обычно это что-то глупое, например выполнение нескольких запросов, когда одного было бы достаточно, чтобы избежать необходимости писать код для сохранения результата первого запроса.
First things first; make sure you know which pages are slow. You might be surprised. I recommend django_dumpslow.