Специални теми Подобряване на производителността, Окончателното ръководство за Yii 1

Ефективността на едно уеб приложение зависи от много фактори. Основните са достъп до базата данни, файлова система и честотна лента на мрежата. В Yii всеки от тези фактори се взема предвид, за да се намали влошаването на производителността поради самата рамка. Въпреки това много части от приложението могат да бъдат подобрени за по-добра производителност.

1. Активиране на APC разширението ¶

Активирането на PHP APC разширението вероятно е най-лесният начин да подобрите цялостната производителност на вашето приложение. Разширението оптимизира и кешира PHP междинния код и спестява време, прекарано в интерпретиране на PHP скриптове при всяка заявка.

2. Деактивирайте режима за отстраняване на грешки ¶

Деактивирането на режима за отстраняване на грешки е друг лесен начин за подобряване на производителността. Yii приложение работи в режим на отстраняване на грешки, ако константата YII_DEBUG е зададена на true. Режимът за отстраняване на грешки е полезен за разработка, но не е най-добрият за производителност поради използването на повече компоненти. Например, когато регистрирате грешки, допълнителна информация може да бъде записана с всяко съобщение.

3. Използване на yiilite.php ¶

Ако се използва PHP APC разширението, можем да заменим yii.php с друг товарач - yiilite.php. Това ще даде на приложението още по-голям тласък на производителността.

Струва си да се отбележи, че използването на yiilite.php без APC може да има отрицателно въздействие върху производителността, тъй като yiilite.php включва класове, които може да не са необходими при всяка заявка и отнемат известно време за анализ. Също така беше отбелязано, че при някои сървърни конфигурации yiilite.php е по-бавен дори когато се използва APC. Най-добрият начин да решите дали да използвате yiilite.php е да тествате срещупридружаващото демо приложение hello world.

4. Използване на кеширане ¶

Както вече беше описано в раздела за кеширане, Yii предоставя няколко решения, които могат значително да подобрят производителността на приложение. Ако генерирането на някои данни отнема много време, можем да използваме кеширане на данни, за да го направим по-рядко. Ако част от страницата остане непроменена, можем да използваме кеширане на фрагменти. Ако цялата страница не се промени, може да се използва кеширане на страницата.

Ако използвате Active Record, можете да активирате кеширането на структурата на базата данни. Това може да стане чрез задаване на свойството CDbConnection::schemaCachingDuration на стойност, по-голяма от 0 в настройките.

В допълнение към описаните настройки на приложението можете да използвате кеширане на ниво сървър. APC кеширането, описано по-горе, се отнася само за тях. Има и други решения като Zend Optimizer, eAccelerator и Squid.

5. Оптимизиране на база данни ¶

Извличането на данни от база данни често е тясно място за производителността на приложението. Въпреки че кеширането може да смекчи загубата, то не решава напълно проблема. Когато базата данни съдържа огромни количества данни и кешът трябва да бъде обновен, извличането на данните може да бъде прекалено скъпо, ако схемата на данните или заявките не са правилно схематизирани.

Бъдете внимателни при избора на индекси. Използването им може значително да ускори заявките SELECT, но да забави заявките INSERT, UPDATE и DELETE.

За сложни заявки се препоръчва да се създаде изглед в базата данни, вместо да се използват заявки от PHP код, който СУБД анализира всеки път.

Не злоупотребявайте с Active Record. Въпреки че Active Record е удобна проекция на данни в OOP стил, нопроизводителността при използването му, поради използването на обекти за представяне на всеки ред от резултата, пада. За приложения с интензивно използване на данни се препоръчва използването на DAO или API за работа със СУБД на още по-ниско ниво.

Не на последно място, използвайте LIMIT в SELECT заявки. По този начин можете да избегнете получаването на излишни данни от базата данни и загубата на паметта, разпределена от PHP за съхраняването им.

6. Минимизиране на скрипт файлове ¶

За страница, генерирана от Yii, е възможно някои скриптове да са свързани с компоненти, чийто код не искате да променяте (например основни компоненти на Yii). Как да минимизирате такива скриптове е показано по-долу.

Първо, нека опишем кои файлове да минимизираме. Задайте свойството scriptMap на компонента clientScript. Това може да стане както в настройките на приложението, така и в кода. например:

Същото важи и за CSS файловете.

Можете също така да увеличите скоростта на зареждане на страницата, като използвате API на Google AJAX Libraries. Например, можем да включим jquery.js от сървърите на Google, вместо да използваме собствен сървър. За да направите това, трябва да конфигурирате scriptMap, както следва:

Като зададем стойностите на false, ние не позволяваме на Yii да генерира код, който да включва подходящите файлове. Вместо това ги свържете от сървърите на Google: