28
optimiza tus webs Grails Greach - Noviembre 2011 Dani Latorre

Optimiza tus webs Grails. Greach 2011

Embed Size (px)

Citation preview

Page 1: Optimiza tus webs Grails. Greach 2011

optimiza tus webs Grails

optimiza tus webs Grails

Greach - Noviembre 2011

Dani Latorre

Greach - Noviembre 2011

Dani Latorre

Page 2: Optimiza tus webs Grails. Greach 2011

¿Quién soy?

• Desarrollador web independiente

• Jobsket, elDisparate, CachiruloValley...

• Google Summer of Code 2008

• www.danilat.com

• @dani_latorre

Page 3: Optimiza tus webs Grails. Greach 2011

Velocidad

• La velocidad es una magnitud física de carácter vectorial que expresa el desplazamiento de un objeto por unidad de tiempo.

Page 4: Optimiza tus webs Grails. Greach 2011

A mayor velocidad de respuesta

• Escalabilidad

• Costes

• SEO

• UX

Page 5: Optimiza tus webs Grails. Greach 2011

¿Cómo?

• Cuidar la base de datos

• Minimizar operaciones en la request

• Buenas prácticas en la capa web

Page 6: Optimiza tus webs Grails. Greach 2011

Cuidar la Base de Datos

Page 7: Optimiza tus webs Grails. Greach 2011

Acceso a bases de datos

• No guardar constantes

• Desnormalizar

• Contadores

• Evitar el problema N+1

• Cachés

Page 8: Optimiza tus webs Grails. Greach 2011

Evitar N+1• fetch: ‘join’

class Comment{

Post post

String author

...

static mapping{

post fetch: ‘join’

}

}

def comments = Comment.findAllByAuthor(“Dani”, [fetch:[post:‘join’]])

comments.each{ println it.post.title }

Page 9: Optimiza tus webs Grails. Greach 2011

Caché de primer Nivel• Ahorra tráfico en la red

• Sin flush:true en .save() y .delete()

Page 10: Optimiza tus webs Grails. Greach 2011

Caché de segundo nivel

• read-only: Datos de sólo lectura.

• nonstrict-read-write: Escenarios con frecuentes lecturas y pocas actualizaciones.

• read-write: Escenarios con actualizaciones frecuentes. No soporta transacciones.

• transactional: Se requiere un proveedor que lo soporte (JBoss TreeCache).

Page 11: Optimiza tus webs Grails. Greach 2011

Caché de segundo nivel

• Clases de dominio y asociaciones

class Post{ ... static hasMany = [comments: Comments] static mapping { cache ‘nonstrict-read-write’ comments cache: ‘read-write’ }}

Page 12: Optimiza tus webs Grails. Greach 2011

Caché de consultas

• cache: true

def groovyPosts = Post.findAllByTitle(“%Groovy%”, [cache:true])

def groovyPosts = Post.withCriteria{ like(‘title’, “%Groovy%”) cache:true}

Page 13: Optimiza tus webs Grails. Greach 2011

Spring Cache Plugin

• Cachear métodos de un Bean, incluso actions de Controllers

@Cacheable("pirateCache")def getPirates() {// return a list of pirates}@CacheFlush("pirateCache")void registerNewPirate(Pirate sailor) {// store a new pirate}

Page 14: Optimiza tus webs Grails. Greach 2011

Minimizar las Operaciones en la

Request

Page 15: Optimiza tus webs Grails. Greach 2011

Quitar de la request

• Envío de emails

• Actualizar datos desnormalizados

• Re-calcular estadísticas

• Re-indexar para un buscador

• O...

Page 16: Optimiza tus webs Grails. Greach 2011

Quitar de la request

• Envío de emails

• Actualizar datos desnormalizados

• Re-calcular estadísticas

• Re-indexar para un buscador

• Los tuits de @justinbieber ;)

Page 17: Optimiza tus webs Grails. Greach 2011

Arquitectura asíncrona

• JMS - Java Message Service

• AMPQ - Advanced Message Queuing Protocol

• Jabber

• java.util.concurrent

• Quartz/Tareas CRON

Page 18: Optimiza tus webs Grails. Greach 2011

Grails PLugins

• JMS: http://grails.org/plugin/jms

• RabbitMQ: http://grails.org/plugin/rabbitmq

• Jabber: http://grails.org/plugin/jabber

• Quartz: http://grails.org/plugin/quartz

Page 19: Optimiza tus webs Grails. Greach 2011

Buenas Prácticas en la Capa Web

Page 20: Optimiza tus webs Grails. Greach 2011

Yahoo Performance Rules

• 34 reglas (23 testeables con YSlow)

• http://yhoo.it/sx01V9

• Entre 25% y 50% de mejora

Page 21: Optimiza tus webs Grails. Greach 2011

1. Minimize HTTP Requests

• Unir todo en sólo 1 CSS y 1 JS

• Resources: http://grails.org/plugin/resources

• Hacer sprites para minimizar carga de imágenes

Page 22: Optimiza tus webs Grails. Greach 2011

2. Use a Content Delivery Network

• Red de distribución de contenidos

• Sirve el servidor más cercano

• CDN Resources: http://grails.org/plugin/cdn-resources

Page 23: Optimiza tus webs Grails. Greach 2011

4. Add an Expires or a Cache-Control Header

• Los ficheros estáticos nunca expiran

• Cached Resources: http://grails.org/plugin/cached-resources

• Para el contenido dinámico: Cache-Control

• Cache Headers: http://grails.org/plugin/cache-headers

Page 24: Optimiza tus webs Grails. Greach 2011

5. Gzip Components

• Comprimir los ficheros estáticos

• Zipped Resources: http://grails.org/plugin/zipped-resources

Page 25: Optimiza tus webs Grails. Greach 2011

11. Minify JavaScript and CSS

• Limpia el código CSS y JS innecesario

• YUI Minify Resources: http://grails.org/plugin/yui-minify-resources

Page 26: Optimiza tus webs Grails. Greach 2011

Bola Extra

• 3. Avoid empty src or href

• 6. Put StyleSheets at the Top

• 7. Put Scripts at the Bottom

• 8. Avoid CSS Expressions

• 9. Make JavaScript and CSS External

Page 27: Optimiza tus webs Grails. Greach 2011

Bola Extra (2)

• 12. Avoid Redirects

• 13. Remove Duplicate Scripts

• 14. Configure ETags

• 15. Make Ajax Cacheable

Page 28: Optimiza tus webs Grails. Greach 2011

Q&A

GRACIAS!

[email protected]