Cache strony, optymalizacja i poprawienie wydajności serwisu
Teraz utworzymy katalog naszcach w głownym katalogu witryny i nadmy mu prawa zapisu 777
Kiedy katalog jest już gotowy możemy przejść do kodu php który będzie sprawdzał czy istnieje cache tej strony jeśli tak to zaciągnie dane z pliku, jeśli nie to wygeneruje to normalnie poprzez kod zapytanie do bazy.
Listing poniżej pokazuje gotowy przykładowy kod, można go dowolnie rozwinąć i rozbudować wszystko zależy od was.
Dalsza czê¶æ: 1 2
Kiedy katalog jest już gotowy możemy przejść do kodu php który będzie sprawdzał czy istnieje cache tej strony jeśli tak to zaciągnie dane z pliku, jeśli nie to wygeneruje to normalnie poprzez kod zapytanie do bazy.
Listing poniżej pokazuje gotowy przykładowy kod, można go dowolnie rozwinąć i rozbudować wszystko zależy od was.
Dalsza czê¶æ: 1 2
Listing
<?php
// pobieramy adres podstrony i kodujemy w md5 wygenerowany hash będzie nazwą pliku cache dla tej podstrony
$hashCache = $_SERVER['REQUEST_URI'];
$hashCache = hash("md5",$hashCache);
//Sprawdzamy czy istnieje plik cache dla tej podstrony
if(file_exists('naszcache/'.$hashCache.'.txt')){
//jeśli istnieje sprawdzamy czy nie jest zbyt stary nasz cache bedzie sie aktualizował co 1h
$utworzony = getdate(filemtime('naszcache/'.$hashCache.'.txt'));//pobranie tablicy z datą utworzenia pliku
$utworzony = $utworzony['year'].'-'.$utworzony['mon'].'-'.$utworzony['mday'].' '.$utworzony['hours'].':'.$utworzony['minutes'].':'.$utworzony['seconds']; // tutal tworzymy date w formie rok-miesiac-dzien godzina:minuta:sekunda
$dzisiaj = date("Y-m-d H:i:s"); // pobieramy aktulany czas
$start = strtotime($dzisiaj); // czas obecny w mikro sekundach
$koniec = strtotime($utworzony); // czas utworzonego pliku w sekundach
$roznica= $start-$koniec;
if($roznica<3600){ // jeśli różniaca między datą utworzenia a datą obecną jest mniejsza niż 3600 sekund (1h) to zaciągamy dane z pliku cache
$fp = fopen('naszcache/'.$hashCache.'.txt', 'r'); // otwieramy plik
$dane = fread($fp, filesize('naszcache/'.$hashCache.'.txt')); // odczytujemy dane
echo $dane; // wyświetlamy je
fclose($fp); //zamekamy plik
exit(); // przerywamy wykonywanie kodu
}
}else{ // jeśli plik jest stary lub nie istnieje zostanie wykonan ta częśc kodu
function lacz_bd()
{
$db = new mysqli('localhost', 'uzytkownik', 'haslo', 'nazwa_bazy');
if (! $db)
return false;
$db->autocommit(TRUE);
return $db;
}
//teraz pobierzemy nasze fikcyjne dane z bazy i zapiszemy kod wynikowy do zmiennej $zawartosc
//połaczenie z bazą
$db = lacz_bd();
//zapytanie sql do bazy określające jakie dane mają zostać pobrane
$zapytanie = "select imie, nazwisko from pracownicy";
//pobranie wyniku zapytania
$wynik = $db->query($zapytanie);
//obliczanie ilości rekordów
$ile_znalezionych = $wynik->num_rows;
//rozpoczynamy budowanie tabeli dla naszych danych
$zawartosc ='<table>';
$zawartosc .='<tr><td>Imie</td><td>Nazwisko</td></tr>';
//pętla po rekordach z bazy
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
$zawartosc .='<tr>';
$zawartosc .='<td>'.$wiersz['imie'].'</td>';
$zawartosc .='<td>'.$wiersz['nazwisko'].'</td>';
$zawartosc .='</tr>';
}
$zawartosc .='</table>';
// teraz kiedy zmienna $zawartosc zawiera HTML z danymi z bazy możemy je wyświetlić użytkownikowi<br>
echo $zawartosc;
//teraz czas na zapis pliku cache bo po co następny user ma generować to samo zapytanie i przetwarzać ten sam kod :)
if(!file_exists('naszcache/'.$hashCache.'.txt')){ //sprawdzamy czy plik nie istnieje jeśli tak to zapisujemy nowy
$fp = fopen('naszcache/'.$hashCache.'.txt', 'x+');
fwrite($fp, $zawartosc);
fclose($fp);
}
if(file_exists('naszcache/'.$hashCache.'.txt')){
if($roznica>3600){
unlink('naszcache/'.$hashCache.'.txt'); // usuwam stary plik
}
}
?>
Dodano przez: igor
Ranga: Administrator serwisu Punktów: 0
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
W tym kodzie jest malutki błąd, przed ?> powinno być jeszcze jedno } :)
autor: :) | 429 | 2009-08-22 12:07:48
Wcale, że nie. Kod jest napisany poprawnie i żadnych nawiasów klamrowych nie brakuje. Sprawdź jeszcze raz.
autor: Divix | 430 | 2009-08-22 13:05:02
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno