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 :

app/config/config.php
     "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.

index.php
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 url et path de Twig.

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 à true si Twig est utilisé

test

A enlever (déprécié)

debug

Active ou désactive les logs

Mettre à false en production

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 @exec

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:

app/config/config.php
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 css et js de twig sont utilisées

Exemple d’un fichier Services avec une base de données et le démarrage du routeur :

app/config/services.php
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.

php.ini
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
php.ini
; 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 :

php.ini
; 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.