Back-End

22 abr, 2009

Django – Obtendo mais performance com HTML Spaceless

Publicidade

Uma das formas de otimização de páginas web é através da redução do seu tempo de carregamento. Um exemplo de deste tipo de otimização é
removendo excessivo espaços em branco do código de sua página.

Django possui alguns meios para isto, e uma deles é através da tag de template {% spaceless %} [1], que remove todos os espaços em branco entre tags de um trecho especificado. Porém, existem algumas restrições em relação à  tag “spaceless”, pois para quem a usa para esta finalidade, não poderá usa-lá caso esteja utilizando outro sistema de template.

Com isso, uma das formas de se fazer  “spaceless” é através da criação de uma middleware [2], que utiliza a função “strip_spaces_between_tags” para remover espaços entre tags HTML. Com isso, sobrescreve-se o conteúdo do objeto “response” (resposta ), que é passado para o método de middleware process_response [3]  e logo em seguida é retornado o objeto response com os espaços removidos.

Segue um exemplo de middleware:

from django.utils.html import strip_spaces_between_tags as short

class SpacelessMiddleware(object):
def process_response(self, request, response):
if 'text/html' in response['Content-Type']:
response.content = short(response.content)
return response

Obs: Se estiver utilizando middleware de cache, lembre-se que a ordem das middlewares influencia. Então, verifique se esta middleware estará antes da middleware de cache.

Depois disto, no arquivo settings, adicionar em  MIDDLEWARE_CLASSES, o caminho à sua middleware.

Exemplo:

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'projeto.minhas_middlewares.SpacelessMiddleware',
)

Com isto, todos os espaços entre tags serão removidos, o que lhes dará relativamente a redução do tamanho final do arquivo.

[1] = http://docs.djangoproject.com/en/dev/ref/templates/builtins/#spaceless
[2] = http://docs.djangoproject.com/en/dev/topics/http/middleware/#topics-http-middleware
[3] = http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-response

Fonte: http://www.davidcramer.net/code/369/spaceless-html-in-django.html