Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Намалете трафика и времето за зареждане на вашия сайт
  1. Намалете трафика и времето за зареждане на вашия сайт
thelordofweb
     
Автор  thelordofweb (30.04.2006 11:40)  съобщение до автора
Погледнат  12541 пъти  добави към любими
Оценка  добави коментар
Гласове  3  изпрати на приятел
Коментари  (3)  абонирай се за PHP
    Страница 1 / 1

 



Намалете трафика и времето за зареждане на  вашия сайт .

Знаете ли че може да архивирате страницата преди да е изпратите към браузера, а той да е разархивира и изведе точно така, както сте му е подали? По този начин ще намалите обема на данните, които изпращате, времето за зареждане на сайта и трафика си. Единствено трябва да се притеснявате, дали даден браузер поддържа „deflate” или „gzip”, но в днешно време почти всеки има тази поддръжка. Също така php трябва да е с включено zlib разширение.

По подробно, какво ни е нужно?

Gzip - Алгоритъм за намаляване на размера, откривайки дублиращи се данни, използуван от GZIP, Zip, Zlib. С отворен код е. Има поддръжка в почти всички браузери.

Deflate – Алгоритъм за компресия подобен на Gzip, комбинация между алгоритъма LZ77 и кодиране на Huffman. Поддържа се от повечето браузери.

Zlib – Това е библиотека за компресиране на данни с отворен код, не обременена с лицензи. Писана е така, че е да може да се използва на всеки вид хардуер и операционна система. Поддръжката на zlib в php не е по подразбиране и ако искаме да включим тази библиотека, ще трябва да компилираме php със клаузата „-with-zlib[=DIR]”. Във уиндоус версията на php е включена.

Mod_deflite също върши работа, но за него няма да говорим в тази статия. Повече информация за него ще откриете на този адрес - http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

Как става това?

Когато скрипта се изпълнява, може да отделим заглавната част от тази на тялото. Заглавната част не е изпратена веднага, но чака своя ред и затова може лесно да е модифицираме. Веднъж изпратена, повече не може да се модифицира и при опит ще изведе съобщение за грешка. След нея трябва да изпратим тялото на документа.

Ключа е във функциите на PHP за контрол на изхода. Когато задействаме буферирането на изхода, не се изпраща HTTP заглавната част веднага. Така ние имаме възможност да е променим или добавим нови клаузи към нея. Най-хубавото е, че когато скрипта приключи работата си, автоматично изпраща заглавната част и тялото на документа.

Основните функции, които ни трябват са:

ob_start() – Задейства буферирането на изхода
ob_end_flush() – Изпращаме буфера с данните към изхода и прекратяваме буферирането
ob_end_clean() – Почиства изходния буфер без да изпраща нищо към изхода
ob_get_contents() – Връща съдържанието на буфера
ob_gzhandler –Функция компресираща изходния буфер

Пример :

Започваме буферирането.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
//Проверяваме дали браузара поддържа gzip компресия
if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {

    //Проверяваме дали
php разширението е на лице
      
if (extension_loaded('zlib')) {

//Стартираме буферирането и компресията, като нивото на компресия го
//задаваме на 3
          
ob_start(array('ob_gzhandler',3));
       
        //Казваме на браузара да очаква компресирани данни
       
header('Content-Encoding: gzip');
     
}
}

След като приключим с кода може да изведем данните чрез ob_end_flush() или да оставим php сам да свърши това.

Има и друг начин за архивиране на изхода. За този вариант ще ни трябват функциите на Zlib предоставени ни от php, които се използват за създаване и обработка на gzip(.gz) архиви.

Най-важните функции, които ще използваме са :

ob_start() – Задейства буферирането на изхода
ob_end_clean() – Почиства изходния буфер без да изпраща нищо към изхода
ob_get_contents() – Връща съдържанието на буфера

и непознатата ни до този момент

gzencode – Връща компресиран стринг

Пример:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// Стартираме буфериране на изхода
ob_start();
 
// Обработваме нашия код
//
{code}

// Проверяваме дали нашия браузер поддържа
gzip компресия
if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')){
  
// Чрез ob_get_contents() функцията взимаме съдържанието на буфера
  
// С gzencode функцията компресираме това съдържание, избирайки най-високо ниво на компресия(9)
   
$content=gzencode(ob_get_contents(),9);
  
// Изчистваме буфера
   
ob_end_clean();

  
// Предупреждаваме браузера да очаква данни в gzip формат
   
header('Content-Encoding: gzip');
}

// Изпращаме данните към браузер
a
echo
$content;
?>

Компресиране на CSS файла

За да намалите CSS файла може да го преименувате, примерно от мойстил.css на мойстил.php.
В началото на css(вече php) файла добавете :

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Стартираме буферирането
ob_start ("ob_gzhandler");

//Задаваме типа на кодовата таблица
header("Content-type: text/css; charset: UTF-8");

//Казваме на браузера да изпълнява стриктно каквото му зададем свързано с кеша
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$Expires = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";

//Информация описваща , колко дълго да се пази файла в кеша на браузера
header($Expires);

?>

След това трябва да го извикате от HTML кода по начина, показан по-долу.

CODE
1
2
3
<style type="text/css">
@import url(l2shop.php);
</
style>

Повече информация на :
http://www.php.net/manual/en/ref.outcontrol.php ;
http://bg2.php.net/manual/en/ref.zlib.php ;
http://www.webperformance.org/




   


Ключови думи: PHP трафик зареждане на сайт zlib deflate gzip буфериране компресиране


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 За автора: thelordofweb  
SEO за вашия форум - http://seofilter.com;
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Натоварване няма зашото се компресира само html кода а не картинките, спорих с един пъпеш по този въпрос и му зададох въпрос за колко време може да се компресира 30kb html файл?.
Много добре но нека бъдем малко минималистични, след много блъсканици около тва нещо, ако не те интересува нивото на компресия направо можете да избухате:
CODE
1
if(extension_loaded('zlib')) оb_start("ob_gzhandler");
И тва е по кратко и ясно нема как да стане.

  marianbida на 08.06.2007 16:23

Концепцията е принципно добра. Аз лично съм мяркал тези възможности, но да ви кажа, не ми се вярва реалната полза да е особено голяма. Защо мисля така:
1. Обикновено при сайтовете кода е относително малко в сравнение с картинките. Последните имат лоша компресия, ако приемем че ще бъдат компресирани с този подход.
2. По натоварената страна в системата, обикновено е сървърът, така че натоварването му с още една операция (компресиране) едва ли би следвало да се приема за смислено. Особено при много потребители.

Може като прочета целия урок да се убедя че не съм прав... Дано!

  BatRamboZPM на 05.11.2006 18:03

Добре изглежда това наистина и теоретичски доста би могла да се увеличи скоростта за зареждане.
А според тебе би ли могло нещо да се цакне на клиентска част и да стане, така че просто да не се отвори сайта или пък да станат изключения? И при какви условия?

  Miro на 30.09.2006 21:02

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008