Maison développement back-end tutoriel php Explication détaillée des techniques de mise en cache et de compression des pages dynamiques en PHP

Explication détaillée des techniques de mise en cache et de compression des pages dynamiques en PHP

Jun 24, 2017 pm 01:40 PM
php 动态 压缩 技巧 缓存

mod_gzip est un module Apache dont la fonction est d'utiliser Gzip pour compresser des pages html statiques. Les navigateurs qui suivent le standard IETF peuvent accepter l'encodage gzip (IE, Netscape, etc.). mod_gzip peut augmenter le temps de téléchargement d'une page de 4 à 5 fois. Je vous recommande fortement d'utiliser mod_gzip sur votre serveur Web. Cependant, nous avons également dû construire notre propre moteur de compression en PHP. Dans cet article, je vais vous présenter comment utiliser la fonction de contrôle de sortie de PHP pour accélérer considérablement la vitesse de chargement des pages.

Présentation des fonctions de contrôle de sortie de PHP

La chose la plus satisfaisante à propos de PHP4 est que vous pouvez laisser PHP mettre en cache toutes les sorties générées par le script avant de décider de les envoyer. Auparavant, le le navigateur ne recevrait aucun contenu. Dans un script, vous pouvez utiliser ces fonctions pour définir des en-têtes et des cookies, mais cela ne représente qu'une petite partie des puissantes fonctions de sortie.

<?php 
void ob_start(void); 
?>
Copier après la connexion

indique au processeur PHP de rediriger toutes les sorties vers un tampon interne. Aucune sortie ne sera envoyée au navigateur tant que ob_start ne sera pas appelé.

<?php 
string ob_get_contents(void); 
?>
Copier après la connexion

Cette fonction renvoie le "tampon de sortie" sous forme de chaîne. Vous pouvez appeler cette fonction pour envoyer la sortie accumulée au navigateur. (Seulement après avoir désactivé la fonction de mise en mémoire tampon !!)

<?php 
int ob_get_length(void); 
?>
Copier après la connexion

Renvoie la longueur de la chaîne dans le cache.

<?php 
void ob_end_clean(void); 
?>
Copier après la connexion

Videz le cache de sortie et désactivez le cache de sortie. Cette fonction doit être utilisée avant que le contenu du cache ne soit envoyé au navigateur.
void 501([int flag])
Utilisé pour activer/désactiver le commutateur d'action de chasse implicite (la valeur par défaut est désactivée). Si flush est activé, chaque fois que print/echo ou d'autres commandes de sortie sont appelées, le contenu de sortie sera immédiatement envoyé au navigateur.

Utilisez les contrôles de sortie pour compresser la sortie PHP
Vous devez utiliser le package d'extension Zlib compilé en PHP4 pour compresser la sortie. Si nécessaire, vous pouvez consulter les instructions d'installation du package Zlib dans la documentation PHP.
Tout d'abord, initialisez le cache de sortie :

<?php 
ob_start(); 
ob_implicit_flush(0); 
?>
Copier après la connexion

Après cela, utilisez print, echo ou d'autres méthodes que vous aimez pour générer tout le contenu de sortie, par exemple :

<?php
print("Hey this is a compressed output!"); 
?>
Copier après la connexion

Une fois la page générée, nous récupérons le contenu de sortie :

<?php 
$contents = ob_get_contents(); 
ob_end_clean(); 
?>
Copier après la connexion

Après cela, nous devons détecter si le navigateur prend en charge les données compressées. S'il est pris en charge, le navigateur enverra un en-tête HTTP ACCEPT-ENCODEING au serveur. Il suffit de vérifier s'il y a une chaîne "gzip,deflate" dans la variable $HTTP_ACCEPT_ENCODING.

