Drupal velocidad en views, pruebas diversas

Resultados de pruebas de rendimiento:

Hay que tener en cuenta que estas pruebas de rendimiento se han realizado sin que se haya navegado intensivamente por la web, por lo tanto la cache que esta puede tener es mínima.

Hay que tener en cuenta que en una instalación básica como la que hemos usado, no se tiene activada la cache de mysql, la cual debería mejorar el redimiento de la web, tampoco esta activado memcache aunque si apc.
Las comparaciones que se han hecho han sido teniendo en cuenta las diferentes posibilidades que da drupal.
* Sin ningún tipo de cache.
* Con cache de drupal
* Con cache de drupal y de views.
* Con cache de views.

Por otro lado se han utilizado dos códigos bien diferentes, en uno se utiliza la función <?php node_load(); ?> que carga el objeto completo del nodo cuyo nid se facilita para a continuación recuperar sus $node->taxonomy.
Y por otro lado una consulta a la bbdd, en este caso se ha utilizado <?php db_result(); ?> , aunque podría variar en caso de que se quisiese pasar varios tids en los argumentos a <?php db_fetch_object(); ?>.

Primero realizamos las pruebas pasando el siguinte códig para recuperar los tids del nodo:

<?php
$node
= node_load(arg(1));
if(
$node){
foreach(
$node->taxonomy as $term){$terms[]=$term->tid;}
return
implode('+',$terms);
}else {return;}

?>

Sin cache ni de drupal ni de views:
Querys a la bbdd
Executed 299 queries in 132.03 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 81102.29 ms.
Memory usage:
Memory used at: devel_init()=3.76 MB, devel_shutdown()=12.72 MB.

Con cache de drupal pero sin cache de views
Querys a la bbdd
Executed 261 queries in 54.27 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 586.21 ms.
Memory usage:
Memory used at: devel_init()=3.53 MB, devel_shutdown()=10.64 M.

Con cache de drupal y de views
Querys a la bbdd
Executed 101 queries in 36.29 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 424.62 ms.
Memory usage:
Memory used at: devel_init()=3.53 MB, devel_shutdown()=10.02 MB.

Con cache de views pero sin cache de drupal.
Querys a la bbdd
Executed 101 queries in 44.24 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 566.93 ms.
Memory usage:
Memory used at: devel_init()=3.53 MB, devel_shutdown()=10.02 MB.

A continuación hacemos las pruebas con la query concreta.

<?php
$result
= db_result(db_query("SELECT tid FROM term_node where nid=%d",arg(1));
return
$result;

?>

Sin cache de drupal ni cache de views:
Querys a la bbdd
Executed 424 queries in 310.13 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 24214.24 ms.
Memory usage:
Memory used at: devel_init()=7.29 MB, devel_shutdown()=19.93 MB.

Si se recarga esa página una segunda vez la cosa cambia sustancialmente*.
Querys a la bbdd
Executed 263 queries in 65.93 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 705 ms.
Memory usage:
Memory used at: devel_init()=3.52 MB, devel_shutdown()=10.61 M.

Con la cache de Drupal activada pero sin la cache de views:
Querys a la bbdd.
Executed 262 queries in 67.88 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 749.42 ms.
Memory usage:
Memory used at: devel_init()=3.52 MB, devel_shutdown()=10.6 M

Con la cache de views y con la cache de views
Querys a la bbdd
Executed 102 queries in 36.98 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 480.62 ms.
Memory usage:
Memory used at: devel_init()=3.52 MB, devel_shutdown()=9.98 MB.

Con la cache de views pero sin la cache de Drupal.
Querys a la bbdd
Executed 102 queries in 43.22 milliseconds. Queries taking longer than 5 ms and queries executed more than once, are highlighted. Page execution time was 541.09 ms.
Memory usage:
Memory used at: devel_init()=3.52 MB, devel_shutdown()=9.98 MB.

Trackback URL for this post:

http://www.documentados.com/trackback/319

No me ha quedado claro qué

No me ha quedado claro qué parte de views estás usando/comparando para la velocidad.

¿Esos 2 códigos que comparas van escritos desde la administración dentro de una view?

Buenas Rodricels. El código

Buenas Rodricels.

El código se ha agregado a mano en las opciones de argumentos, en la opción de php.

El tiempo usado lo genera el módulo devel.

El viernes anterior a la camp podríamos hacer por la tarde una sentada de rendimientos.

Oskar

Por lo que he visto en la

Por lo que he visto en la prueba, realmente no estás comparando la velocidad de views, sino un código en PHP y lo que hace el sistema de caché.

Al meter PHP en la view, el sistema tiene que traerse de la base de datos ese código para poder interpretarlo, por lo que nunca se cachea con APC. Por lo que si es un código costoso en CPU nunca ganarás en esa parte, solo en los cacheos de los resultados que devuelva, pero nada en un arranque "en frío".

Pasa subsanar esto, en parte, se puede pasar la view a código; por rendimiento y mantenimiento, toda view debería ir a código, y más si tiene PHP incrustado. La interfaz sería para crear la view y modificarla, una vez terminada, de nuevo a código.

De todas formas, no le veo muchos pies ni cabeza a la prueba.

El primer código hace un node_load, que va a hacer decenas de llamadas a todos los módulos que implementen hook_nodeapi($op = 'load'), generando cantidad de consultas a la BD. Se podría salvar si ese nodo ya ha sido utilizado por node_load() anteriormente ya que estaría en una variable estática y se podría usar por el tipo de llamada que has hecho (node_load($nid) mejor que node_load(array('nid'=>$nid) para solo un nodo).

El segundo código trae solo lo que necesitas, pero pasando a código la view puedes pasarle ese dato "desde fuera" de la view, quedando más limpia.

Entre db_fetch_object() y db_result() trayendo solo un dato, es despreciable la diferencia.

Rodrigo.Todo esto viene por

Rodrigo.

Todo esto viene por una conversación entre Pedro Cambra y yo en el irc, una persona preguntaba como pasar un argumento en una vista, y le dimos las dos opciones, o tirar de node_load, o tirar de query directamente.

Después estuvimos hablando Pedro y yo sobre que podría ser más rápido, si un node_load o una query.

Con esta conversación detrás de la oreja pensé en hacer las pruebas.

Efectivamente se esta mirando el tiempo de carga total de carga de la página donde esta la vista (sin bloques ni nada), y la memoria usada.

El artículo no intenta sentar cátedra, únicamente dejar constancia de que menos una de las situaciones, el resto los resultados son muy parejos.

Cierto es que olvidé hacer las mismas pruebas de carga habiendo montado una feature de la vista para ver la velocidad.

Oskar

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
To prevent automated spam submissions leave this field empty.
By submitting this form, you accept the Mollom privacy policy.