Foros del Web » Programando para Internet » ASP Clásico »

Visitas Reales concluidas (mejorar codigo)

Estas en el tema de Visitas Reales concluidas (mejorar codigo) en el foro de ASP Clásico en Foros del Web. Hol@ ya terminé de realizar el código para contar las visitas reales que tengo en mi web, almacenando éstas en una BD desde el mismo ...
  #1 (permalink)  
Antiguo 10/04/2003, 12:41
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Visitas Reales concluidas (mejorar codigo)

Hol@ ya terminé de realizar el código para contar las visitas reales que tengo en mi web, almacenando éstas en una BD desde el mismo GLOBAL.ASA:

Tengo esto en on_sessionstart()...

' ~~~~ Guardamos las visitas en la BD ~~~~
Application.Lock()
IP = Request.ServerVariables( "REMOTE_ADDR" )
Software = Request.ServerVariables( "HTTP_USER_AGENT" )
Procedencia = Request.ServerVariables( "HTTP_REFERER" )
Lenguaje = Request.ServerVariables( "HTTP_ACCEPT_LANGUAGE" )
URL = Request.ServerVariables( "URL" )
Fecha = date()
Hora = time()
a = "MI IP"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("ConexionContadores")

IF IP <> a THEN
SQLQuery1 = " INSERT INTO Visitantes (IP, Software, Procedencia, Lenguaje, URL, Fecha, Hora) VALUES ('"&IP&"', '"&Software&"', '"&Procedencia&"', '"&Lenguaje&"', '"&URL&"', '"&Fecha&"', '"&Hora&"') "
Conn.EXECUTE(SQLQuery1)
END IF
SQLQuery2 = " SELECT Max(Id) AS Total FROM Visitantes "
Set RS = Conn.EXECUTE(SQLQuery2)
Session("Visitas") = rs("total")

RS.Close
Conn.Close
Application.Unlock()


Lo ven correcto? ven la manera de simplificar o mejorar algo para acelerar su velocidad en la web?
Tengo mis sospechas de los application.lock y unlock que he colocado, puesto que no se si son correctos en esas posiciones.

yo mismo he abierto mi pagina web muchas veces seguidas (tantas he podido a la vez) y los datos en la tabla se repiten!, llegan incluso a entrar de 3 en 3 usuarios...
pasa de 3...4...5...8...11...


Agradecería todo comentario o mejora y ya agradezo haber leido chic@s.

Salu2!
  #2 (permalink)  
Antiguo 10/04/2003, 13:52
Avatar de Henry Zapata  
Fecha de Ingreso: abril-2001
Mensajes: 125
Antigüedad: 23 años, 2 meses
Puntos: 0
Hola:

- El uso de Application.Lock() está demás porque no estas modificando ninguna variable del tipo aplicación.

- El número de visitas lo deberias de guardar en una variable del tipo aplicación porque es el mismo valor para todos los usuarios.

- Para el caso anterior sí es necesario usar el Application.Lock ya que modificarás una variable de aplicación.

Application.Lock()
application("Visitas") = application("Visitas") + 1
Application.unLock()

- El número de visitas ya lo tienes en una variable de aplicación por lo tanto no es necesario hacer una consulta a BD.

saludos!!

Última edición por Henry Zapata; 10/04/2003 a las 13:54
  #3 (permalink)  
Antiguo 10/04/2003, 15:07
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Hola:

Con tu respuesta observo que te refieres a hacer un contador de visitas sin BD, para mi si es necesario toda la conexión con la BASE DE DATOS, quiero guardar todo en ella, no tenerlo en el servidor hasta que reinicie y volver a empezar de 0....

en cuando al application.lock() y unlock() sobra pues realmente?

Algo más puede ser mejorado en el código en sí, referente a mi código y mi observacion¿?


Agradecido a todos.

Si alguien da alguna idea // mejora // comentario más será agradecida.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...

Última edición por Fr@Nc3$c0; 10/04/2003 a las 15:28
  #4 (permalink)  
Antiguo 10/04/2003, 19:47
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años, 1 mes
Puntos: 7
Me intriga tu...

SQLQuery2 = " SELECT Max(Id) AS Total FROM Visitantes "
Set RS = Conn.EXECUTE(SQLQuery2)
Session("Visitas") = rs("total")

ya que con ello no tienes ni el numero total de visitantes ni cuantos se encuentran conectados, solo tienes el maximo ID generado.

Para obtener el numero de visitantes mediante ese procedimiento deberias usar COUNT(*) pero no seria exacto... a no ser que hagas un DELETE cuando el usuario se des-loguee o deje el site.

Si no, tendrias que hacer Application("visitas")=Application("visitas")+1 en el Session_OnStart y restar 1 en el Session_OnEnd...
(y en el Sess
__________________
No tengo firma ahora... :(
  #5 (permalink)  
Antiguo 11/04/2003, 07:28
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Dos cosas:

Estamos hablando de visitas reales, las cuales no tienen porque descontarse al irse el usuario porque es un contador de las personas que han entrado en la web durante su existencia.

En cuanto a la consulta :

- Me informé y Max(CAMPO) te devuelve el valor más elevado de una fila, numerica en mi caso, de la tabla. y lo pongo en una variable directamente con AS TOTAL.
El count(CAMPO) totalmente de acuerdo contigo, sirve para contar, no solo numericos sino que registros en una fila entera de una tabla.

Ambos sirven, ambos los he probado.
Pero a la hora de acelerar la sentencia pusé el MAX porque pensé que tarda menos en ir al último registro (porque la fila es autonumerica) y coger el numero mas alto, que count, que cuenta uno a uno cuantos registros hay.

Salu2! y gracias por el comentario.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:48.