Blog
Ładne formatowanie w PHP czy kompresja kodu strony?
- #formatowanie
- #php
- #programowanie
Autor: Sylweriusz
Czy istnieje sposób aby pogodzić sprzeczności ? Z jednej strony chcemy w serwisach tworzonych przez siebie stosować czytelny kod, a z drugiej strony zajmuje to dodatkowe bajty. Przykład zastosowania buforowania strony w PHP.
Czasem dla kilku bajtów oszczędności decydujemy się zrezygnować z czytelności kodu który z mozołem tworzymy. Późniejsze wprowadzenie poprawek, zmiana układu, itp działania są wtedy mocno utrudnione. Musimy wybierać czytelny kod, z wcięciami, odstępami, taki który można łatwo zrozumieć na pierwszy rzut oka, czy skompresowany nieczytelny ciąg tagów i tekstu, albo coś pośredniego.
Poniżej zaproponuję przykład rozwiązania umożliwiającego pogodzenie tych pozornych sprzeczności.
Rozwiązanie wykorzystuje funkcję buforowania strony w PHP w taki sposób że przed wysłaniem strony do przeglądarki następuje wycięcie wszystkich znaków które nie są konieczne dla jej wyświetlenia, a tylko zajmują miejsce.
Przykładowa funkcja kompresująca kod wygląda tak:
function _code_compress($content)
{
//skasowanie pustych tytułów
$content = str_replace(" title=\"\"","",$content);
$content = str_replace(" alt=\"\"","",$content);
//skasowanie znaków końca linii
$content = str_replace("\n","",$content);
$content = str_replace("\r","",$content);
//skasowanie spacji
$content = str_replace(" "," ",$content);
$content = str_replace(" "," ",$content);
$content = str_replace(" "," ",$content);
$content = str_replace(" "," ",$content);
$content = str_replace(" "," ",$content);
return $content;
}
Efektem działania powyższej funkcji jest jedna linia kodu zawierająca całą zawartość strony bez zbędnych spacji czy znaków końca wiersza.
Należy pamiętać że jeżeli w kodzie strony zaszyjemy np. skrypty javascript to one też pozostaną potraktowane w ten sposób.
Zastosowanie tej funkcji sprowadza się do jej wywołania na stronie jak w poniższym przykładzie:
<?
//wczytanie pliku z funkcja kompresującą
include "funkcje.php";
//włączenie buforowania z filtrowaniem funkcją kompresującą kod
ob_start("_code_compress");
?><html>
<head>
<meta http-equiv="Content-type" content="text/html;
charset=iso-8859-2">
<meta http-equiv="Content-Language" content="pl">
<meta http-equiv="Pragma" content="no-cache">
</head>
<body><table border="0">
<tr>
<th>Nagłówek 1</th>
<th>Nagłówek 2</th>
<th>Nagłówek 3</th>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</body>
</html><?
//wysłanie strony do przeglądarki
ob_end_flush();
?>
Powyższa przykładowa strona w wersji oryginalnej miała około 480 bajtów, po przepuszczeniu przez filtr około 350 bajtów.
Realnie można tą metodą zyskać około 5-10% to nie jest może dużo, ale czasem liczy sie nawet tyle.
Należy pamiętać o tym że buforowanie strony można w obrębie dokumentu stosować wielokrotnie, włączać i wyłączać dla tych jej fragmentów które chcemy buforować.
Zachęcam do dalszych modyfikacji tej funkcji jeżeli zdecydujecie się ją zastosować.
Notatka: W Pajączku 5 NxG w menu “Narzędzia / Formatowanie i kompresja kodu” znajduje się kilka narzędzi ułatwiajacych zmniejszanie rozmiaru strony oraz ładne formatowanie.