2012-07-29 53 views
11

我使用Django的模板,以及可讀性我有HTML,看起來類似以下內容:壓實/涅槃動態HTML

{% if some_variable %} 
    text 
{% else %} 
    nothing exists here 
{% endif %} 

{% for item in set %} 
    {% if forloop.first %} 
...etc... 

將其轉換爲在運行時下面的HTML,其中包括噸空白和回報:

text 

<div> 

    <li 

     class='some_class 

    > 

    some text 

    </li> 

</div> 

etc... 

查看頁面源代碼時,有些頁面甚至運行到~3000行html。

是否有工具可以在運行時壓縮此html?如何刪除多餘的換行符?

+1

谷歌把這個了:http://www.soyoucode.com/2011/minify-html-output-django(我不熟悉Django,所以我不知道它在你的特定情況下是否有用)。 – 2012-07-29 22:19:14

+1

你有沒有試過django.middleware.gzip.GZipMiddleware, – mrok 2012-07-29 22:19:18

+0

你可能想要一個Django/Python的HTMLTidy方法。 – 2012-07-29 22:23:27

回答

5

由於Django的模板引擎目前不關心在標籤被剝離後評估爲空白的消毒線,並且這樣做會在服務響應時產生一些較小的性能損失,因爲它涉及評估渲染模板的全部內容的後處理步驟。

不過,如果您需要快速解決方案,我建議您使用StripWhitespaceMiddleware響應中間件,它將從文本響應中刪除僞造的空白。這是非常快速和直接的,使用像模板引擎本身的正則表達式匹配。如果您真的關心仍在閱讀原始響應的可憐人類,那麼更多稅收但強大的替代品將部署使用HTML美化器的響應中間件。

+2

還有其他與可讀性相關的空白過多問題,比如帶有大量併發請求的網站的帶寬,但這通常與*更大的網站(如雅虎,Facebook等)有關。我同意你的答案的精神,因爲空白膨脹通常是設計師和非IT主管類型發現「pwoblematic」的醜化問題。我遇到的最好的例子就是*源代碼標記*是通過標記 - 不註釋來判斷的,代表代碼的質量。有趣的是,我們有時候爲了薪水而忍受。 – 2012-07-29 23:15:54

+0

設計師,非IT主管類型和OCPD開發人員;)! – 2012-07-30 08:21:29

1

如果你使用Nginx,它的Strip模塊在爲你清理html方面做得非常出色。這是實時和透明的。正確設置後,根本不需要關心。

http://wiki.nginx.org/HttpStripModule

2

我認爲前端開發工具,如grunt-contrib-htmlmin,應使用其部署到生產服務器之前,來縮小Django的模板文件。

通過這種方式,縮小過程發生在「構建時間」,並在「運行時間」中節省了用於HTML縮小的服務器CPU資源。

此工具最初設計用於縮小HTML,但也適用於Django模板,正如我試用過的。

+0

太棒了,我正在考慮類似的解決方案,其中縮小可以在模板加載時運行。 – aisbaa 2014-03-25 14:17:56

0

「我認爲前端開發工具,如咕嚕-的contrib-htmlmin,應使用在將它們部署到生產服務器之前將Django模板文件縮小。「

我前段時間需要這樣做以提高性能並降低延遲。我寫了一個模板最小化器,可以最小化您的模板中的HTML,CSS和Javascript,從而使頁面最小化。它作爲Django命令集成到Django中,理解Django誘惑語言的複雜性,並且是可擴展的。您可以在下面的鏈接找到它PyPI上:

django-template-minimizer