Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> for() - optymalizacja skryptu
Joachim Peters
post
Post #1





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Witam,

Mam taki kawałek kodu w swojej klasie stronnicowania:
  1. <?php
  2. $count = ceil($this->totalRecords / $this->maxRecords);
  3. $j = (($this->recordStart / $this->maxRecords) > 1) ? $this->recordStart / $this->maxRecords : $count;
  4.  
  5. for($i = 0; $i < $count; $i++) {
  6. $pageId = ($i * $this->maxRecords);
  7. $pager .= ($pageId != $this->recordStart) ? '<a href="'.$pageId.'">'.($i + 1).'</a>&nbsp;' : '<b>'.($i + 1).'</b>&nbsp;';
  8.  
  9. if($i == 2) {
  10. if($count > 6) {
  11. if(($count - 3) >= $j) {
  12. $i = $j - 2;
  13. $pager .= '... ';
  14. } else {
  15. $i = $count - 4;
  16. $pager .= '... ';
  17. }
  18. }
  19. }
  20. if($i > $j && ($count - 3) >= $j) $d++;
  21. if($d == 1) break;
  22. }
  23. ?>

Walczę z nim już drugi dzień, ale ciągle zdarzają się błędy typu "Fatal error: Allowed memory size of". Macie sugestie co do tego kodu, jak go zoptymalizować?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Pokaż kod wyciągający dane z bazy - te, które stronicujesz. Głównie napisz jak pobierasz ilość rekordów z bazy dancch i czy potem przerzucasz je do tablic/obiektów

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Joachim Peters
post
Post #3





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Testuje to jeszcze na "sucho", poprzez wprowadzenie do konstruktora ilości wszystkich rekordów i liczby wyświetlanych na jednej stronie.
Go to the top of the page
+Quote Post
zimi
post
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


Twój kod jest dla mnie zagadką
wstawmy sobie przykładowo dane
$this->recordStart = 90;
$this->maxRecords = 30;
$this->totalRecords = 317;
Stąd będziemy mieli:
$count = 11;
$j = 3;
dochodzimy w pętli do $i = 2 i wykonuję się warunek...
otrzymujemy: if(11-3>3) $i = 3 - 2 = 1;
i jedziemy znowu do for bo kolejne warunki się nie wykonują, znowu dostaniemy 2 znowu ten sam warunek i pętla nieskończona...

tak naprawdę nie mam pojęcia do czego służy zmienna $d i $j dość mało opisowe nazwy biggrin.gif:P

co do wykropkowywania stosujesz całą masę magicznych liczb smile.gif a więc w kod trzeba się wpatrzeć aby zrozumieć o co w nim chodzi,
ja do tego proponuję trochę inne rozwiązanie które kiedyś sobie wydumałem:
  1. <?php
  2. $stronyWidoczne = array( 1, 2, 3, $ileStron-2, $ileStron-1, $ileStron, $stronaAktualna-2, $stronaAktualna-1, $stronaAktualna, $stronaAktualna+1, $stronaAktualna+2);
  3. //inicjalizacja najprostsza z możliwych... można ją trochę zautymatyzować... bądź 
    zmodyfikować żeby była edytowalna...
  4. sort($stronyWidoczne);
  5. $poprzedniaStrona=0;
  6. foreach($stronyWidoczne as $numerStrony){
  7. if($numerStrony>0&&$numerStrony<=$ileStron){
  8. if($poprzedniaStrona+1==$numerStrony)
  9. {
  10. if($stronaAktualna!=$numerStrony)
  11. {
  12. $pager.='<a href="'.$numerStrony.'">'.$numerStrony.'</a> ';
  13. }
  14. else
  15. {
  16. $pager.='['.$numerStrony.'] ';
  17. }
  18. }
  19. else
  20. {
  21. $pager.='... <a href="'.$numerStrony.'">'.$numerStrony.'</a> ';
  22. }
  23. $poprzedniaStrona=$numerStrony;
  24. }
  25. }
  26. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:34