Це скоріше не стаття, а так замітка, на яку слід посилатися, якщо хтось не думає про те що в проекті може бути записів більше, ніж в тестовій базі даних, а швидкість інтернету менше ніж доступ з локальної мережі 100мбіт.

Виходячи з мого досвіду розробки (та й не тільки мій) «пляшковим горлечком» вашої програми є база даних, таким чином насамперед включаємо slow query log (← посилання на гугл-пошук) і дивимося який запит у нас самий повільний, і думаємо що з ним робити, якщо не можемо вкурить проблему — кличемо старших, нехай теж повтыкают в EXPLAIN (← посилання на документацію → на хабр) вашого диво-запиту.

Але, знову ж таки посилаючись до мого досвіду, більшість проблем з БД вирішують правильні індекси. Легко запам’ятати, що слід індексувати зовнішні ключі, і все що у вас в WHERE, ORDER BY GROUP BY (список не повний, для початку – саме воно).

Не слід пхати багато індексів в таблицю яка часто оновлюється, інакше накладні витрати на оновлення індексу будуть перекривати ваш профіт від оних в рази. Раджу уважно почитати про оптимізацію в MySQL.

Пошук з використанням LIKE це погано. Повнотекстовий з MyISAM вже краще. Зовнішній аля Sphinx — рулить і бибикает для MySQL і PostgreSQL, інфа достовірна 100%.

Але це півбіди, проблем в БД може підкинути і сам додаток — звернення до БД в циклі/рекурсії чи ще якимось збоченим способом можуть привносити дивовижні поправки в результати навантажувального тестування. Зробіть простий профайлер ваших запит і простежте на яких сторінках кількість запитів починає зашкалювати (особливо це стосується типу-ORM і майже-Active Record, коли один об’єкт = один запит, або навіть не один). Всім хто уповає на магію фреймворків, іль будь-нитка gem-ов — не сподівайтеся, що все про що я написав в рівній мірі відноситься до більшості мов веб-програмування, р..код є скрізь, він всюдисущий.

Ну, а тепер про головне, про головній сторінці в 1,5 метра — чи дочекається її завантаження користувач зі швидкістю доступу до 256кбіт? Клієнтська оптимізація повинна проводитися в обов’язковому порядку: YSlow так Page Speed вам в зуби. Та якщо погуглити, то навіть невелика правка htaccess для apache поліпшить ситуацію:

# Enable ETag
FileETag MTime Size
# Enable Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css-text/javascript application/x-javascript
ExpiresActive On
ExpiresDefault “access plus 1 seconds”
ExpiresByType text/html “access plus 1 seconds”
ExpiresByType image/x-icon “access plus 2592000 seconds”
ExpiresByType image/gif “access plus 2592000 seconds”
ExpiresByType image/jpeg “access plus 2592000 seconds”
ExpiresByType image/png “access plus 2592000 seconds”
ExpiresByType text/css “access plus 604800 seconds”
ExpiresByType text/javascript “access plus 216000 seconds”
ExpiresByType application/x-javascript “access plus 216000 seconds”

Потисніть JavaScript і CSS, так переключіть jQuery на Google CDN. І я це вже постив, між іншим…

З повагою, ваш КО