Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

 

Έχω ε΄να θεματάκι με το json στην σελίδα που φτιάχνω....

Προσπαθώ να πάρω τις απαραίτητες πληροφορίες από twitch.tv & own3d.tv.

 

Ενώ έχω φτιάξει τις απαραίτητες συναρτήσεις σε php και δουλεύουν σωστά, μόλις πάει να φορτώσει η σελίδα με τα καταχωρημένα streams αργεί πααάρα πολύ... μέχρι και το αντίστοιχο error μου βγάζει μερικές φορές : Fatal error: Maximum execution time of 30 seconds exceeded in

 

Υπάρχει κάποιος άλλος τρόπος να πάρω πληροφορίες για ένα stream? Ή κάποιος άλλος τρόπος για να τις αντλήσω από το api?

 

Εάν θέλετε να παραθέσω κώδικα ή κάποια άλλη πληροφορία, απλά ζητήστε το.

Δημοσ.

Αν προσπαθείς κάθε φορά που εμφανίζεται η σελίδα σου να πάρεις τις πληροφορίες για το τι θα δείξεις μέσα από πολλαπλά API calls (HTTP δηλαδή) σε "τρίτες" σελίδες τότε αυτό που συμβαίνει είναι αναπόφευκτο.

 

Ένας ρεαλιστικός τρόπος να δουλεύεις σε τέτοιες περιπτώσεις είναι:

  1. Να κρατάς μια cache σε δική σου database με τις πληροφορίες που σου χρειάζονται.
  2. Να εμφανίζεις στη σελίδα σου μόνο τις πληροφορίες που ήδη έχεις καταχωρημένες στην cache (γι' αυτές που δε γνωρίζεις ακόμα ή που έχουν κάνει expire, εμφάνισε ένα loading animation).
  3. Μαζί με τη σελίδα να στέλνεις και κατάλληλη HTML + JS ούτως ώστε μόλις φορτώσει σε πρώτη φάση να κάνει AJAX calls πίσω στον server σου για να πάρει όλες αυτές τις πληροφορίες που δεν είναι διαθέσιμες ήδη.
  4. Ο server σου βλέπει αυτές τις AJAX request, κάνει με τη σειρά του API call στους upstream providers, αποθηκεύει τα αποτελέσματα στην cache (ούτως ώστε στο επόμενο reload να μη ξαναχρειαστεί η ίδια δουλειά) και στέλνει κατάλληλη πληροφορία πίσω στη σελίδα σου.
  5. Η σελίδα σου παίρνει την απάντηση του server και αντικαθιστά τα loading animations κλπ με την πραγματική πληροφορία.

Μ' αυτό τον τρόπο η σελίδα σου θα φορτώνει άμεσα από τον server και τα τμήματα πληροφορίας που δεν είναι επιτόπου διαθέσιμα θα συνεχίσουν να φορτώνουν σταδιακά.

 

Υπάρχουν πάρα πολλές επιπλέον βελτιστοποιήσεις που θα μπορούσαν να γίνουν αλλά ξεκίνα πρώτα υλοποιώντας τη βασική ιδέα.

Δημοσ.

Πως θα στήσω μια cache που να τρέχει από πίσω ώστε να αποθηκεύει τα δεδομένα χωρίς να μπλοκάρει την σελίδα?

Είναι πολύ καλή ιδέα! Σε ευχαριστώ πολύ!

 

Απ' ότι κατάλαβα θα δημιουργήσω ένα table στην database μου αλλά δεν ξέρω πως να την κάνω να τρέχει στο background.

 

Και πάλι σε ευχαριστώ για την απάντηση.

Δημοσ.

Δε χρειάζεται σε πρώτη φάση να στήσεις cache που να τρέχει από πίσω. Καλύτερα να ξεκινήσεις με κάτι πιο απλό: χρησιμοποίησέ την στα πλαίσια του pipeline που ήδη έχεις.

 

Κάνε ένα table στη database. Μετά, αν υποθέσουμε ότι έχεις (αν δεν έχεις, κάνε) μια function που λέει κάτι του στυλ

 

>
function getStreamDetails($whatever) {
return $someApi->makeSomeCall($whatever);
}

 

θα πρέπει να βάλεις στη διαδικασία και την cache, κάπως ως εξής¹:

 

>
function getStreamDetails($whatever, $onlyCached = false) {
$details = /* διάβασε τα δεδομένα από το database table αν υπάρχουν και είναι πρόσφατα */
if (/* δεν υπήρχαν δεδομένα ή είναι παλιά */ && $onlyCached) {
 return null;
}

$details = $someApi->makeSomeCall($whatever);
// εδώ αποθηκεύεις τα φρέσκα δεδομένα στην cache
return $details;
}

 

Όταν η σελίδα σου φορτώνει θα καλείς την getStreamDetails με $onlyCached = true ούτως ώστε να μην καθυστερείς. Αν σου επιστρέψει null τότε θα εμφανίζεις στην HTML το loading animation που λέγαμε και μετά θα κάνεις AJAX request. Όταν η getStreamDetails κληθεί στα πλαίσια του AJAX request, θα είναι $onlyCached = false.

 

Το πώς θα αποθηκεύσεις τα δεδομένα στη database είναι άλλο καπέλο. Πιθανότατα θα σε βολέψει να έχεις ένα TEXT column και να βάζεις/βγάζεις τα δεδομένα απ' αυτό με json_encode και json_decode.

 

 

¹ Ο κώδικας που δίνω είναι καθαρά για να καταλάβεις τα βήματα που πρέπει να γίνουν και τη σειρά τους. Από άποψης δόμησης του software είναι τρα-γι-κος. Μη τον χρησιμοποιήσεις σαν αναφορά για το πώς δομείται σωστά ένα παρόμοιο σύστημα.

Δημοσ.

Τελικά έλυσα το πρόβλημα!

Χρησημοποίησα cronjobs από τον σέρβερ και κανω update δεδομένα στην database κάθε 5 λεπτά.

Σας ευχαριστώ όλους για την βοήθεια!Αν δεν μου είχατε προτείνει αυτές τις ιδέες δεν θα το έβρισκα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...