flask

Якось зайшла мова в одній комюніті про легкий фреймворк на Python для невеличких сайтів.
Ось невеличка презентація. Буде трошки вільного часу, треба буде покурити мануал і потестувати.

Перша оптимізація Django

Закінчив загальну свою першу оптимізацію проекту на Django. Цікаво і круто. Підгадаю, на стартовій сторінці в мене виконувалось більше 300 запитів, від чого я мало не впав і не розчарувався в "Object-relational mapping". Оптимізація з кешуванням зараз дає результат в 30 дуже легеньких запитів і в час неактуальності кешу ще біля десятка, але також легеньких.
Основне зло, з яким довелось боротись:
  •  django-tagging. Дуже корисна і зручна бібліотека міток, але має в post-init два запити і любе звертання до моделі, в якій використовується поле міток множить кількість запитів на 3. Там де мітки не використовуються, лікується через .defer('tags');
  • В мене кілька пов'язаних моделей і використовується в URL два slug з різних моделей. Звісно по документації описав генерацію URL у get_absolute_url і в результаті отримав у вибірках кількість запитів * 2. Так як в мене кешуються ці моделі, то у шаблонах через template tags по ID я вибирав потрібні значення з інших моделей з кешу, в результаті позбувся цього зла;
Додаткове зло - моменти говнокоду, який довелось розібрати по крупинці і сумістити все з кешуванням. На продакшені швидше за все буде використовуватись memcached.

Висновок: Django дуже рулить. Все надзвичайно слухняне + хороша реалізація фреймворку кешування = хороший результат.

оптимізація і django-tagging

Взявся за оптимізацію проджекту, запустив монітор запитів і офігів, на стартовій більше 300 запитів. А виною всього виявився django-tagging, який запускає post-init і на кожен об'єкт отримуємо + 2 додаткових запити. Вирішується досить просто. У запит додаємо defer('tags')