Code Monkey home page Code Monkey logo

django-hmin's Introduction

django-hmin

Build Status

Django (1.6+) HTML minification middleware (another one). Key feature - speed. 10x (on large html's it can be 50x, 100x, 200x or even more) time faster, than htmlmin. Compress html, removes comments, respects (dont remove) conditional comments (IE) by default. Uses cache (can be disabled), that greatly reduce html minification overhead.

Compatibility

Django 1.6 - Django 1.10

Installing

For install django-hmin, run on terminal:

$ pip install django-hmin
Extra install options

Optionally, you can install re2 (fast regular expressions) library (pip install re2 + reqs). Hmin will use it instead of re.

Using the midleware

All you need to do is add two middlewares to your MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = (
    # other middleware classes
    'hmin.middleware.MinMiddleware',
    'hmin.middleware.MarkMiddleware',
)

If you're using Django's caching middleware, MarkMiddleware should go after FetchFromCacheMiddleware, and MinMiddleware should go after UpdateCacheMiddleware:

MIDDLEWARE_CLASSES = (
  'django.middleware.cache.UpdateCacheMiddleware',
  'hmin.middleware.MinMiddleware',
  # other middleware classes
  'django.middleware.cache.FetchFromCacheMiddleware',
  'hmin.middleware.MarkMiddleware',
)

You can optionally specify the HTML_MINIFY setting:

HTML_MINIFY = True

The default value for the HTML_MINIFY setting is not DEBUG. You only need to set it to True if you want to minify your HTML code when DEBUG is enabled.

URL exclude

Specify setting:

HMIN_EXCLUDE = ('^base/', '^admin/')
Keep html comments

Specify settings:

HMIN_REMOVE_COMMENTS = False
Cache

By default hmin middleware uses cache (very useful for small and middle web sites, and for big you definitely will use ngx_pagespeed or other "big" solutions). You can disable it by specify setting:

HMIN_USE_CACHE = False

Also you can change time and cache backend (if you want, by default time is 3600, cache backend - "default"):

HMIN_CACHE_TIMEOUT = 86400
HMIN_CACHE_BACKEND = 'my_cache'

Using the function

Just import function minify: from hmin import minify, than you can use it with any html you want. Function definition: def minify(content, remove_comments=True)

Using the decorator

Just import decorator minify_plain: from hmin.decorators import minify_plain, than you can minify any function you want:

@minify_plain()
def my_cool_func():
    <...>
    return some_plain_html

Or, if you want to keep html comments:

@minify_plain(False)
def my_cool_func():
    <...>
    return some_plain_html

Stupid speed benchmark (1)

I try to compress 1mb of html (i think, your usual html is slightly thiner) on my i7 laptop processor and measure time with django-debug-toolbar.

Django overhead took about 40ms (all), this is time without minification, just plain html, django, etc.

Then i install hmin and htmlmin and just look at the debug toolbar numbers (this is very silly and simple "benchmark"):

  • with hmin cpu was about 60ms (min)
  • with htmlmin cpu was about 1200ms (min)

Minus overhead, plain time: hmin - 20ms, htmlmin - 1160ms.

Probably, you can get other numbers. But hmin really faster than htmlmin.

Stupid speed benchmark (2)

Also i try to compress 2mb of html on my desktop i3 (sandy bridge).

Debug toolbar time:

  • with hmin cpu was about 220ms without cache, and 87ms with cache
  • with htmlmin cpu was about 125000ms

Django overhead was about 80ms. Minus overhead, plain time: hmin - 140ms (7ms with cache), htmlmin - ok.

Current problems

  • Doesnt respect CDATA

License

Who cares? Use it whatever you want.

django-hmin's People

Contributors

xfenix avatar

Watchers

James Cloos avatar Kalpit Champanery avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.