Je travaille avec Magento, et il existe une fonction qui fusionne CSS et JavaScript dans un grand fichier. p>
Peu importe les avantages et les inconvénients de cela, il y a le problème suivant: p>
Le fichier final est mis en cache à plusieurs niveaux incluant mais ne se limite pas à: P>
Magento utilise une somme MD5 des noms de fichiers CSS concatérés pour générer un nouveau nom de fichier pour le fichier CSS fusionné. De sorte que chaque page qui dispose d'un ensemble distinct de fichiers CSS obtient un fichier CSS fusionné approprié. P>
Pour contourner le problème de la mise en cache, j'ai également inclus l'horodatage de modification de fichier dans ce hachage, de sorte qu'un nouveau hachage est généré, chaque fois qu'un fichier CSS est modifié. p>
Les avantages complètes de la note de mise en cache non réévalidative, mais si quelque chose est changé, sa visibilité instantable, car la liaison de ressources a changé. P>
jusqu'à présent si bon: p>
Un seul problème est que les noms de fichiers utilisés pour générer l'ont, ne sont que ceux qui seraient normalement directement référencés dans le bloc HTML-tête et ne em> pas em> < / Fort> Inclure les importations Les modifications des fichiers importés dans les fichiers CSS ne donnent pas à un nouveau hachage. P>
Non, je ne veux vraiment pas analyser récursivement toutes les importations et les numériser ou quelque chose comme ça. p>
J'ai plutôt pensé à une solution basée sur un répertoire. Y a-t-il quelque chose pour surveiller efficacement le "dernier changement dans un répertoire" sur une base système de fichiers? P>
Nous utilisons EXT4. P>
ou peut-être y a-t-il un autre moyen, peut-être avec la commande de recherche, qui fait tout le travail basé sur des index inodes? p>
quelque chose comme ça? p>
J'ai vu beaucoup de programmes qui "voir" des modifications instantanément sans numériser des systèmes de fichiers entiers. Je crois qu'il existe également des démons "Watch de manipulation de fichiers" disponibles sous Linux. p>
Le problème est que le répertoire CSS est assez énorme. P>
Quelqu'un peut-il me dire dans la bonne direction? P>
4 Réponses :
Si vous utilisez la commande
ls -ltr `find . -type f `
Assez bonne idée. Vous ne pouvez également lire que la dernière ligne avec la queue et le tuyau directement à MD5Sum ... Cependant, il lit tous les fichiers avec la recherche et les transmet à LS, qui se termine assez rapidement dans une erreur "Liste d'arguments trop longue" pour / bin / bin / ls. Bien sûr, vous pouvez augmenter la limite, mais la tuyauterie autour de telles données énormes est probablement problématique ... Il existe également un commutateur récursif pour LS, problème, il existe que le tri ne fonctionne que par répertoire et non: /
Essayez d'examiner les packages inotify qui vous permettront d'être informé de la modification d'une modification d'un répertoire. P>
Je suis au courant de cet appui inotify mais j'espérais quelque chose qui n'a pas besoin de courir constamment en arrière-plan, mais peut être traité efficacement avec chaque charge de page.
@Joe hopfgartner: J'utilise Inotify dans Python et C avec un fil d'écoute des notifications du noyau, ce qui est très efficace;) Mais je ne fais pas de serveur Web ...
Je ne l'ai jamais utilisé, mais apparemment Il y a une prise en charge inotify pour PHP < / a>. p>
(Inotify serait le moyen le plus efficace d'obtenir des notifications sous Linux) p>
Je suis au courant de cet appui inotify mais j'espérais quelque chose qui n'a pas besoin de courir constamment en arrière-plan, mais peut être traité efficacement avec chaque charge de page.
Je vous suggère d'utiliser un démon indépendant PHP pour modifier la date de modification de votre fichier CSS principal lorsque l'un des fichiers PHP dépendants est modifié. Vous pouvez utiliser le dnotify pour cela, quelque chose comme: il exécutera "toucher" sur le fichier CSS principal chaque fois que l'un des fichiers d'autre dossier est modifié (-a -r -b -b - S = tout accès d'accès / répertoire récursif / exécuté en arrière-plan / pas de sortie). Ou vous pouvez faire toute autre action et testez-le de PHP. P> P>
Meilleure solution jusqu'à présent! J'aime vraiment ça. J'espérais une solution plus indépendante qui ne nécessite pas d'emploi de base à écouter, mais j'aime vraiment ça.
Eh bien, PHP est généralement beaucoup plus lent puis compilé des programmeurs et effectuer des chèques sur chaque charge de page est beaucoup plus coûteux, puis déclenchant une acion une fois par changement (car les modifications sont rares). Mais si vous n'êtes pas préoccupé par la vitesse - vous pouvez utiliser la fonction ReadDir () de PHP pour boucler votre dossier et utiliser la fonction Stat () de PHP () sur chaque fichier pour obtenir MTIME (dernière heure de modification). Vous pouvez augmenter considérablement les performances s'il y a un délai autorisé avant que les modifications ne soient appliquées - vous ne pouvez exécuter ce chèque que chacune des n minutes (vous pouvez utiliser la base de données / fichier temporaire / etc. pour enregistrer la dernière heure de contrôle) ou utiliser le temps de vérification) ou utiliser cron.