Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obciążenie serwera.
Forum PHP.pl > Forum > PHP
patryk20120
Witam Was,

napisałem w miarę prosty skrypt na swoją strone, lecz po wejściu sporej liczby osób np. 100 strona zaczyna bardzo wolno się ładować. Możecie mi powiedzieć, czy poniższy kod może aż tak obciążać serwer?

Mam taki kodzik na stronie:
  1. <script type="text/javascript" language="javascript">
  2. $(document).ready(function() {
  3.  
  4. function live(){
  5. $.ajax({
  6. url: './a_php.php',
  7. data: {data: 'info'},
  8. type: 'post',
  9. success: function(output) {
  10. $("#div").html(output);
  11.  
  12. }
  13. });
  14.  
  15. }
  16. live();
  17. setInterval(function(){live();}, 19800);
  18.  
  19. });
  20. </script>


a to kod a_php.php
  1. <?php
  2. if( $_POST['data'] == 'info' && !empty($_POST['data'])){
  3.  
  4. $twitch_live = false;
  5. $twitch_live_v = 0;
  6. $twitch_live_t = '';
  7. $twitch_live_g = '';
  8. //---------------------
  9. $gamecreds_live = false;
  10. $gamecreds_live_v = 0;
  11. $gamecreds_live_t = '';
  12. $gamecreds_live_g = '';
  13. //------------
  14. $wyswietl = '';
  15. $razem = 0;
  16. //pobieranie danych gamecreds
  17. $json_array = json_decode(file_get_contents('https://api.dailymotion.com/videos/?ids=kod&fields=title,genre,onair,tag,audience&limit=25'), true);
  18. if($json_array['list'][0]['onair'] == true){
  19. $gamecreds_live = true;
  20. $gamecreds_live_v = $json_array['list'][0]['audience'];
  21. $gamecreds_live_t = $json_array['list'][0]['title'];
  22. $gamecreds_live_g = $json_array['list'][0]['tag'][1];
  23. }
  24. //pobieranie danych twitch
  25. $json_array2 = json_decode(file_get_contents('https://api.twitch.tv/kraken/streams/nick'), true);
  26.  
  27. if ($json_array2['stream'] != NULL) {
  28. $twitch_live = true;
  29. $twitch_live_v = $json_array2['stream']['viewers'];
  30. $twitch_live_t = $json_array2['stream']['channel']['status'];
  31. $twitch_live_g = $json_array2['stream']['channel']['game'];
  32.  
  33. }
  34.  
  35. if($twitch_live == true || $gamecreds_live == true){
  36. $razem = $twitch_live_v + $gamecreds_live_v;
  37. $wyswietl = '
  38. <div id="live-header-on">
  39. '.$razem.'</div>';
  40. }
  41.  
  42.  
  43. if($twitch_live == false && $gamecreds_live == false){
  44. $wyswietl = '
  45. <div id="live-header-off"></div>';
  46. }
  47.  
  48. echo $wyswietl;
  49.  
  50. }
  51. ?>


Czy przyczyną obciążenia jest źle zrobiony kod, czy słaby serwer lub z jakimiś ograniczeniami?
llukasz
Ja bym jakoś te pobrane z zewnątrz dane zapisał lokalnie w bazie lub w pliku i potem ewentualnie aktualizował co jakiś czas
patryk20120
Też można, ale problem w tym, że nie wiem jak zrobić skrypt, który będzie odpalał się tylko i wyłącznie co np. 20 sekund. Ponieważ jak zrobie go w aktualizuj.php i ktoś w niego wejdzie to będzie aktualizowało dane do bazy. To samo jak go "zaincluduje" do index.php, też bedzie się odpalał za każdym razem jak ktoś wejdzie na strone.
ssstrz
a nie mozesz cacheowac pobranych danych (JSON) gdzies na serwerze bo pewnie to zamula?
jackraymund
Cytat(patryk20120 @ 31.08.2013, 18:36:11 ) *
Też można, ale problem w tym, że nie wiem jak zrobić skrypt, który będzie odpalał się tylko i wyłącznie co np. 20 sekund. Ponieważ jak zrobie go w aktualizuj.php i ktoś w niego wejdzie to będzie aktualizowało dane do bazy. To samo jak go "zaincluduje" do index.php, też bedzie się odpalał za każdym razem jak ktoś wejdzie na strone.

Poczytaj o cron
jest to program który uruchamia skrypt w określonych momentach czasu,
więc jeżeli masz dostęp do crona to możesz odpalić co 20sekund, a dane wpisać do bazy, i wyczytywać je w ajaxie
patryk20120
Cytat(jackraymund @ 2.09.2013, 09:46:39 ) *
Poczytaj o cron
jest to program który uruchamia skrypt w określonych momentach czasu,
więc jeżeli masz dostęp do crona to możesz odpalić co 20sekund, a dane wpisać do bazy, i wyczytywać je w ajaxie


Własnie ostatnio to znalazłem, ale mój serwer na którym chciałbym postawić skrypt tego nie obsługuje ;(
jackraymund
to zrób alternatywe w indexie biggrin.gif ajax zapytanie do skryptu, skrypt robi zapytanie w bazie, w której trzymasz tylko timestamp i czy jest aktualnie wykonywany skrypt

czyli index
zapytanie do bazy czy jest wykonywany skrypt i czy data w bazie jest o 20 sekund starsza od aktualnej
wtedy wyrysuj ajaxa na strone,

w ajaxie
to samo zapytanie, czy jest wolny i czy data w bazie jest o 20 sekund starsza od aktualnej
jezeli nie jest wolny
ustawiasz status na pracujacy
uruchamiasz twoj skrypt do aktualizacji
potem tylko ustawiasz aktualna date i status wolny
+ kilka małych usprawnień powinieneś też dodać
patryk20120
Faktycznie, takie proste rozwiązanie, że nawet mi do głowy nie przyszło. Dzięki wielki.
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.