martes, 11 de marzo de 2008

Tips #2: La performance se encuentra buscando la raiz de las cosas


Hoy estaba desarrollando y me encontré con una verdad que termina siendo un tip.
Algo que amo de Smalltalk y especialmente de Squeak es que se puede acceder directamente hasta el core de las cosas.
En la búsqueda que nace de nuestra curiosidad natural de seres humanos, se llega al conocimiento de la implementación de cada cosa.
De esta manera pude mejora la performace de mi desarrollo.

tenía en mi código algo parecido a:

|temp|
temp:=aCollection collect[:aObject | aObject doSomeThing ]
^temp size

resulta que la implementación de size, es un contador que suma 1 por cada elemento de la colección.

|tally|
tally := 0.
self do: [:each | tally := tally + 1].
^tally

En una aplicación que no maneja muchos registros, esto sería una cosa trivial, pero en mi aplicación que maneja cientos de miles de registros (una aplicación de servicio postal) cambiar el código anterior por el siguiente, significo una diferencia como la que existe entre el día y la noche , porque recorro una sola vez la colección.

^aCollection
inject: 0 into: [:cuenta :aObject |
aObject doSomeThing.
cuenta:= cuenta + 1 ]

Esto solo fue posible, por lo menos para mi, por tener la posibilidad de ver la implementación de cada uno los elementos (Collection en este caso particular.)que componen la plataforma. Cosas que otros ambiente del mainstream no pasa y estas atado a "prueba y error" o búsquedas interminables (googlear todo el día).

Aunque suene redundante, Amo este ambiente y cada día entiendo menos porque no es adoptado como tecnología principal por mas gente.


PD: Aquellos que tiene miedo a la performance de Squeak, les cuento que esta aplicación comenzó desarrollándose en dot.net con nhibernate y postgreSql como DB. Después de pasado un mes de desarrollo decidí tirar todo y desarrollarla en Squeak , con Seaside y Glorp como ORM. Esto me dio la oportunidad de comparar la performance en una aplicación real y no benchmarks de laboratorio (dado que ya tenía desarrollado un modulo en .net ) con el mismo modelo y el mismo soporte de persistencia (la DB), comparativamente hay una mejora de performance del 30% a favor de Squeak. Se pueden sacar muchas conclusiones y buscar la raíz de esta mejora en distintas partes de la plataforma, pero lo concluyente y la principal diferencia que termina afectando la perfomance es la cultura de la gente que esta detrás de cada entorno. Ya sea por su gente o por las prueba empíricas, puedo afirmar que Squeak esta listo para competir de par a par con cualquier plataforma comercial del mainstream y salir victorioso con mejora sustanciales. Por lo cual no tema y tirense a la pileta que hay agua.

4 comentarios:

Anónimo dijo...

Excelente información ;)

Podríais colgar algunas capturas de pantalla de vuestros proyectos?

Un saludo.

Unknown dijo...

Gracias... Muy Pronto iremos posteando nuestras aplicaciones. La verdad que esto es como la televisión, el tiempo es tirano. Ya estamos On Running con un par de proyectos.

Giuseppe Luigi Punzi Ruiz dijo...

Perfecto, se esperan con ansias esas capturas. Con paciencia eh? :)

Seguir así ;)

Anónimo dijo...

Hola Diogenes, muy interesante tu post. Yo soy nuevo en el tema y quería pedirte si me podes pasar algún tutorial de glorp. mi dire de mail es mhbmarcos@gmail.com.

Muchas gracias

Saludos