Foros del Web » Programando para Internet » PHP »

Conexion Singleton con AJAX

Estas en el tema de Conexion Singleton con AJAX en el foro de PHP en Foros del Web. Hola amigos! Bueno, mi pregunta viene apartir de éste tema: patron-diseno-singleton-con-ajax , sólo que no quise publicar en el mismo para no quitar espacio al ...
  #1 (permalink)  
Antiguo 07/09/2016, 16:13
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 9 años
Puntos: 20
Conexion Singleton con AJAX

Hola amigos!
Bueno, mi pregunta viene apartir de éste tema: patron-diseno-singleton-con-ajax, sólo que no quise publicar en el mismo para no quitar espacio al compañeron o inflingir reglas del foro
Yo tengo una clase de conexión parecida a:

Código PHP:
Ver original
  1. class Conecta{
  2.  
  3.     private static $instancia;
  4.     private $conex;
  5.  
  6.     private function __construct(){
  7.         try{
  8.             $this->conex = new PDO('mysql:host=localhost;dbname=xxxxxxx','user','pass');
  9.             $this->conex->exec("SET CHARACTER SET utf8");
  10.             $this->conex->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11.         }catch(PDOExeption $e){
  12.             print "Error!:".$e->getMessage();
  13.             die();
  14.         }
  15.     }
  16.  
  17.     public function prepare($sql){
  18.         return $this->conex->prepare($sql);
  19.     }
  20.  
  21.     public static function singleton_conexion(){
  22.         if(!isset(self::$instancia)){
  23.             $miCalse = __CLASS__;
  24.             self::$instancia = new $miCalse;
  25.         }
  26.         return self::$instancia;
  27.        }
  28. }

Como verán, estoy ocupando el patron singleton (hacen falta las funciones para evitar la clonación o serialización, pero las omití para no hacer la clase tan extensa)
Pero en el tema que enlace, comentan que el protocolo HTTP no almacen estados entre peticiones, por lo que el objeto se vuelve a instanciar...
entonces, si yo hago una petición AJAX , en donde se crea un controlador y a su vez un modelo , el cuál enlaza a mi clase Conecta... de nada me esta sirviendo el singleton??


Espero haberme dado a entender y q me puedan orientar..
Saludos!
  #2 (permalink)  
Antiguo 07/09/2016, 19:10
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 10 meses
Puntos: 288
Respuesta: Conexion Singleton con AJAX

amiguito, es obvo¿io que el patrón de diseño no aplica en web.
solo aplica cada vez que se carga la pagina
  #3 (permalink)  
Antiguo 08/09/2016, 06:18
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: Conexion Singleton con AJAX

Como indican el el otro por y bien dice el compañero, el patrón no se mantienen entre peticiones ya que no hay persistencia de datos.

Es decir. Al realizar una petición al servido este ejecuta el Script, en algún momento del Script se instancia el objeto, pero una vez que el Script a finalizado la instancia del objeto muere. Resumiendo entre Script y Script no hay persistencia de datos.


Si fuese necesaria esta persistencia del objeto por algún motivo, este debería ser guardado en algún lugar (un archivo, en base de datos o en sesiones por ejemplo) al final del Script y ser recuperado y comprobada su existencia al principio del la siguente petición. Esto no siempre es recomendable pues en muchos casos para hacer los datos persistentes se utilizan más recursos que simplemente creando una instancia temporal que será eliminada al final del Script.
__________________
Unset($vida['malRollo']);
  #4 (permalink)  
Antiguo 08/09/2016, 08:37
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 9 años
Puntos: 20
Respuesta: Conexion Singleton con AJAX

Hola amigos!
Muchas gracias por sus respuestas!
Ok , entiendo ... en resumen, como comentan, el patrón de diseño no aplica para web.
Entonces, que sería lo más óptimo para estos casos?
Supongamos que tengo un listado de registros, los cuales tienen un campo tipo check con el cúal puedo activarlos/desactivarlos (o simplemente un botón para editar todo el registro),
entonces yo mediante ajax hago una petición a mi controlador y modelo para actualizar el status o todo el registro (supongo que se dan una idea de lo q hago, espero me de a entender)
Entonces, imaginense que me pongo a activar/desactivar (o editar) decenas/cientos de registros (vía ajax)... con lo que me han comentado.. se estarían creando decenas/cientos de conexiones a mi BD???
He vivido engañado jaja, pensé el objeto de mi conexión no se volvía a instanciar..
Que sería lo más adecuado para éstos casos?
Gracias de antemano.
Saludos!!
  #5 (permalink)  
Antiguo 08/09/2016, 10:06
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: Conexion Singleton con AJAX

