Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "zacinające się" pobieranie obrazków
Forum PHP.pl > Forum > PHP
robertta
Witam
Mam problem z pobieraniem obrazków a właściwie ich wyświetlaniem na stronie sklepu. Obrazki pobierane są losowo i wyświetlane w prawej kolumnie sklepu. Często zdarza się że któryś z obrazków nie zostaje do końca wyświetlony (wyświetla się do połowy, czy 2/3, różnie) i przeglądarka mieli przez kilkanaście sekund aż w końcu go wyświetli. Zdarza się to różnie na różnych obrazkach. Nie zauważyłem żadnej sensownej logiki. Może częściej się przycinają jak jest więcej osób na serwerze ale to też nie koniecznie. Można powiedzieć że na 20 przejść na różne strony sklepu (klikaniu w odnośniki do kategorii w menu) 3 razy będzie problem z wyświetleniem obrazków.
Już nie mam pomysłów co może być nie tak. Proszę o pomoc.
strona sklepu to www.ebmia.pl - chodzi o obrazki na samej górze prawej kolumny "Losowe zdjęcia użytkowników forum cnc.info.pl"

Obrazki pobierane są z albumu z forum PHPBB by przemo. Są to miniaturki utworzone przez skrypt forum. Obrazki znajdują się na tym samym serwerze.
Poniżej kod odpowiedzialny za pobieranie obrazków - fragment pliku 'get_topics.php'
  1. mysql_query("SET NAMES latin2");
  2. $sql = "SELECT pic_id, pic_thumbnail, pic_filename, pic_title, pic_desc, pic_cat_id
  3. FROM c0forum." . ALBUM_TABLE . "
  4. ORDER BY rand()
  5. LIMIT 6";
  6. $query = mysql_query($sql) or die(mysql_error());
  7. if(mysql_num_rows($query) > 0) {
  8. echo '<div><div class="tytul" style="margin-top:40px;float:left;width:258px;background:url(\'templates/ebmia/grafika/tlo_input.png\') repeat-x;font-weight:bold;color:rgb(255,255,255);padding:5px 0;text-align:center;border:1px solid rgb(122,178,231);border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;">Losowe zdjęcia użytkowników forum cnc.info.pl</div>
  9. <div class="tresc" style="float:left;border:1px solid rgb(122,178,231);border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;margin-bottom:15px;padding:0;text-align:center;overflow:hidden;">';
  10. while($row = mysql_fetch_array($query)) {
  11. echo '<a target="_blank" href="http://www.cnc.info.pl/album_page.php?pic_id='.$row['pic_id'].'"><img src="http://www.cnc.info.pl/album_mod/upload/cache/'.stripslashes($row['pic_filename']).'" style="display:inline-block;border-radius:5px;border:2px solid rgb(150,150,150);margin:5px;max-height:80px;max-width:260px;"/></a>';
  12. }
  13. echo '</div></div>';
  14. }

