Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obciazenie - optymalizacja
Forum PHP.pl > Forum > Bazy danych > MySQL
borec
sytuacja jest nastepujaca:

mam zajac sie portalem opartym na php i mysql, napisanym jakby kot przelazl po klawiaturze (kod nieprzejrzysty, chaotyczny, cud ze to wogole dziala). portal staje sie bardzo popularny i jest problem z obciazeniem mysql (praktycznie wszystko tam korzysta z bazy).

zastanawiam sie czy jest jakis spobob zmniejszenia obciazenia bazy (i najlepiej tez apache'a) bez ingerencji w kod (tak wogole to pisze wlasnego cms'a ale to jeszcze chwile potrwa, a obciazenie musze obnizyc na dniach).

pewnym rozwiazaniem jest generowanie wersji html kazdej strony za kazdym razem gdy cos zostanie zmieniona, ale nie jest to zbyt wygodne.

jakies inne pomysly?
Bakus
Cache'owanie wyników przez np. truck mmcache...
Wystarczy go dobrze skonfigurować... lecz niestety w tym przypadku musisz mieć dostęp co configa apache i php...
borec
nad wykorzystaniem tmmc jeszcze sie zastanowie, ale watpie czy bede mial dostep do konfiguracji serwera

na razie napisalem sobie taka funkcje 'cache'ujaca' wyniki skryptow w plikach html

[php:1:b6039ba206]<?php

// dolaczane na poczatek kazdej strony

function filename () {

$file = basename($_SERVER['SCRIPT_FILENAME'], '.php');

if (trim($_SERVER['QUERY_STRING'])) {
$file .= '_' . trim($_SERVER['QUERY_STRING']);
}

$file = $file . '.htm';

return $file;

}

if (!$_POST) {

$html_file = filename();

if (file_exists($html_file)) {
header('Location: '. $html_file);
}
else {

function generate_html ($content) {

$file = filename();

if($fp = fopen($file, 'w')
AND flock($fp, LOCK_EX + LOCK_SH)
AND fwrite($fp, $content)
AND flock($fp, LOCK_UN)
AND fclose($fp)) {

header('Location: '. $file);
}

}

ob_start('generate_html');

}

}
else {
ob_start();
}

?>[/php:1:b6039ba206]

zastanawiam sie jeszcze jak rozwiazac zmiany na stronach aby html'e byly aktualne. ze strony zmian redakcyjnych nie ma problemu: po dokonaniu zmian redaktor usuwa stary plik html i generuje nowy otwierajach strone w przegladarce, ale co jesli zmian dokona uzytkownik np. dodajac komentarz do newsa czy glosujac w ankiecie? (warunek if (!$_POST) w moim kodzie)

chociaz... ehh, przeciez moge wykonac skrypt gdy beda przesylane dane z post i wtedy zapisac wynik w html tongue.gif (myslenie boli winksmiley.jpg). chociaz w praniu moga wyjsc jakies tego efekty uboczne, moze ktos juz widzi jakies problemy takiego rozwiazania?

nowy kod powinnien wygladac chyba tak:

[php:1:b6039ba206]<?php

// pomijam deklaracje funkcji

if (!$_POST) {

$html_file = filename();

if (file_exists($html_file)) {
header('Location: '. $html_file);
exit;
}

}

ob_start('generate_html');

?>[/php:1:b6039ba206]

prosze tez o uwagi zwiazane z bezpieczenstwem smile.gif

ps. ten topic chyba juz nie pasuje do tego forum
DeyV
Mi osobiście bardzo nie podoba się pomysł z tym, by przekierowywać użytkownika do pliku z cache.
Po co?
Nie lepiej jest po porstu otworzyć ten plik w tym samym skrypcie, i go po prostu wyświetlić? (np. [manual:2620765e9a]readfile [/manual:2620765e9a]() )
Będzie to znacznie szybsze, zarówno dla użytkownika, jak i obsługującego to serwera, który będzie miał o jedno wywołanie mniej.
borec
hm, myslalem ze wlasnie tak bedzie szybciej, dzieki DeyV biggrin.gif

testuje wlasnie to na jednej stronce i juz dostrzeglem jedna ulomnosc:

jest na stronie formularz w ktorym mi. nalezy podac prawidlowy email, a jesli zostanie podany bledny to wywala komunikat o poprawiene danych, wiec chyba bede musial jakos ostrzegac skrypt czy w przypadku wysylania postem ma byc generowany html czy nie, a co za tym idzie nieuchronna ingerencja w to szambo (kod) :? any ideas jak to ominac?
Ace
mozesz zrobic zawsze takie cos ze....
po co zawsze cachowac strone ? jesli ma ci sie wyswietlic lista uzytkownikow, czy inne dane ktore czesto sie zmieniaja, to nie cache'uje sie tego. Dopisz do swojego skryptu funkcje ktora umozliwia wlaczenie i wylaczenie cachowania. W przypadku formularzy wylacz ja, a w pozostalych przypadkach pozostaw ja wlaczana.

ewentualnie mozesz zrobic skrypty w js ktore sprawdza poprawnosc formularza przed wyslaniem, jesli sa poprawne, formularz sie wysyla.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.