Optimisation Ubiquity
Ubiquity est rapide, mais peut l’être encore plus en optimisant quelques éléments.
Note
Le serveur de test intégré (accessible par Ubiquity serve) utilise ses propres fichiers de configuration et de lancement (dans le dossier .ubiquity de votre projet).
Il ne doit donc pas être utilisé pour évaluer les résultats des modifications apportées.
Testez vos pages en utilisant une configuration logicielle et matérielle similaire à celle utilisée en production.
Utilisez un outil de benchmark pour évaluer vos changements au fur et à mesure (Apache Bench par exemple).
Cache
Système
Choisissez et testez parmi les différents systèmes de cache (ArrayCache, PhpFastCache, MemCached).
Le système de cache est défini dans le fichier de configuration :
"cache" => [
"directory" => "cache/",
"system" => "Ubiquity\\cache\\system\\ArrayCache",
"params" => []
]
Le cache par défaut ArrayCache est souvent la solution la plus optimisée.
Génération
Générer le routeur et le cache ORM (pensez que les annotations ne sont jamais utilisées à l’exécution) :
Ubiquity init-cache
Contenus statiques
Si votre application comporte des pages qui sont générées par PHP mais qui changent rarement, vous pouvez les mettre en cache :
Le résultat de la requête (utilisant les méthodes DAO)
La réponse de la route (avec l’annotation @route)
fichier index
Supprimez la ligne définissant le signalement des erreurs au moment de l’exécution, et assurez-vous que l’affichage des erreurs est désactivé dans php.ini.
error_reporting(\E_ALL);//To be removed
Optimisation de la configuration
La configuration est accessible depuis le fichier app/config/config.php
.
Ne gardez que les éléments essentiels à votre application.
key |
rôle |
Optimisation |
---|---|---|
siteUrl |
Utilisé par les méthodes Ajax, et par les fonctions |
A supprimer si ces fonctions ne sont pas utilisées |
database |
Utilisé par l’ORM Ubiquity |
A supprimer si la partie ORM n’est pas utilisée |
sessionName |
Si elle est assignée, démarre ou récupère la session php pour chaque requête. |
A supprimer si la session est inutile |
templateEngine |
S’il est assigné, instancie un nouvel objet Moteur pour chaque requête. |
A supprimer si les vues ne sont pas utilisées |
templateEngineOptions |
Options attribuées à l’instance du moteur de templates |
mettre l’option cache à |
test |
A enlever (déprécié) |
|
debug |
Active ou désactive les logs |
Mettre à |
logger |
Définit l’instance de logger |
A enlever en production |
di |
Définit les services à injecter |
La seule clé lue à l’exécution est |
cache |
Définit le chemin du cache et la classe de base du cache, utilisés par les modèles, le routeur, l’injection de dépendance. |
|
mvcNS |
Définit les chemins ou les espaces de noms utilisés par les contrôleurs, les modèles et les contrôleurs Rest |
|
isRest |
Définit la condition pour détecter si un chemin correspond à un contrôleur Rest |
A supprimer si vous n’utilisez pas explicitement cette condition dans votre code |
Exemple de configuration sans session, et sans injection de dépendances:
1<?php
2return array(
3 "templateEngine"=>'Ubiquity\\views\\engine\\Twig',
4 "templateEngineOptions"=>array("cache"=>true),
5 "debug"=>false,
6 "cache"=>["directory"=>"cache/","system"=>"Ubiquity\\cache\\system\\ArrayCache","params"=>[]],
7 "mvcNS"=>["models"=>"models","controllers"=>"controllers","rest"=>""]
8);
Optimisation des services
Les services chargés sont accessibles depuis le fichier app/config/services.php
.
Comme pour le fichier de configuration, ne conservez que les éléments essentiels à votre application.
Lignes |
Rôle |
---|---|
\Ubiquity\cache\CacheManager::startProd($config) |
Démarre le cache pour l’ORM, la base de données, le routeur, l’injection de dépendances. |
UbiquityormDAO::start() |
A utiliser uniquement en la présence de plusieurs bases de données |
Router::start() |
A utiliser uniquement si les routes sont définies avec des annotations. |
Router::addRoute(« _default », « controllers\IndexController ») |
Définit la route par défaut (à supprimer en production) |
\Ubiquity\assets\AssetsManager::start($config) |
Affecte la variable siteUrl à partir du ThemeManager, à utiliser uniquement si les fonctions |
Exemple d’un fichier Services avec une base de données et le démarrage du routeur :
1<?php
2\Ubiquity\cache\CacheManager::startProd($config);
3\Ubiquity\controllers\Router::start();
Optimisation de l’autoloader
En production, supprimez les dépendances utilisées uniquement en développement, et générez le fichier map des classes optimisé :
composer install --no-dev --classmap-authoritative
Si les dépendances utilisées ont déjà été supprimées et que vous souhaitez uniquement mettre à jour le fichier map (après avoir ajouté ou supprimé une classe) :
composer dump-autoload -o --classmap-authoritative
Note
Le paramètre –no-dev` supprime la dépendance ubiquity-dev
requise par webtools. Si vous utilisez webtools en production, ajoutez la dépendance phpmv/ubiquity-dev
:
composer require phpmv/ubiquity-dev
Optimisation PHP
Veuillez noter que d’autres applications peuvent utiliser les valeurs modifiées sur le même serveur.
OP-Cache
OPcache améliore les performances de PHP en stockant le bytecode des scripts précompilés dans la mémoire partagée, ce qui évite à PHP de devoir charger et analyser les scripts à chaque requête.
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
; The OPcache shared memory storage size.
opcache.memory_consumption=256
; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=10000
; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=0
; Allow file existence override (file_exists, etc.) performance feature.
opcache.enable_file_override=1
; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
opcache.huge_code_pages=1
Si vous utilisez le serveur web ubiquity-swoole :
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
Pour compléter
N’oubliez pas que le framework utilisé ne fait pas tout. Vous devez également optimiser votre propre code.