Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo długie wykonywanie skryptu
Forum PHP.pl > Forum > PHP
mati251195
Witam,
Napisałem niezbyt skomplikowane narzędzie do sprawdzania, kto skomentował news. Sprawdzanie dotyczy około 100 newsów dla 20 użytkowników, a skrypt wykonuje się od 40 do 60 sekund i wg mnie coś jest nie tak. Albo hosting pracuje bardzo bardzo wolno, albo ja popełniłem jakiś błąd.

Na początku skrypt pobiera listę użytkowników i zapisuje do tablicy ich nicki, następnie pętla while po kolei odczytuje kolejne newsy. W pętli while jest pętla for, która sprawdza po kolei każego użytkownika - pobiera komentarz danego użytkownika do danego newsa, gdy nie znajdzie to wiadomo, że nie skomentował, a gdy znajdzie to sprawdza datę, aby było wiadomo po jakim czasie skomentował newsa. W pętli while od newsów od razu jest warunek, że gdy news jest w tablicy ignorowani lub gdy jego premiera jeszcze nie zastąpiła to nie sprawdza tego, tylko wstawia wszystkie, że nie skomentowali smile.gif Tutaj znajduje się kod skryptu: http://wklejto.pl/173709

Z góry dziękuję za pomoc mi w tej sprawie, ponieważ chciałbym, aby to działało sprawnie smile.gif
r4xz
zadanie 1. Policz ile zapytań wysyłasz do bazy dla w/w 100 newsów i 20 użytkowników smile.gif

---edit---
przyjmij że
  1. in_array($data['news_id'], $ignorowane) || $data['news_datestamp'] >= $teraz
zawsze zwraca false smile.gif
mati251195
Tych zapytań jest około 2300. Mam inny skrypt, który wykonuje ponad 1800 zapytań i on działa bardzo sprawnie, czas wykonywania kodu to kilka sekund maksymalnie, a tu killkanaście razy dłużej to trwa sad.gif

Ta linijka kodu nie zwraca zawsze FALSE, niby dlaczego tak uważasz?
Crozin
Napisz jakie jest zadanie tego kodu, co chcesz przy jego pomocy osiągnąć. Na pierwszy rzut oka źle zabrałeś się do problemu i nie ma sensu poprawiać tego kodu. Go trzeba napisać inaczej.
Pyton_000
Po pierwsze czy zapytania optymalnie korzystają z kluczy w bazie?

Jeżeli nie to czy nie lepiej pokusić się o pobranie wszystkich komentów (tylko wymaganych pól a nie *) i iterować. Na pewno nie zajedzie to bazy a pamięci wystarczy
foxbond
Cytat
narzędzie do sprawdzania, kto skomentował news


To na 100% da się zrobić jednym zapytaniem. Chyba, że coś nie tak zaprojektowałeś db
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.