Een pagina op mijn website is afhankelijk van 3 APIs en dat maakt de pagina nou niet bepaald snel. (+/- 5 sec) Nu was mijn idee, als dat mogelijk is om de API calls in de achtergrond te laten uitvoeren omdat ik de respons toch niet nodig heb.
Maar hoe?
Ik had dit al gevonden en dat is eigenlijk exact wat ik zoek. Maar bij dit script wordt soms de API call niet uitgevoerd.
Beetje te gevaarlijk bij APIs aangezien deze met private keys e.d. werken. En als de gebruiker weg klikt omdat de pagina geladen is worden de APIs alsnog niet uitgevoerd.
Gewoon met jQuery een PHP pagina aanroepen na het laden. Als die geladen is data terugsturen en die op de webpagina weergeven. De privatekeys zitten dan in de PHP file.
Kan je met AJAX niet gewoon iets naar een bestand van je eigen site posten, in dat bestand doe je met php een api request oid?
Wouterr schreef:
Gewoon met jQuery een PHP pagina aanroepen na het laden. Als die geladen is data terugsturen en die op de webpagina weergeven. De privatekeys zitten dan in de PHP file.
Zoals ik al eerder vermelde, dat is totaal niet veilig omdat gebruikers dan gewoon de benodigde vars kunnen lezen. Overigens is het geen optie want dan is de pagina direct geladen en als ze binnen die +/- 5 seconde laad tijd weer weg zijn wordt de actie abrupt afgebroken.
Het moet echt server sided.
@Lennard; Mmh, is een optie maar niet echt ideaal.
Bij APIs is het volgens mij vaak zo dat je inderdaad met wat Response tijd zit. Echter is de request tijd vaak helemaal niet zo hoog. Je zou dus best via ajax 3 verschillende requests doen naar APIs en zolang de Response niet belangrijk is, wat ik uit jouw verhaal opmaak, maakt de response tijd dus niet uit. Je moet ervoor zorgen dat de gebruiker lang genoeg op de pagina is om de 3 requests te versturen, dit kan je tegelijk doen dus kost vrijwel geen tijd. De gebruiker kan dus wegklikken wat hij wil maar de request is al verstuurd dus de API heeft de data al ontvangen
Nee, nogmaals. De variables kan je in de PHP files inladen, die hoeven niet via javascript.
Kan, met grove omwegen aangezien de tekst o.i.d niet telepatisch gelezen kan worden door het bestand dat wordt aangeroepen via Ajax. Tevens blijft het onveilig, een open en blote link naar een bestand dat dingen verwerkt. (betaal verkeer in dit geval)
Inmiddels het probleem gevonden, ik host op NginX met Fast CGI aan die ignore_user_abort(1) standaard negeert. ignore_user_abort(1) zorgt ervoor dat het aangeroepen script door gaat als de verbinding wordt afgekapt wat het bovenstaande script direct doet. Met een simpele parameter in het config bestand van NginX was het opgelost en werkt ignore_user_abort(1).
@Eleky, nee hoor. Zodra de browser wordt weg geklikt stopt het aangeroepen PHP bestand ook direct. Anders zou ik hier geen post maken aangezien het bovenstaande script een socket aanmaakt naar het script en gelijk weer afkapt. Precies hetzelfde als de browser zou doen in Ajax.
Als je zeker wilt weten dat het volledig geladen wordt zonder het gewoon standaard op de pagina te zetten is een cronjob volgens mij de enige mogelijkheid
Je kan er hele lappen tekst over uitwijden, maar blijkbaar wil je dus dat de request door PHP wordt uitgevoerd.
Dan heb je 2 opties: 1. bij de pageview dat stukje PHP uitvoeren; 2. na de pageview dat stukje PHP uitvoeren.
Optie 1 doe je door direct in je bestand zelf die code te plakken. Maar dat wilde je dus niet, dus zul je voor optie 2 moeten gaan: cronjob. Ik snap niet waarom je dat niet gewoon doet? Das de makkelijkste optie lijkt me.
Je zou nog kunnen kutten met output buffers en dan de code tegelijk met de oorspronkelijke pageview laten uitvoeren, maar daar kun je beter niet aan beginnen.
Het probleem met een cronjob is dat het afhankelijk is van minuten en het gaat om een push functie. Beetje dubbelzinnig aangezien de bedoeling van push direct afleveren is.
Ik merk nu vaak dat gebruikers al wegklikken voordat alle APIs klaar zijn.
Ik dacht in mijn vorige post de oplossing gevonden te hebben maar dat is toch niet het geval, mijn hoster blokkeert de functie om zombie processen te voorkomen.
Ik denk dat ik toch maar met cronjobs moet gaan werken helaas.
Als je een cronjob elke minuut laat lopen heb je volgens mij een verwaarloosbaar verschil hoor. Of ik nu direct een push bericht krijg of over een minuut maakt niet zoveel uit
Als je een cronjob elke minuut laat lopen heb je volgens mij een verwaarloosbaar verschil hoor. Of ik nu direct een push bericht krijg of over een minuut maakt niet zoveel uit
Dit inderdaad.
Veel APIs hebben sowieso een call-limiet per uur ofzo. Dus wat dat betreft is dit ook een goede optie.
Zowat elke push app maakt hier gebruik van. Facebook kijkt bijvoorbeeld om de X minuten naar nieuwe notificaties. Tweetdeck / twitter doen exact hetzelfde.
À‰chte realtime notificaties zijn vrijwel onmogelijk.
Jouw reactie
Deel je idee, stel een vraag of help een ander verder.