2012-04-02 11 views
0

Wir machen eine Online-Umfrage, so wollen wir die verbrachte Zeit berechnen. Mit Javascript und PHP haben wir festgestellt, dass die Zeit nicht 100% genau ist.AJAX Zeit auf einer Website verbracht

Das ursprüngliche Skript sendet alle 5 Sekunden Serveranforderungen und aktualisiert die Zeit in der Datenbank.

Ich machte eine Recherche und entdeckte SetTimeOut und setInterval sind überhaupt nicht genau. Also, was ist der beste Weg, das zu tun?

Ich ersetzte die Ping-Funktion durch eine andere, die den Unterschied zwischen vorherigen Paket Zeitstempel und now() berechnet; aber es ist überhaupt nicht korrekt.

Bitte beraten Sie, wenn es andere Lösungen für das beschriebene Problem gibt.

Antwort

2

Warum hören Sie nicht auf 'onunload' Ereignis des Dokuments und senden Sie eine einzelne Nachricht, um zu wissen, wann ein Benutzer Ihre Seite verlässt. Bedenken Sie; Wenn ein Benutzer beginnt, Ihren Server zu füllen, senden Sie eine Nachricht, und wenn er Ihre Seite verlässt, senden Sie eine andere und messen die Zeit zwischen diesen Nachrichten, um die Gesamtzeit zusammenzufassen

+0

es ist keine robuste Lösung tho .... – RomanG

2

Ich stelle mir die meisten Implementierungen von setTimeout und setInterval wird auf mindestens der von Ihnen angegebenen Zeit festgelegt. Wenn Sie genau wissen möchten, wie lange der Browser geöffnet ist, verwenden Sie die Datumsfunktionen von javascript, um sie auf der Client-Seite zu berechnen und dann an den Server zu senden.

0

Wenn Sie alle 5 Sekunden eine Anforderung an den Server senden möchten, können Sie die aktuelle Uhrzeit (unter Verwendung von new Date().getTime()) in der Anforderung senden, die vom Client an den Server gesendet wird.

Speichern Sie die Zeit, die die erste Anfrage in der Datenbank gesendet wurde. Dies ist der Zeitpunkt, zu dem der Benutzer die Umfrage gestartet hat.

Wenn jedes nachfolgende Paket ankommt, subtrahieren Sie die Zeit, die die erste Anfrage gesendet wurde, um die Gesamtzeit zu ermitteln, die der Benutzer bisher für die Umfrage aufgewendet hat. Wenn der Benutzer auf die Schaltfläche klickt, um die Umfrage zu beenden, können Sie eine letzte Anfrage senden, in der angegeben wird, dass die Umfrage abgeschlossen ist.

Sie können auch Anfragen zu Dokumentenunschärfe und Fokusereignissen senden. Diese Ereignisse werden verfolgt, wenn der Benutzer die Seite verlässt und zu Ihrer Seite zurückkehrt, ohne die Seite zu schließen.

+0

Ich habe die Art geändert, wie es jetzt funktioniert. – RomanG

+0

Senden Sie den Ping alle 5 Sekunden. Für das erste Paket speichern wir die Anfangszeit und aktualisieren dann die Zeit basierend auf einer Zeitdifferenz. Wenn der Zeitunterschied größer als 20 Sekunden ist, würde das bedeuten, dass der Benutzer das Fenster geschlossen hat und dann den Test wieder aufnimmt (sagen wir 10 Tage später), also fügen wir Standard 5 Sekunden hinzu, ansonsten fügen wir einen tatsächlichen Unterschied hinzu – RomanG

Verwandte Themen