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.
Administratorem Twoich danych osobowych będzie Rafał Płatek, prowadzący działalność gospodarczą pod firmą CREAM.SOFTWARE RAFAŁ PŁATEK, wpisaną do rejestru ewidencji gospodarczej CEiDG pod numerem NIP 681-112-89-55. Szczegóły związane z przetwarzaniem danych osobowych znajdziesz w polityce prywatności.