2010-10-08 6 views
5

tengo este requisito:Web: El sistema registrará la cantidad de tiempo que el usuario visualiza cada página

El sistema registrará la cantidad de tiempo que el usuario visualiza cada página.

Aunque es trivial en una aplicación de cliente enriquecido, no tengo idea de cómo la gente suele hacer un seguimiento de esto.

Editado: Por John Hartsock

Siempre he tenido curiosidad por esto y Me parece que esto podría ser posible con el uso de eventos document.onunload, con precisión caputure estrellas y parada para todos páginas. Básicamente, siempre que un usuario permanezca en su sitio, siempre podrá obtener el inicio y el final de cada página, excepto la última. Aquí está el escenario.

  • El usuario ingresa a su sitio. - Se me hace inicio de la página principal
  • usuario va a la página 2 de su sitio - que tienen un tiempo de parada de la página de inicio y una hora de inicio de la página 2
  • usuario sale de su sitio. - ¿Cómo se obtiene el tiempo de final de parada para la página 2

La pregunta es ¿es posible rastrear cuando un usuario cierra la ventana o navega fuera de su sitio? ¿Sería posible usar los eventos onunload? Si no, ¿cuáles son algunas otras posibilidades? Claramente, AJAX sería una ruta, pero ¿cuáles son algunas otras rutas?

Respuesta

5

No creo que pueda capturar todas las páginas vistas, , pero creo que es posible que pueda capturar suficiente información para que valga la pena analizar el uso del sitio web.

Cree una tabla de base de datos con columnas para: nombre de la página web, nombre de usuario, hora de inicio y hora de finalización.

En la carga de la página, INSERTE un registro en la tabla que contiene datos para los primeros tres campos. Devuelva la identificación de ese registro para uso futuro.

En cualquier navegación, ACTUALICE el registro en el controlador de eventos de navegación, utilizando la ID devuelta anteriormente.

Usted va a terminar con muchos más registros con horas de inicio de los registros con tanto tiempo de inicio y fin. Sin embargo, se puede hacer estos análisis de este sencillo de datos:

  • puede contar el número de visitas a cada página contando las horas de inicio.
  • Puede calcular la cantidad de tiempo que el usuario ha mostrado cada página para los registros que tienen tanto tiempo de inicio como de finalización.
  • Si tiene otra información sobre usuarios, como roles o ubicaciones, puede hacer más análisis de visualización de páginas. Por ejemplo, si conoce roles, puede ver qué roles usan más páginas.

Es posible que sus datos se distorsionen por el hecho de que algunas páginas se abandonan con más frecuencia que otras.

Sin embargo, ciertamente puede intentar capturar esta información y ver qué tan razonable parece. A veces, en el mundo real, tenemos que hacerlo debido a la falta de información perfecta. Pero eso puede ser suficiente.


Editar: Cualquiera de estos enfoques podría satisfacer sus necesidades.

1) Aquí está la parte HTML de Solución Ajax. Es de this page, que tiene un código PHP para registrar la información en un archivo de texto, lo suficientemente fácil como para pasar a escribir en una base de datos si lo desea.

<html> 
<head> 
<title>Duration Logging Demo</title> 
<script type=”text/javascript”> 
var oRequest; 
var tstart = new Date(); 

// ooooo, ajax. ooooooo … 
if(window.XMLHttpRequest) 
oRequest = new XMLHttpRequest(); 
else if(window.ActiveXObject) 
oRequest = new ActiveXObject(“Microsoft.XMLHTTP”); 

function sendAReq(sendStr) 
// a generic function to send away any data to the server 
// specifically ‘logtimefile.php’ in this case 
{ 
oRequest.open(“POST”, “logtimefile.php”, true); //this is where the stuff is going 
oRequest.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”); 
oRequest.send(sendStr); 
} 

function calcTime() 
{ 
var tend = new Date(); 
var totTime = (tend.getTime() – tstart.getTime())/1000; 
msg = “[URL:" location.href "] Time Spent: ” totTime ” seconds”; 
sendAReq(‘tmsg=’ msg); 
} 
</script> 
</head> 

<body onbeforeunload=”javascript:calcTime();”> 
Hi, navigate away from this page or Refresh this page to find the time you spent seeing 
this page in a log file in the server. 
</body> 
</html> 

2) Another fellow propone la creación de un temporizadoren Page_Load. Escriba el registro inicial de la base de datos en ese punto. Luego, en el evento del temporizador Elapsed, haga una actualización de ese registro. Haga una actualización final en onbeforeunload. Luego, si por alguna razón se pierde el último evento onbeforeunload, al menos habrá grabado la mayor parte del tiempo que el usuario pasó en la página (según el temporizador Interval). Por supuesto, esta solución requerirá muchos recursos si actualiza cada segundo y tiene cientos o miles de usuarios simultáneos. Por lo tanto, podría hacer que sea configurable que esta característica se active y desactive para la aplicación.

+0

¿El "controlador de eventos de navegación" está disponible en JavaScript? (Lo siento, soy programador de Windows. No trabajo muy a menudo en la Web.) –

+0

