12

私はdjangoテンプレートを使用していますが、読みやすくするために、次のような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...

一部のページでは、ページのソースを表示すると、最大3,000行のHTMLが実行されます。

実行時にこのhtmlを圧縮するツールはありますか?余分な改行を削除するツールはどうですか?

4

7 に答える 7

6

少し背景として、これは意図的に行われます。Djangoのテンプレートエンジンは現在、タグが削除された後に空白と評価される行のサニタイズを気にしないため、応答を提供する際にパフォーマンスにわずかなペナルティが発生します。レンダリングされたテンプレートの全内容を評価する後処理ステップ。

それでも、迅速な解決策が必要な場合は、StripWhitespaceMiddlewareテキスト応答から偽の空白を削除する応答ミドルウェアを使用することをお勧めします。テンプレートエンジン自体のように正規表現マッチングを採用しているため、非常に高速で簡単です。より負担が大きいが強力な代替手段は、生の応答をまだ読んでいる貧しい人間を本当に気にかけている場合、HTMLプリティファイアを利用する応答ミドルウェアをデプロイすることです。

于 2012-07-29T22:47:56.097 に答える
4

django-htmlminパッケージは素晴らしいです、それはそれがHTML 5をサポートすることに加えて、多くの制御と機能を提供します。

于 2014-10-02T13:37:20.553 に答える
2

周りを見回して、django-pipelineを見つけました。今では、ミドルウェアを試しましたが、それはまさに私が期待していることです。すべてのhtmlノードとテキストノードを縮小し、javascriptノードに手を加えないようにします。

ミドルウェアの実装と基本的なテスト結果は約4分です。ミドルウェアをgzipで圧縮した後、またはMIDDLEWARE_CLASSES設定の上で、ミドルウェアをpipインストールしてアクティブ化するだけです。

https://github.com/cyberdelia/django-pipeline

http://django-pipeline.readthedocs.org/en/latest/

于 2013-02-07T22:01:56.730 に答える
2

のようなフロントエンド開発ツールをgrunt-contrib-htmlmin使用して、Djangoテンプレートファイルを本番サーバーにデプロイする前に縮小する必要があると思います。

このように、ミニファイプロセスは「ビルド時」に発生し、HTMLミニファイ用のサーバーCPUリソースを「ランタイム」に節約します。

このツールは元々HTMLを縮小するために設計されていますが、試してみたところ、Djangoテンプレートでも機能します。

于 2014-03-24T01:17:30.807 に答える
1

Nginxで使用している場合、そのStripモジュールはhtmlをクリーンアップすることで本当に素晴らしい仕事をしています。リアルタイムで透過的です。正しく設定すれば、気にする必要はありません。

http://wiki.nginx.org/HttpStripModule

于 2012-07-30T09:49:24.107 に答える
1

「grunt-contrib-htmlminなどのフロントエンド開発ツールを使用して、Djangoテンプレートファイルを本番サーバーにデプロイする前に縮小する必要があると思います。」

パフォーマンスを向上させ、レイテンシーを減らすために、これを少し前に行う必要がありました。ページが最小化されるように、テンプレート内のHTML、CSS、およびJavascriptを事前に最小化するテンプレート最小化を作成しました。DjangoコマンドとしてDjangoに統合され、Djangoの魅力的な言語の複雑さを理解し、拡張可能です。以下のリンクでpypiで見つけることができます:

django-template-minimizer

于 2016-01-05T02:56:56.520 に答える
0

カスタムテンプレートローダーdjango-spaceless-templatesを使用することをお勧めします。これにより、不要な空白文字が削除されます。このアプローチには2つの利点があります。

  • キャッシュされたテンプレートローダーと組み合わせることで、空白の除去はテンプレートのコンパイル中に1回だけ実行されます。一方、{%spaceless%}またはミドルウェアアプローチでは、テンプレートがレンダリングされるたびにミニファイが呼び出されます。
  • 空白の除去はより積極的になる可能性があります-HTMLタグ、Djangoタグ、および変数の間のスペースを削除します。
于 2021-06-19T21:21:56.140 に答える