jueves, 12 de febrero de 2009

Rendimiento en Laszlo

Trabajando nuevamente con laszlo, la necesidad de una aplicacion mas rapida desperto mi interes por analizar los tiempos con que se invocan metodos y funciones en laszlo. No encontre mucho en el manual, hablan de variables locales y otras cosas pero nada al respecto de lo que hablaremos aqui.

Rapidamente una explicacion en 30,000ms :) Los procedimientos que tenemos pueden estar en funciones JS o en metodos de nuestros objetos.

En el siguiente codigo, hay dos funciones JS, como vemos la funcion principal es despachador(), la cual invoca a script_js() 9000 veces. Como se ve en la linea comentada, frmCiudades.metodo_local(), es un metodo de un objeto frmCiudades y podemos conmutar entre uno y otro, cambiando los comentarios.

<script> <![CDATA[
function despachador(){
var begin = (new Date).getTime();
for (var i = 0; i < 9000; i++){
script_js();
//frmCiudades.metodo_local();
}
var end = (new Date).getTime();
var total = end - begin;
colocar.setAttribute('text',total);
}

function script_js(){
frmCiudades.setAttribute('title','updating...');
}
]]>
</script>


La alternativa a eso es tener un despachador2 en la clase frmCiudades, pero ahora como metodo y ver como responde. A continuación vemos el codigo.

<method name="metodo_local" >
frmCiudades.setAttribute('title','updating... Metodo');
</method>
<method name="despachador2"> <![CDATA[
var begin = (new Date).getTime();
for (var i = 0; i < 9000; i++){
//script_js();
metodo_local();
}
var end = (new Date).getTime();
var total = end - begin;
colocar.setAttribute('text',total);

]]>
</method>


Lo que hice aqui es medir los tiempos que Laszlo se tarda en:
Caso 1. Desde la funcion JS despachador() invocar el metodo metodo_local()
Caso 2. Desde la funcion JS despachador()invocar la otra funcion JS script_js()
Caso 3. Desde el metodo despachador2() invocar la funcion JS script_js()
Caso 4. Desde el metodo despachador2() invocar el metodo metodo_local()

Aqui la hipotesis es saber que combinacion nos da mejores resultados, o que sistemas (funciones JS o metodos locales) operan mas rapido. La actividad realizada fue que ejecutaba mi programa y en cada uno de esos casos 20 veces, dando asi pequeñas muestras de cada caso.

Los promedios resultados son:
Caso 1. 1341.95ms
Caso 2. 1318.10ms
Caso 3. 1360.75ms
Caso 4. 1383.15ms

Estos resultados me indican que las funciones de JS son mas rapidas, y la alternativa mas rapida es invocar una funcion desde otra funcion en JS.