Comment gérer / nettoyer les CSS / JS agrégés obsolètes?


17

J'utilise uniquement Drupal 7 intégré à l'agrégation CSS / JS, mais le dossier de fichiers où les fichiers css.gz et js.gz se remplissent à un rythme assez rapide, et même si je suis sûr que ce sera un certain temps avant qu'il ne commence à remplir complètement le lecteur, il est maintenant aussi bon que n'importe quel moment pour comprendre la situation.

  • Le nombre actuel de fichiers dans / js est de 335
  • Le nombre actuel de fichiers dans / css est de 451

Existe-t-il une méthode standard que je devrais utiliser pour faire face à cette situation? Je préférerais une solution qui garde le drupal dans la boucle.

De plus, je constate que de nombreux fichiers gz ont des homologues non gz. Y a-t-il une raison pour laquelle les fichiers .css et .css.gz sont conservés? Degrédation peut-être?

Merci


Pouvez-vous confirmer que cron fonctionne?
mpdonadio

C'est certainement le cas
DanH

Réponses:


16

C'est en fait de par leur conception afin que les pages mises en cache avec des versions plus anciennes de fichiers ne soient pas cassées. Voir ce numéro fermé .

TL; DR: Ils seront supprimés automatiquement 30 jours (ou quelle que soit la valeur de votre drupal_stale_file_thresholdvariable) après leur création viadrupal_clear_css_cache() et drupal_clear_js_cache(). La solution consiste donc à modifier la drupal_stale_file_thresholdvaleur à une valeur inférieure aux 30 jours par défaut.

  • Quand les anciens fichiers sont-ils supprimés

    Les anciens fichiers de cache ne sont pas supprimés immédiatement lorsque la variable de recherche est vidée, mais sont supprimés après une période définie par drupal_delete_file_if_stale (). Cela garantit que les fichiers référencés par une page mise en cache seront toujours disponibles.

drupal_delete_file_if_stale() par défaut à 30 jours - donc si a) Cron fonctionne correctement et b) vous voyez des fichiers agrégés de plus de 30 jours, vous avez un problème différent.

variable_get('drupal_stale_file_threshold', 2592000) est le chèque de 30 jours. variable_set('drupal_stale_file_threshold', 172800)changerait le délai d'attente à deux jours. Sur un site où la gestion du cache est strictement contrôlée, le temps pourrait être encore plus court.

Source: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7
Voir drupal_delete_file_if_stale()pour plus d'informations.

  • Y a-t-il une raison pour laquelle les fichiers .css et .css.gz sont conservés?

    Si la compression CSS gzip est activée, les URL propres sont activées (ce qui signifie que les règles de réécriture fonctionnent) et l'extension zlib est disponible, puis créez une version gzippée de ce fichier. Ce fichier est servi conditionnellement aux navigateurs qui acceptent gzip en utilisant les règles .htaccess.

Source: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7 (dans les commentaires de fonction)

Voir aussi drupal_build_js_cache()qui est presque identique à drupal_build_css_cache().


Merci, je me sens un peu paresseux de ne pas avoir cherché ça maintenant;)
Clive

0

Après 4 ans, je dois être en désaccord avec la première réponse, où l'auteur déclare:

"Cela garantit que les fichiers référencés par une page en cache seront toujours disponibles.".

Peut-être que certaines choses ont été modifiées / optimisées dans le provisionnement d'agrégation de fichiers plus anciens, mais si je supprime un fichier plus ancien manuellement sur le serveur dans files / advagg_js (que j'utilise apparemment toujours dans l'un de mes navigateurs), le rechargement de page suivant se régénère exactement le même fichier à nouveau avec le code source javascript récemment ajouté, comme si drupal_build_js_cache() avait été exécuté sur ce nom de fichier agrégé.

par exemple. js__22qMV1d_G25luSFBkuR7bIuKD5FE80eKuXx6ldibEixg__yjA2JTeF2f1LUJ3PMdjMr8k9nOPZQJIcvVw-c5Gz_yc__FY0NTHFBVMd9MIGE5srDXTejEZGP-ccSH7UX2zImN-0.js

Je conclus donc que la définition d'une baisse significative drupal_stale_file_thresholdne poserait aucun problème, et même la suppression de tous les fichiers agrégés suivie d'un effacement du cache forcera une régénération des agrégats (test et confirmation du travail sur les rechargements de page)


-5
  • Obtenez le module Rules
  • Ajouter une nouvelle règle qui sera exécutée lorsque le cron est en cours d'exécution
  • En tant qu'action, sélectionnez exécuter le code php.
  • Écrivez le code php

Cela pourrait être quelque chose comme ça:

$dir = 'your/directory/';
  foreach(glob($dir.'*.*') as $v){
  unlink($v);
}

Ces fonctions php peuvent vous aider à modifier le code à votre guise.

Soyez très prudent avant d'exécuter cela! S'il n'est pas utilisé correctement, vous pouvez supprimer votre site! Avant d'essayer ce code, testez-le sur un hôte local

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.