Pues si tienes un listado de cientos de check, en lugar de hacer una petición cada vez que selecciones/deselecciones, mejor poner un botón para grabar los cambios y al ser pulsado capturar todos los cambios y enviarlos con ajax al php en una sola petición.

En el Script php, puedes implimentar el singleton a la conexión de la base de datos para garantizar que sólo se crea una conexión por petición.

Ya que vas a actualizar muchos datos de golpe, puedes utilizar sentencias preparadas que en este tipo de casos suelen ser la mejor opción.

Cierra las conexiones a la base de datos una vez que termines de trabajar con ella.
__________________
Unset($vida['malRollo']);
  #6 (permalink)  
Antiguo 08/09/2016, 11:31
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 9 años
Puntos: 20
Respuesta: Conexion Singleton con AJAX

Cita:
Iniciado por xerifandtomas Ver Mensaje
Pues si tienes un listado de cientos de check, en lugar de hacer una petición cada vez que selecciones/deselecciones, mejor poner un botón para grabar los cambios y al ser pulsado capturar todos los cambios y enviarlos con ajax al php en una sola petición.

En el Script php, puedes implimentar el singleton a la conexión de la base de datos para garantizar que sólo se crea una conexión por petición.

Ya que vas a actualizar muchos datos de golpe, puedes utilizar sentencias preparadas que en este tipo de casos suelen ser la mejor opción.

Cierra las conexiones a la base de datos una vez que termines de trabajar con ella.
Hola amigo, muchas gracias por tu respuesta!

Lo que comentas de poner un botón para guardar y capturar todos los cambios del registro sí lo había pensado, pero como a veces básicamente lo que se cambia con más frecuencia es el status (activo/inactivo), por eso lo hice con el checkbox.. pero viendo todo esto yo creo si optaré por empezar a utilizar dicho botón para guardar cualquier cambio, así sea sólo el status..

Lo de las sentencias preparadas si lo estoy utilizando.

Lo que marco en negritas de tu comentario es donde tengo dudas, si cada petición me va a crear una conexión, de que me serviría el singletón?
No habría una manera de evitar que en cada petición se hiciera una conexión??

Gracias nuevamente,
Saludos!
  #7 (permalink)  
Antiguo 08/09/2016, 21:26
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 10 meses
Puntos: 288
Respuesta: Conexion Singleton con AJAX

Lo que existe es la persistencia de datos
yo lo use mucho tiempo pero jamas le encontré que tenga mejor perfonmance, lo contraria era mas lento
  #8 (permalink)  
Antiguo 09/09/2016, 06:28
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: Conexion Singleton con AJAX

Cita:
Lo que marco en negritas de tu comentario es donde tengo dudas, si cada petición me va a crear una conexión, de que me serviría el singletón?
En el Script php, puedes implimentar el singleton a la conexión de la base de datos para garantizar que sólo se crea una conexión por petición , cada vez que se ejecuta el Script.

Cita:
No habría una manera de evitar que en cada petición se hiciera una conexión??
Pues sinceramente tengo mis dudas y desconozco a ciencia cierta si es posible, y de ser posible no creo que fuese recomendable, aún que este ya sería un terreno pantanoso para mi.

Igualmente dicir que haciendo las cosas bien intentando no desperdiciar recursos, no debería suponer un problema este aspecto, pues hay miles de páginas trabajando así sin inconveniente alguno.

Generalmente en hosting compartidos (por lo menos los que he utilizado) suelen tener un límite de concurrencia (conexiones simultaneas) de entre 100 y 200. Si todo esta acorde con consultas optimizadas y se liberan los recursos tan pronto como dejan de ser necesarios, cada conexión no debería de durar más que unas centésimas o décimas de segundo (esto siempre es algo relativo y dependerá de que operaciones se necesiten hacer y otros factores, obviamente). Partiendo de esta base y tomando como media 0.5s por conexión desde que se habré hasta que se cierra, podemos atender una media de 200 a 400 por segundo. Para mi un número bastante aceptable para la gran mayoría de web.

Por hacer un cálculo burdo:
Tomando un valor bajo por ejemplo 32 conexiones simultaneas, una media de 1 segundo por conexión, en una hora podríamos atender: 32*3600=115200 peticiones
__________________
Unset($vida['malRollo']);
  #9 (permalink)  
Antiguo 12/09/2016, 08:29
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 9 años
Puntos: 20
Respuesta: Conexion Singleton con AJAX

Hola amigos,
gracias por sus respuestas y gracias por el ejemplo xerifandtomas.
Dejaré el tema abierto por si existen más respuestas.
Saludos!

Etiquetas: ajax, conexion, singleton, sql
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 00:54.