Optimizacion de codigo PHP.

Iniciado por Hadess_inf, 29 Octubre 2009, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Hadess_inf

En un articulo vi sobre como optimizar algo de codigo en php, vi algo parecido a esto, haber que opinan uds.... cual es la mejor forma de conectar a Mysql.

1)

Código (php) [Seleccionar]
$mysql = mysql_connect('localhost', 'reinhold', 'secret_hash');
mysql_select_db('wordpress') or die("cannot select DB");


2)

Código (php) [Seleccionar]
$db_host = 'localhost';
$db_user = 'reinhold';
$db_password = 'secret_hash';
$db_database = 'wordpress';

$mysql = mysql_connect($db_host, $db_user, $db_password);
mysql_select_db($db_database);


3)
Código (php) [Seleccionar]

define('DB_HOST', 'localhost');
define('DB_USER', 'reinhold');
define('DB_PASSWORD', 'secret_hash');
define('DB_DATABASE', 'wordpress');

$mysql = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_DATABASE);

sirdarckcat

el primero es mas seguro y mas optimo por varios microsegundos.

el tercero es mas conveniente porque si cambias los datos de sesion no tienes que buscar donde pusiste el mysql_connect.


Hadess_inf

Supongo que en la primera es cierto puesto que se ahorra tener que crear 4 variables en memoria. Pero si queremos que todo este bien estructurado y sabiendo que trabajaremos con clases y demas, cual seria la forma mas indicada de conectarse a una BD. ¿?

:ohk<any>

Pues la tercera opción me parece ideal.
Aunque hay que aclarar que optimizar código no necesariamente significa reducir lineas de código :P
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

sirdarckcat

de hecho no es muy seguro usar ni la segunda ni la tercera.

la segunda no es seguro distribuirlo.. porque podria haber gente que tiene register_globals habilitado.
la tercera tampoco es seguro si pones los define en un archivo distinto a donde tienes el mysql_connect.. y si estan taaan cerca como en el ejemplo que tienes, es practicamente inutil hacerlo como en el ejemplo.

tendrias que checar si esta definido primero antes de hacer la conexion.

saludos

WHK

#5
Si es por optimizar debería quedar así:

Código (php) [Seleccionar]
if(mysql_connect('127.0.0.1', 'reinhold', 'secret_hash'))mysql_select_db($db_database);else die('Error en conexión');

Primero que nada me ahorro el espacio en memoria de las variables del handle con el link de la conexión, el string del host, nombre, etc, también pongo 127.0.0.1 para evitar que el sistema operativo tenga que traducir el dns a un host/ip y elimino las llaves y saltos de linea para ahorrar espacio en el script y ahorrarle memoria al sistema op cuando php intente cargar el archivo para procesarlo.

Pero es tan poca la diferencia del uso de memoria y proceso que es mas conveniente hacerlo como la segunda opción ya que puedes editar super fácil algún tipo de dato y puedes utilizar el mismo espacio en memoria de las variables para establecer una segunda conexión, en cambio si usas definiciones de constantes tendrías que duplicar la cantidad de constantes por cada nueva conexión.

Si fuera vulnerable por register_globals entonces casi todos los sistemas webs serían vulnerables.

sirdarckcat

#6
CitarSi fuera vulnerable por register_globals entonces casi todos los sistemas webs serían vulnerables.
de hecho lo son xD, pero las constantes no usan memoria, son remplazadas antes de pasar a la VM de Zend.. es mas rapido.. pero igual no tan seguras como la primera.

*edit* ahora que lo pienso, lo de las constantes solo es cierto si usas el optimisador de zend..

HardieVon

yo uso el último.
PD; escriban bien!