使用django-compressor壓縮靜態文件

Reference:http://blog.csdn.net/permike/article/details/52355095javascript

 

在網站開發階段,對於靜態資源文件好比JS,CSS等文件都是未通過壓縮合並處理的,這對於訪問量巨大的網站來講不只浪費帶寬,並且也會影響網站的訪問速度。django-compressor的做用就是將靜態文件壓縮合併成一個文件,不只減小了網站的請求次數,還能節省網絡帶寬。php

本文分爲兩部分,第一部分介紹settings文件相關配置對靜態文件的影響,而後再討論Compressor的如何使用。若是你對setting文件很是瞭解不妨直接從第二部分開始閱讀。css

第一部分:Setting文件配置

早期的django處理靜態資源要比較囉嗦,還要配置urlpatterns,不過自從django1.6開始加入了django.contrib.staticfiles這個內置app後,開發環境下處理靜態資源就方便不少。django.contrib.staticfiles是django的內置(build-in)app,用於處理js、css、images等靜態資源。首先確保這個app已經包含在INSTALLED_APPS中,django1.6及以上版本是默認包含該app在其中的。java

一:指定STATIC_URL

STATIC_URL = '/static/' 

STATIC_URL是客戶端訪問靜態資源的根路徑,好比:模版中定義的資源路徑是:python

{% load staticfiles %}
<script src="{% static "js/blog.js" %}"></script> 

最終渲染後的效果是:jquery

<script src="/static/js/blog.js"></script> 

默認django會從每一個app目錄的static子目錄下查找靜態文件,所以一般狀況下你都是將相關靜態文件放在各自的app/static目錄下。Django怎麼知道從app/static目錄查找靜態文件呢?原來django有個默認配置項STATICFILES_FINDERS,默認值:nginx

("django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder") 

AppDirectoriesFinder模塊就是負責在app/static目錄下找靜態文件的。至於FileSystemFinder咱們稍後介紹。git

二:指定STATICFILES_DIRS

jQuery,bootstrap等公用的靜態資源文件在不少個app中都會共用到,若是是放在某個app中顯得不符Python哲學,所以django提供了一個配置能夠指定任意目錄來存放這些公用的資源文件。配置參數是:STATICFILES_DIRS,好比:github

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), '/var/www/static/', ) 

這意味着靜態文件能夠放在磁盤的任何一個位置(只要有權限訪問)如今應該明白FileSystemFinder的做用了吧。就是用來查找定義在STATICFILES_DIRS中的靜態文件的。apache

三:指定STATIC_ROOT

上面的配置就是在開發環境下Django對靜態資源的處理過程,那麼在生產環境下是怎麼處理的呢?若是仍是這樣由django本身來處理,那麼累死Django了,對於靜態資源直接由Nginx這樣的代理去處理就行,並且Nginx處理這些非邏輯的資源性能也很是高。因而Django提供了一個很是方便的靜態資源管理命令django.contrib.staticfiles將系統要用的資源文件從不一樣目錄收集到統一的目錄中去,而後在Nginx的配置中指定這些靜態資源的位置便可。

收集這些靜態文件須要先指定存放這些靜態資源的目錄:STATIC_ROOT

STATIC_ROOT="/var/www/foofish.net/static/" 

運行collectstatic管理命令

python manage.py collectstatic 

運行該命令,全部靜態資源都將拷貝到STATIC_ROOT指定的目錄中。

四:配置Nginx

在Nginx的配置文件中指定凡是來自/static/路徑的請求直接訪問STATIC_ROOT

location /static { alias /var/www/foofish.net/static/; # your Django project's static files } 

第二部分:Compressor的使用

django-compressor 的安裝配置很是簡單

安裝:

pip install django_compressor 

配置:

COMPRESS_ENABLED = True INSTALLED_APPS = ( # other apps "compressor", ) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.FileSystemFinder', 'compressor.finders.CompressorFinder',) 

Django-Compressor開啓與否取決於DEBUG參數,默認是COMPRESS_ENABLED與DEBUG的值相反。由於Django-Compressor的功能自己是用在生產環境下項目發佈前對靜態文件壓縮處理的。所以想在開發階段(DEBUG=True)的時候作測試使用,須要手動設置COMPRESS_ENABLED=True

使用

在模板文件中添加模板標籤 {% load compress %}

{% load compress %}
#處理css
{% compress css %}
<link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet"> <link href="{% static "css/blog-home.css" %}" rel="stylesheet"> <link href="{% static "css/github.css" %}" rel="stylesheet"> {% endcompress %} #處理js {% compress js %} <script src="{% static "js/jquery-1.10.2.js" %}"></script> <script src="{% static "js/bootstrap.js" %}"></script> <script src="{% static "js/blog.js" %}"></script> {% endcompress %} 

執行命令:python manage.py compress ,最終文件將合併成:

<link rel="stylesheet" href="/static/CACHE/css/f18b10165eed.css" type="text/css"> <script type="text/javascript" src="/static/CACHE/js/9d1f64ba50fc.js"></script> 

f18b10165eed.css9d1f64ba50fc.js這兩文件在STATIC_ROOT目錄下面。

每次修改了js、css文件後,都須要從新加載最新的文件到STATIC_ROOT目錄下去,所以須要從新運行命令:

python manage.py collectstatic python manage.py compress
相關文章
相關標籤/搜索