Compteur de temps de présence

Compteur de temps de présence - Divers - Programmation

Marsh Posté le 16-05-2019 à 10:02:12    

Bonjour,
 
J'ai une plateforme où j'aimerais avoir le temps de présence des personnes connectées, pour chaque connexion faites.
 
J'ai fait pour ça un compteur javascript qui:
- Lors de l'arrivée sur une page du site, lance en ajax un script PHP qui va chercher en BDD le temps déjà passé grâce à l'ID de session
- Toutes les 5s, un autre script PHP est lancé, mettant à jour l'enregistrement avec donc +5s de temps
 
Dans le principe ça fonctionne sans problème.
 
Ma question se trouve au niveau de "l'efficacité" de la chose. A savoir que ça fait faire un nombre de requêtes qui peut rapidement monter si j'ai plusieurs personnes connectées en même temps.
 
Bref, est-ce qu'il faut procéder de la sorte, ou bien y'a-t-il des méthodes bien meilleurs?
 
Merci!

Reply

Marsh Posté le 16-05-2019 à 10:02:12   

Reply

Marsh Posté le 16-05-2019 à 14:29:55    

En théorie, utiliser la méthode unload de la page serait tout aussi efficace et moins couteux pour le serveur, mais dans les faits, les scripts se contente souvent d'enregistrer chaque nouvelle page et d'en déduire le temps passé sur la page précédente...
Les 2 solutions loin d'être 100% fiable mais ce genre de prise de données ne doit, à mon avis, jamais brider la performance (que ce soit celle du serveur ou du client).


---------------
D3
Reply

Marsh Posté le 16-05-2019 à 15:36:51    

C'est juste pour éviter de trop brider la performance serveur que je n'enregistre le temps que toutes les 5s (c'est suffisant pour l'utilité que ça a ensuite).
Je vais tester avec onload et unload pour voir si c'est efficace. Merci!

Reply

Marsh Posté le 16-05-2019 à 16:01:23    

Le onload (tous les éléments chargé) sera toujours plus en retard que le onready (chargement du fichier html et DOM crée), lui même en retard sur une exécution javascript dans le head de la page...
Mais bon on parle millisecond sur une page de taille correct avec une bonne bande passante.
 
Pour le unload, j'utiliserais l'event beforeunload qui est très bien supporté.


---------------
D3
Reply

Marsh Posté le 19-05-2019 à 16:59:38    

Merci beaucoup pour toutes ces informations, je n'ai pas encore eu le temps de tester mais il est certain que je vais l'utiliser dans mon projet.
 
Concernant les histoires de retard d'une fonction par rapport à une autre, actuellement j'enregistre toutes les 5s, alors c'est pas quelques ms qui vont me déranger, loin de là. :)

Reply

Marsh Posté le 19-05-2019 à 18:20:58    

Moi je ferai tout par PHP.
Création d'une session lors de l'arrivée du visiteur, on y enregistre l'heure et la page demandée. Sur chaque nouvelle requête on enregistre l'heure et on déduit le temps passé sur la page précédente en vérifiant avec la variable globale $_SERVER['HTTP_REFERER'] que la nouvelle requête reçue provient bien de la page précédente.
On élimine les requêtes Ajax en les identifiant.

 

Les données du temps passé sur la dernière page seront faussées puisqu'elles ne seront pas enregistrées. Mais de toute manière elles seront toujours faussées, tu ne peux jamais vérifier si la personne n'a pas juste laissé son onglet ouvert.

 

La méthode uniquement par PHP permet de soulager le serveur et donnera un résultat approximatif mais quelque soit la méthode utilisée, le résultat restera approximatif.


Message édité par MaybeEijOrNot le 19-05-2019 à 18:21:35

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 20-05-2019 à 09:18:18    

J'avais aussi pensé à cette méthode pendant un temps, mais sur certaines pages une personne peut rester connectée parfois 1-2h de temps, puis juste fermer son navigateur au lieu d'utiliser la fonction de déconnexion.
Du coup là on perd quand même toute la durée de toute dernière connexion, et donc sans être pile-poil comme il faut ça pourrait amener à une différence significative à la baisse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed