Browse Source

Une optimisation dans le chargement.

Ajout d'une librairie par défaut de gestion du stockage des noisettes via une cache (en fait, 2 un pour les descriptions et un autre pour les signatures).
svn/attic/tags/v010/106508
eric@smellup.net 6 years ago
parent
commit
4545f33bbd
  1. 12
      inc/ncore_cache.php
  2. 104
      ncore/ncore.php
  3. 19
      ncore_fonctions.php

12
inc/ncore_cache.php

@ -8,13 +8,19 @@ if (!defined('_ECRIRE_INC_VERSION')) {
if (!defined('_NCORE_DIRCACHE')) {
define('_NCORE_DIRCACHE', _DIR_CACHE . 'ncore/');
}
if (!defined('_NCORE_DIR_CACHE')) {
if (!defined('_NCORE_NOMCACHE_NOISETTE_SIGNATURE')) {
define('_NCORE_NOMCACHE_NOISETTE_SIGNATURE', 'noisettes_signature.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_DESCRIPTION')) {
define('_NCORE_NOMCACHE_NOISETTE_DESCRIPTION', 'noisettes_description.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_AJAX')) {
define('_NCORE_NOMCACHE_NOISETTE_AJAX', 'noisettes_ajax.php');
}
if (!defined('_NCORE_DIR_CACHE')) {
if (!defined('_NCORE_NOMCACHE_NOISETTE_INCLUSION')) {
define('_NCORE_NOMCACHE_NOISETTE_INCLUSION', 'noisettes_inclusion.php');
}
if (!defined('_NCORE_DIR_CACHE')) {
if (!defined('_NCORE_NOMCACHE_NOISETTE_CONTEXTE')) {
define('_NCORE_NOMCACHE_NOISETTE_CONTEXTE', 'noisettes_contexte.php');
}

104
ncore/ncore.php

@ -0,0 +1,104 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function ncore_noisette_lister_signatures($service) {
// Récupération des signatures md5 des noisettes déjà enregistrées.
// -- Les signatures md5 sont sockées dans un fichier cache séparé de celui des descriptions de noisettes.
include_spip('inc/ncore_cache');
$signatures = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_SIGNATURE);
return $signatures;
}
function ncore_noisette_stocker($service, $noisettes, $recharger) {
$retour = true;
// Les descriptions de noisettes et les signatures sont stockés dans deux caches distincts.
// -- Les descriptions : on conserve la signature pour chaque description, le tableau est réindexé avec l'identifiant
// de la noisette.
// -- Les signatures : on isole la liste des signatures et on indexe le tableau avec l'identifiant de la noisette.
include_spip('inc/ncore_cache');
if ($recharger) {
// Si le rechargement est forcé, toutes les noisettes sont nouvelles, on peut donc écraser les caches
// existants sans s'en préoccuper.
$descriptions = array_column($noisettes['nouvelles'], null, 'noisette');
cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_DESCRIPTION, $descriptions);
$signatures = array_column($noisettes['nouvelles'], 'signature', 'noisette');
cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_SIGNATURE, $signatures);
} else {
// On lit les cache existants et on applique les modifications.
$descriptions = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_DESCRIPTION);
$signatures = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_SIGNATURE);
// On supprime les noisettes obsolètes
if ($noisettes['obsoletes']) {
$descriptions_obsoletes = array_column($noisettes['obsoletes'], null, 'noisette');
$descriptions = array_diff($descriptions, $descriptions_obsoletes);
$signatures_obsoletes = array_column($noisettes['obsoletes'], 'signature', 'noisette');
$signatures = array_diff($signatures, $signatures_obsoletes);
}
// On remplace les noisettes modifiées et on ajoute les noisettes nouvelles. Cette opération peut-être
// réalisée en une action avec la fonction array_merge.
if ($noisettes['modifiees'] or $noisettes['nouvelles']) {
$descriptions_modifiees = array_column($noisettes['modifiees'], null, 'noisette');
$descriptions_nouvelles = array_column($noisettes['nouvelles'], null, 'noisette');
$descriptions = array_merge($descriptions, $descriptions_modifiees, $descriptions_nouvelles);
$signatures_modifiees = array_column($noisettes['modifiees'], 'signature', 'noisette');
$signatures_nouvelles = array_column($noisettes['nouvelles'], 'signature', 'noisette');
$signatures = array_diff($signatures, $signatures_modifiees, $signatures_nouvelles);
}
// On recrée les caches.
cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_DESCRIPTION, $descriptions);
cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_SIGNATURE, $signatures);
}
return $retour;
}
function ncore_noisette_decrire($service, $noisette) {
$description = array();
// Chargement de toute la configuration de la noisette en base de données.
// Les données sont renvoyées brutes sans traitement sur les textes ni les tableaux sérialisés.
include_spip('inc/ncore_cache');
$descriptions = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_DESCRIPTION);
if (isset($descriptions[$noisette])) {
$description = $descriptions[$noisette];
}
return $description;
}
function ncore_noisette_config_ajax($service) {
// On détermine la valeur par défaut de l'ajax des noisettes qui est stocké dans la configuration du plugin.
return false;
}
function ncore_noisette_lister($service, $information) {
// Initialisation du tableau de sortie
$info_noisettes = array();
if ($information) {
include_spip('inc/ncore_cache');
if ($descriptions = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_DESCRIPTION)) {
$info_noisettes = array_column($descriptions, $information, 'noisette');
}
}
return $info_noisettes;
}

19
ncore_fonctions.php

@ -38,7 +38,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function ncore_noisette_charger($service, $dossier = 'noisettes/', $recharger = false) {
// Retour de la fonction
$retour = false;
$retour = true;
// Initialiser le contexte de rechargement
// -- TODO : en attente de voir si on rajoute un var_mode=recalcul_noisettes
@ -120,18 +120,21 @@ function ncore_noisette_charger($service, $dossier = 'noisettes/', $recharger =
}
}
// Mise à jour du stockage des noisettes:
// Mise à jour du stockage des noisettes si au moins un des 3 tableaux est non vide et que le chargement forcé
// n'est pas demandé:
// -- Suppression des noisettes obsolètes ou de toutes les noisettes si on est en mode rechargement forcé.
// Pour permettre une optimisation du traitement en mode rechargement forcé on passe toujours le mode.
// -- Update des pages modifiées
// -- Insertion des nouvelles pages
$noisettes = array('nouvelles' => $noisettes_nouvelles);
if (!$options['recharger']) {
$noisettes['obsoletes'] = $noisettes_obsoletes;
$noisettes['modifiees'] = $noisettes_modifiees;
if (!$recharger and ($noisettes_nouvelles or $noisettes_obsoletes or $noisettes_modifiees)) {
$noisettes = array('nouvelles' => $noisettes_nouvelles);
if (!$options['recharger']) {
$noisettes['obsoletes'] = $noisettes_obsoletes;
$noisettes['modifiees'] = $noisettes_modifiees;
}
$stocker = "${service}_noisette_stocker";
$retour = $stocker($noisettes, $options['recharger']);
}
$stocker = "${service}_noisette_stocker";
$retour = $stocker($noisettes, $options['recharger']);
}
return $retour;

Loading…
Cancel
Save