<?php 
if(ereg(&#39;gzip, deflate&#39;,$HTTP_ACCEPT_ENCODING)) { 
// 在这里生成 Gzip 压缩的内容 
} else { 
echo $contents; 
} 
?>
Copier après la connexion

Cette méthode est simple à utiliser et clairement structurée. Voyons comment générer une sortie compressée :

<?php 
//告诉浏览器将要收到的是gzip数据 
//当然在此之前,你已经检查了它们是否支持gzip,x-gzip数据格式 
//如果支持的是x-gzip,那么下面的头就要用z-gzip来代替 
header("Content-Encoding: gzip");
//显示gzip文件的头 
//只需显示一次 
echo "x1fx8bx08x00x00x00x00x00";
//计算出文件的大小和CRC码 
$Size = strlen($contents); 
$Crc = crc32($contents);
//压缩数据 
$contents = gzcompress($contents, 9);
//我们不能就这样输出,因为CRC码是混乱的。 
//如果我在这里使用“echo $contents”,压缩的数据会被送出, 
//但是却不完整。文件最后的四个字节是CRC校验码,可是只发出去了三个字节。 
//最后一个字节被丢掉了。我不知道这个bug在4.0.2版中解决了没有, 
//不过最好避免错误的方法是把正确的CRC校验码加到压缩的数据的末尾。 
// 
//把旧的CRC校验码剥离 
$contents = substr($contents, 0, strlen($contents) - 4);
//仅显示压缩的数据 
echo $contents;
//输出CRC,和原来数据的大小(字节) 
gzip_PrintFourChars($Crc); 
gzip_PrintFourChars($Size);
function gzip_PrintFourChars($Val) { 
for ($i = 0; $i <4; $i ++) { 
echo chr($Val % 256); 
$Val = floor($Val / 256); 
} 
}
?> 
//好了,你还可以按此方式附加上更多的压缩数据。
Copier après la connexion

Pour les tests réels, tout le code du script est le suivant :

<?php 
ob_start(); 
ob_implicit_flush(0);
print("I&#39;m compressed!n");
$contents = ob_get_contents(); 
ob_end_clean();
header("Content-Encoding: gzip");
echo "x1fx8bx08x00x00x00x00x00";
$Size = strlen($contents); 
$Crc = crc32($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, strlen($contents) - 4);
echo $contents;
gzip_PrintFourChars($Crc); 
gzip_PrintFourChars($Size);
function gzip_PrintFourChars($Val) { 
for ($i = 0; $i <4; $i ++) { 
echo chr($Val % 256); 
$Val = floor($Val / 256); 
} 
} 
?>
Copier après la connexion

Cache la sortie PHP

Quand PHP4 avait pas encore sorti et je devais utiliser PHP3, j'étais très intéressé par le développement de mécanismes de mise en cache pour réduire le chargement de la base de données et l'accès au système de fichiers . Il n’existe pas de méthode particulièrement efficace en PHP3, mais avec la mise en cache de sortie, tout devient beaucoup plus simple en PHP4.
Voici un exemple simple :

<?php 
//为请求的URI构造一个文件名 
$cached_file=md5($REQUEST_URI);

if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) { 
//is_valid函数验证缓存,你可以用这个函数检查Cache是否过期或其他特定的条件。 
//如果文件不在Cache中或者不可用则生成输出 
ob_start(); 
ob_implicit_flush(0); 
//在此输出……
$contents = ob_get_contents(); 
ob_end_clean(); 
$fil=fopen($cached_file,"w+"); 
fwrite($fil,$contents,$strlen($contents)); 
fclose($fil); 
}
/如果请求的文件在缓存中且可用,则: 
readfile($cached_file);
?>
Copier après la connexion

Ceci est un exemple simple, en utilisant la mise en cache de sortie, vous pouvez créer un système de génération de contenu complexe en utilisant différents caches pour différents morceaux ou programmes, mécanismes, etc...

Conclusion

Les fonctions de contrôle de sortie PHP sont très utiles pour rediriger la sortie générée par les scripts vers le cache. La sortie des données de cache remplacées pour les navigateurs prenant en charge gzip peut réduire les temps de chargement. Il peut également être utilisé comme mécanisme de mise en cache pour réduire l'accès aux sources de données (bases de données ou fichiers), ce qui est très important lors de l'utilisation de XML.
Si nous construisons un moteur en PHP, mettons en cache les données des sources de données (documents XML et bases de données) et générons dynamiquement du contenu au format XML (sans présentation-apparence), nous pouvons obtenir la sortie de ces XML et utiliser XSLT Convert en n'importe quel format souhaité (html, wap, palm, pdf, etc.). Cette tâche peut être bien accomplie en utilisant la mise en cache de sortie de PHP4 et l'extension Sablotron XSLT.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles