Optimización de Ubiquity

Ubiquity es rápido, pero puede serlo aún más optimizando algunos elementos.

Nota

El servidor de pruebas integrado (accesible mediante Ubiquity serve) utiliza sus propios archivos de configuración y lanzamiento (en la carpeta .ubiquity de su proyecto).
Por lo tanto, no debe utilizarse para evaluar los resultados de los cambios realizados.

Pruebe sus páginas utilizando una configuración de software y hardware similar a la utilizada en producción.
Utiliza una herramienta de benchmark para evaluar tus cambios a medida que se producen (Apache bench por ejemplo).

Cache

Sistema

Elija y pruebe entre los diferentes sistemas de caché (ArrayCache, PhpFastCache, MemCached).
El sistema de caché se define en el archivo de configuración:

app/config/config.php
     "cache" => [
             "directory" => "cache/",
             "system" => "Ubiquity\\cache\\system\\ArrayCache",
             "params" => []
     ]

por defecto ArrayCache es a menudo la solución más optimizada.

Generación

Genera el router y la caché ORM (Piensa que las anotaciones nunca se usan en tiempo de ejecución):

Ubiquity init-cache

Contenidos estáticos

Si su aplicación tiene páginas que están siendo generadas por PHP pero que en realidad raramente cambian, puede almacenarlas en caché:

  • Los resultados de la consulta (utilizando métodos DAO)

  • La respuesta de ruta (con la anotación @route)

archivo índice

Elimine la línea que define el informe de errores en tiempo de ejecución y asegúrese de que la visualización de errores está desactivada en php.ini.

index.php
error_reporting(\E_ALL);//To be removed

Optimización de la configuración

Se puede acceder a la configuración desde el archivo app/config/config.php.

Conserve sólo los elementos esenciales para su solicitud.

key

role

Optimización

siteUrl

Utilizado por los métodos Ajax y por las funciones url y path de Twig.

Debe suprimirse si no se utilizan estas funciones

base de datos

Utilizado por Ubiquity ORM

Debe eliminarse si no se utiliza el ORM

sessionName

Si se asigna, inicia o recupera la sesión php para cada petición

Se eliminará si la sesión es inútil

templateEngine

Si se asigna, instanciará un nuevo objeto Motor para cada solicitud.

Se eliminará si no se utilizan las vistas

templateEngineOptions

Opciones asignadas a la instancia del motor de plantillas

establecer la opción de caché en true si se utiliza Twig

test

Eliminar (obsoleto)

debug

Activa o desactiva los registros

Fijar en false en producción

logger

Define la instancia del logger

Para eliminar en producción

di

Define los servicios que deben inyectarse

Sólo se lee la clave @exec en tiempo de ejecución

cache

Define la ruta de la caché y la clase base de la caché, utilizada por modelos, enrutador, inyección de dependencia

mvcNS

Define las rutas o espacios de nombres utilizados por los controladores Rest, los modelos y los controladores

isRest

Define la condición para detectar si una ruta corresponde a un controlador Rest

Se eliminará si no utiliza explícitamente esta condición en su código

Ejemplo de configuración sin sesión, y sin inyección de dependencia:

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);

Optimización de los servicios

Los servicios cargados son accesibles desde el archivo app/config/services.php.

En cuanto al archivo de configuración, conserve sólo los elementos esenciales para su aplicación.

Líneas

Rol

\Ubiquity\cache\CacheManager::startProd($config)

Inicia la caché para ORM, base de datos, enrutador, inyección de dependencia

UbiquityormDAO::start()

Sólo para bases de datos múltiples

Router::start()

Sólo debe utilizarse si las rutas se definen con anotaciones

Router::addRoute(«_default», «controllers\IndexController»)

Define la ruta por defecto (a eliminar en producción)

\Ubiquity\assets\AssetsManager::start($config)

Asigna la variable siteUrl al ThemeManager, que sólo se utilizará si se usan las funciones css y js de twig.

Ejemplo de un fichero de Servicios con una base de datos y arranque del router :

app/config/services.php
1<?php
2\Ubiquity\cache\CacheManager::startProd($config);
3\Ubiquity\controllers\Router::start();

Optimización del cargador automático

En producción, elimine las dependencias utilizadas únicamente en desarrollo y genere el archivo de mapa de clases optimizado:

composer install --no-dev --classmap-authoritative

Si las dependencias utilizadas ya se han eliminado y sólo desea actualizar el archivo de mapa (después de añadir o eliminar una clase):

composer dump-autoload -o  --classmap-authoritative

Nota

El parámetro --no-dev elimina la dependencia ubiquity-dev requerida por webtools. Si utiliza webtools en producción, añada la dependencia phpmv/ubiquity-dev:

composer require phpmv/ubiquity-dev

Optimización PHP

Tenga en cuenta que otras aplicaciones pueden utilizar los valores modificados en el mismo servidor.

OP-Cache

OPcache mejora el rendimiento de PHP almacenando el código de bytes de los scripts precompilados en memoria compartida, eliminando así la necesidad de que PHP cargue y analice los scripts en cada petición.

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 utiliza el servidor web ubiquity-swoole:

php.ini
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

Para completar

Recuerda que el framework utilizado no lo hace todo. También tienes que optimizar tu propio código.