Skip to main content

The class minifier package shortens the class name in the DOM to gibberish characters.

Project description

Django Static class minifier

Alt Alt Alt Alt Alt

Description

The class minify package shortens the class name in the DOM to gibberish characters with reducing the size of the actual class name and which helps to reduces the file size and which also makes web scrappers difficult to scrap the website.

End result : Alt

Installation

$ pip install django-static-class-minifier

(you may want to write this in your requirements.txt)

In settings.py -

In Installed apps -


INSTALLED_APPS = [

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'static_compressor', #installed app

'.....'

]

In Middleware -


MIDDLEWARE = [

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

'static_compressor.middleware.MinifyClassMiddleware', # Add this line, right after csrf middleware.

'django.contrib.auth.middleware.AuthenticationMiddleware',

Make sure, you have set up path of static files and static root directory.


STATICFILES_DIRS = (

os.path.join(BASE_DIR, 'static'),

)



STATIC_ROOT = os.path.join(BASE_DIR, 'all_staticfiles')

Update the static files storage:


STATICFILES_STORAGE = 'static_compressor.staticfiles_storage.CompressedStaticFilesStorage'

Run the below command in your terminal to build the static files.


$ python manage.py collectstatic_compress

When you run $ python manage.py collectstatic_compress it will have an additional post-processing to compress your static files and it creates data.json file which contains classes from all included css and js files.

The class selectors which js files considers and change :


querySelector('.flex-box');

querySelectorAll('.flex-boxes');

classList.contains('active');

classList.add('active);

classList.remove('active');

classList.toggle('active');

If your adding classes to the DOM based on http response or a common function which appends class to the DOM, then consider excluding those words. Use EXCLUDED_CLASSNAMES_FROM_MINIFYING setting attribute and include those words in the list.

Make sure that your web server is configured to serve precompressed static files:

  • If using nginx:

  • Setup ngx_http_gzip_static_module to serve gzip (.gz) precompressed files.

  • Out of tree module ngx_brotli is required to serve Brotli (.br) precompressed files.

  • Caddy will serve .gz and .br without additional configuration.

Also, as Brotli is not supported by all browsers you should make sure that your reverse proxy/CDN honor the Vary header, and your web server set it to Vary: Accept-Encoding.

Available Storages

  • static_compress.CompressedStaticFilesStorage: Generate .br and .gz from your static files

  • static_compress.CompressedManifestStaticFilesStorage: Like ManifestStaticFilesStorage, but also generate compressed files for the hashed files

  • static_compress.CompressedCachedStaticFilesStorage: Like CachedStaticFilesStorage, but also generate compressed files for the hashed files

You can also add support to your own backend by applying static_compressor.staticfiles_storage.CompressMixin to your class.

By default it will only compress files ending with .js, .css and .svg. This is controlled by the settings below.

Settings

django-static-class-minifier settings and their default values:


MINIFY_CLASS_HTML = False # Change it to True in production environment

EXCLUDE_STATIC_JS_FILES = [] # exclude js libraries from classnames minifier

EXCLUDE_STATIC_CSS_FILES = []

EXCLUDE_STATIC_SVG_FILES = []

EXCLUDE_STATIC_DIRECTORY = []

EXCLUDE_URL_MINIFICATION = []

EXCLUDED_CLASSNAMES_FROM_MINIFYING = []

# By default, the admin files classes won't be minified.

STATIC_CLASSES_FILE_NAME = 'data.json' # It should be an json file

CLASS_SALT_VALUE = 'ascii_lowercase' # Choices - 'ascii_lowercase' or 'ascii_uppercase' or 'ascii_letters' or custom characters. The custom characters should not contain special characters and the length of salt should be greater then 8. Example : CLASS_SALT_VALUE = '_abcdefghijk123'.


# Incase, Inside your app if there is static directory then include it in STATIC_INCLUDE_DIRS



STATIC_INCLUDE_DIRS = (

os.path.join(BASE_DIR, 'faq/static'), # Example : Let the app name be faq

)

STATIC_COMPRESS_FILE_EXTS = ['js', 'css', 'svg']

STATIC_COMPRESS_METHODS = ['gz', 'br']

STATIC_COMPRESS_KEEP_ORIGINAL = True

STATIC_COMPRESS_MIN_SIZE_KB = 30

Configuration Types :

Settings Type Description
EXCLUDE_STATIC_JS_FILES Array These js files will be excluded from classnames shortening, In other words the class names won't be changed.
EXCLUDE_STATIC_CSS_FILES Array Same as above but for css files.
EXCLUDE_STATIC_SVG_FILES Array Same as above but for svg files
EXCLUDE_STATIC_DIRECTORY Array The directory name in the array will be excluded from class names shortening.
EXCLUDE_URL_MINIFICATION Array The URL in the array will exclude from shortening of class names.
EXCLUDED_CLASSNAMES_FROM_MINIFYING Array The words in an array won't be shortened.
MINIFY_CLASS_HTML Boolean If its True it minifies class names in the HTML. Make sure there is JSON file or it will throws an error.
STATIC_CLASSES_FILE_NAME String The JSON file name. By default its data.json
STATIC_INCLUDE_DIRS Tuple Includes static directory inside the app.
CLASS_SALT_VALUE String Choices - 'ascii_lowercase' or 'ascii_uppercase' or 'ascii_letters' or custom characters. The custom characters should not contain special characters and the length of salt should be greater then 8. Example : CLASS_SALT_VALUE = '_abcdefghijk123'.

File size reduction


Original file - 100k style.css

compressed class minifier file - 70k style.css (30% reduction in file size)

(Note - reduction of the file depends on the number of class selectors used and the length of the class name.)

After brotli and Gzip compression - 40k style.css.gz (60% reduction in file size, in total), 35k style.css.br (65% reduction in file size)

Licence

Alt

Happy coding! :)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-static-class-minifier-0.2.3.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file django-static-class-minifier-0.2.3.tar.gz.

File metadata

  • Download URL: django-static-class-minifier-0.2.3.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

File hashes

Hashes for django-static-class-minifier-0.2.3.tar.gz
Algorithm Hash digest
SHA256 ccadd93d69fffc7c4ce13caf8f14f43ba8c02e800769cac1914db32b14947a78
MD5 bff4217879a16a0e2d61cfe1e1102ff0
BLAKE2b-256 beb2f8c2196c4cdb4736269a3cafd6d6fcbcd05a9b89d1af7c9c06ba23ebc445

See more details on using hashes here.

File details

Details for the file django_static_class_minifier-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: django_static_class_minifier-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 36.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

File hashes

Hashes for django_static_class_minifier-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 24acc1cba3d33af7a0c18f4754422a0b686a6bd11681eb527e01801e6577f28c
MD5 c047ca7c04e1668d0ffaf97dca5ca766
BLAKE2b-256 ff704d1bd4b3480fa800550993df1b821247dfd9e3e39af6de0228d1da3fe738

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page