Fragment odpowiedzialny za wyświetlanie fotek na pasku wygląda tak:
  1. <div id="boczny_pas" <?php if($wscreen >= 1250) {echo 'style="display: block; margin-left: '.(860 + ($wscreen - 990) / 2).'px;"';} ?>>
  2. <?php
  3. $nC = array();
  4. function drzewko_od_tylu($id, $nC) {
  5. if($id > 0) {
  6. $nC[] = $id;
  7. $query = tep_db_query("SELECT parent_id FROM categories WHERE categories_id='".$id."' LIMIT 1");
  8. $row = tep_db_fetch_array($query);
  9. $nC = drzewko_od_tylu($row['parent_id'], $nC);
  10. }
  11. return $nC;
  12. }
  13. include('templates/get_topics.php');
  14. if(isset($current_category_id)) {
  15. $query = tep_db_query("SELECT * FROM categories_related WHERE categories_id_1='".(int)$current_category_id."' OR categories_id_2='".(int)$current_category_id."'");
  16. if(tep_db_num_rows($query)) {
  17. echo '<div class="zobacz_t">';
  18. echo '<div class="tytul" style="float: left; width: 258px; background: url(\'templates/ebmia/grafika/tlo_input.png\') repeat-x; font-weight: bold; color: rgb(255,255,255); padding: 5px 0; text-align: center; border: 1px solid rgb(122,178,231); border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0;">Zobacz także</div>
  19. <div class="tresc" style="float: left; border:1px solid rgb(122,178,231); border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; margin-bottom: 15px; padding: 0; text-align: left;"><ul>';
  20. $i=0;
  21. while($row = tep_db_fetch_array($query)) {
  22. if($row['categories_id_1'] == $current_category_id)
  23. $query2 = tep_db_query("SELECT c.categories_id, c.categories_image, cd.categories_name FROM categories c, categories_description cd WHERE c.categories_id='".(int)$row['categories_id_2']."' AND c.categories_id <> '".(int)$current_category_id."' AND cd.categories_id=c.categories_id AND cd.language_id='".$languages_id."'");
  24. else
  25. $query2 = tep_db_query("SELECT c.categories_id, c.categories_image, cd.categories_name FROM categories c, categories_description cd WHERE c.categories_id='".(int)$row['categories_id_1']."' AND c.categories_id <> '".(int)$current_category_id."' AND cd.categories_id=c.categories_id AND cd.language_id='".$languages_id."'");
  26.  
  27. while($row2 = tep_db_fetch_array($query2)) {
  28. $link = drzewko_od_tylu($row2['categories_id'], $nC);
  29. $link = array_reverse($link);
  30. $link = implode('_',$link);
  31. $kolor = '';
  32. if($i % 2 == 0)
  33. $kolor='background-color:rgb(230,230,230);';
  34. echo '<li style="width:248px;'.$kolor.'padding:5px;clear:both;float:left;"><a href="'.tep_href_link('index.php', tep_get_all_get_params(array('filter_id','action','wyszukiwanie','action','cPath','products_id','page','x','y','action','search_in_description','inc_subcat','keywords','categories_id')).'cPath='.$link).'" style="color:rgb(0,0,0);font-size:11px;font-weight:bold;">
  35. <img src="images/'.$row2['categories_image'].'" alt=" '.$row2['categories_name'].'" style="width:50px;border-radius:5px;border:2px solid rgb(150,150,150);margin:5px;float:left;"/><br/>'.$row2['categories_name'].'
  36. </a></li>';
  37. $i++;
  38. }
  39. }
  40. echo '</ul>
  41. </div>
  42. </div>';
  43. }
  44. }
  45. echo '</div>';

Jestem przekonany że w tym kodzie nie ma co szukać błędów.

Proszę o informacje co jeszcze może być przyczyną przycięć przy pobieraniu obrazków? Może ustawienia serwera na to wpływają?
Pyton_000
Ja nie zauważyłem problemu, Możesz zrobić screena tego błędu?
Zobacz jeszcze w FireBug co się dzieje podczas takiego zajścia w zakładce Network
robertta
Witam
Poniżej przesyłam screen z takiego zacięcia oraz zrzut z firefoxbuga.
Jak widać pobieranie obrazka trwa 20 sekund. Pobieram 6 tych obrazków losowo i tylko co jakiś czas jest problem z ich pobraniem (to znaczy pobierają się po 20 i więcej sekund. Nie zauważyłem żadnej reguły powodującej dłuższe pobieranie obrazków.
Czy to może być wina źle zapisanych obrazków? (skrypt zapisuje je automatycznie jako miniaturki)
czy może źle skonfigurowanego serwera?

https://www.dropbox.com/s/j4u38yj84us8i72/zacinanie.jpg
https://www.dropbox.com/s/orrt3u5ldxill02/z...-firefoxbug.jpg



Okazuje się że to nie jest tylko problem z ładowaniem obrazków w prawej belce. Okazało się że różne losowe obrazki mają problem z doczytaniem się do strony.
Może ktoś podpowie co może być przyczyną tego że obrazek wczyta się kawałek a później przeglądarka mieli żeby go pobrać. W końcu się pobierze ale czasem trwa to kilkadziesiąt sekund.
trueblue
Będąc w zakładce Network, skopiuj adres obrazka (pod prawym klawiszem myszy) i wklej go w innej zakładce, potestuj.
Masz jakiś program antywirusowy? Wyłącz go na chwilę i odśwież stronę.
robertta
Obrazek w nowej zakładce otwiera się błyskawicznie. Nie jest to wina uszkodzonego obrazka. Obrazki te same raz się wczytują od razu a innym razem doczytują się przez kilkadziesiąt sekund.
Nie jest to też wina programu antywirusowego. Jest to objaw występujący na wszystkich komputerach.

... okazuje się że to jest problem nie tylko tej jednej strony. Wszystkie strony, postawione na tym serwerze mają przycinki pobierania obrazków.
Może ktoś podpowie gdzie mogę szukać przyczyny. Serwer jest na pewno nie przeciążony, ma szybkie dyski i dużo pamięci.
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.