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.

Skasowane dane to nie zawsze tragedia - ściągnij program i odzyskaj dane

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.

Pajączek.pl - twórz poprawiaj publikuj