@Jonathan Allen: Utilicé el "controlador de eventos de navegación" como un término general para una serie de eventos que incluyen cosas como un clic de botón o un clic de hipervínculo que lleva al usuario a otra página. Esto podría ocurrir en un menú. Cada vez que el usuario hace clic en algo que navega a otra página, está abandonando la página actual. En ese momento, puede capturar el tiempo que dejaron la página y grabarla. Si tiene enlaces que consisten en etiquetas de anclaje, es posible que tenga que cambiarlas a LinkButtons para que pueda capturar el evento en el lado del servidor. – DOK

+0

el "controlador de eventos de navegación" puede ser javascript. Un buen candidato es window.unload. – Guillaume

1

En un sistema basado en web, no hay forma de hacerlo de manera confiable. Claro, puede registrar cada página que muestra un usuario y registrar el período de tiempo entre cada vista, pero ¿qué ocurre cuando cierran el navegador en la última página en la que se muestran? Esa es solo una de las docenas de problemas con este requisito.

+0

Considerando sus métricas, creo que la fiabilidad no es importante. –

+0

@Jonathan - Sí, ¿quién basa las decisiones comerciales en métricas o hechos precisos? No es como si fueran útiles ni nada de eso. –

+1

Existen muchas soluciones existentes que registran este tipo de datos. Mientras los usuarios no desactiven javascript, puede obtener una confiabilidad bastante buena. Y para la mayoría de los sitios, este es un porcentaje bastante pequeño. – Guillaume

1

¿Qué tal un enfoque basado en AJAX? Solo funcionaría cuando Javascript esté en el lado del cliente, pero enviar un POST a un script cada 15 segundos le dará una cantidad razonable de granularidad.

También hay cosas más complicadas de "AJAX inverso" que podría hacer ... pero no sé mucho sobre ellas.

+0

No lo sé. 15 segundos no es muy granular, y cualquier cosa menos causará demasiada volatilidad en la base de datos a menos que construya algún tipo de escritor diferido ... –

2

Esto tiene que hacerse con algunos javascript. Como dijo el otro, no es completamente confiable. Pero debería poder obtener datos exactos más que suficientes.

Esto necesitará llamar a su servidor desde el código de javascript cuando la página esté descargada. El evento javascript para enganchar es window.unload. O puede usar una API más agradable, como jQuery. O puede utilizar una solución preparada, como WebTrends, o Google Analytics. Creo que ambos registran el tiempo que se muestra la página.

Buen análisis web es bastante difícil. Y se vuelve más difícil si tiene que administrar mucho tráfico. Debería intentar encontrar una solución existente y no reinventar la suya ...

+0

aunque no se especifique aquí, tal vez este sea un caso extremo, uno donde el uso del el sitio web será un navegador de solo texto, o un dispositivo de asistencia. ¿cómo funciona la solución solo javascript en ese caso? dado que el OP indicaba que un mundo cliente rico no era su dominio, esto no parece estar muy lejos de su mundo. – KevinDTimm

1

Puede usar onunload para hacer lo que necesita. Haga que envíe una solicitud AJAX a su servidor para actualizar una base de datos. Es posible que desee devolver el mensaje falso y luego el documento.close una vez que la solicitud AJAX haya finalizado de manera que no se cierre prematuramente y el ajax no se descarte.

En la base de datos, solo querrá guardar la página, la dirección IP, la hora del evento y si se trata de un evento onload o onunload.

Eso es todo lo que hay.

2

He puesto algo de trabajo en una pequeña biblioteca de JavaScript que mide el tiempo que un usuario está en una página web.Tiene el beneficio adicional de hacer un seguimiento más preciso (aunque no perfectamente) del tiempo que un usuario realmente está interactuando con la página. Ignora el tiempo que un usuario cambia a diferentes pestañas, se queda inactivo, minimiza el navegador, etc. El método de Google Analytics sugerido tiene el inconveniente (según tengo entendido) de que solo verifica cuando su dominio maneja una nueva solicitud. Compara el tiempo de solicitud anterior con el nuevo tiempo de solicitud y lo llama el "tiempo pasado en su página web". En realidad, no sabe si alguien está viendo su página, ha minimizado el navegador, ha cambiado las pestañas a 3 páginas web diferentes desde la última vez que cargó su página, etc.

Como han mencionado otros, ninguna solución es perfecta. Pero con suerte, este también proporciona valor.

Editar: He actualizado el ejemplo para incluir el uso actual de la API.

http://timemejs.com

Un ejemplo de su uso:

incluir en su página:

<script src="http://timemejs.com/timeme.min.js"></script> 
<script type="text/javascript"> 
TimeMe.initialize({ 
    currentPageName: "home-page", // page name 
    idleTimeoutInSeconds: 15 // time before user considered idle 
}); 
</script> 

Si desea informar de las veces usted mismo a su base de:

xmlhttp=new XMLHttpRequest(); 
xmlhttp.open("POST","ENTER_URL_HERE",true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
xmlhttp.send(timeSpentOnPage); 

TimeMe.js también admite el envío de datos de temporización a través de websockets, por lo que no tiene que intentar forzar una solicitud http completa en el evento document.onbeforeunload.

Cuestiones relacionadas