Drupal 7での圧縮


7

Apache 2.2でDrupal(最新バージョン7.22)を実行しています。また、Varnish(モジュールとプロキシ)もインストールしています。Apacheでは、mod_deflateモジュールを無効にしました。Webを読んでいると、Drupalのパフォーマンスページのオプション(集約css、js)はcssファイルとjsファイルを圧縮すべきではないようです。しかし、自分のサイトを閲覧してhttpヘッダーを確認すると、「Content-Encoding:gzip」を受信して​​います。(デフォルト).htaccessを見ると、gzipで圧縮されたファイルを、それらを読み取ることができるクライアントに提供するために、いくつかの書き換えルールがあることがわかります。だから、これが "Content-Encoding:gzip"ヘッダーの出所だと思います。また、drupalのパフォーマンス設定ページでキャッシュされたページの圧縮を有効にすると、要求しているページのhtml(匿名ユーザーのみ)でも圧縮されて返されます。

1)「CSSファイルを集約して圧縮する」オプションを実行します。および「集約JavaScriptファイル」。実際に集約されたファイルを圧縮しますか、それとも.htaccessがそれらをgzipしたように見えるだけですか?Chromeデベロッパーツールを使用すると、ファイルは圧縮されているように見えます。しかし、Firefoxの開発者ツールバーアドオンでそれらをチェックすると、(情報->ドキュメントサイズの表示)圧縮されたものとして報告されません(認証済みユーザーとしてアクセスした場合でも、htmlファイルは常にそのように報告されます!)

2)それらが実際にgzipされている場合、圧縮はどこで行われますか?どういうわけか圧縮などのレベルを制御できますか?

3)X-Drupal-Cache "MISS"を常に受け​​取っています。Varnishがインストールされているので、あまり気にしません。それでも、キャッシュにアクセスしていないため、圧縮されたhtmlファイル(キャッシュにない)が返されるのはなぜですか?

4)Varnishモジュールが何かを混乱させる可能性はありますか?どんな場合でもVarnishがバイパスされるように、httpsでWebサイトにアクセスしています。

5)mod_deflateを有効にする場合、.htaccessのその部分をそのまま残すべきですか?mod_deflateでは事前圧縮ができないことを理解していますが、圧縮の方が優れている場合はどうなりますか?

6)また、drupalがそれ自体でcss、js、htmlファイルを圧縮する場合、これらのファイルに対してmod_deflateを有効にする意味は何ですか?

参考のために、ここに私の.htaccessファイルの関連部分を示します。

  <IfModule mod_headers.c>
    # Serve gzip compressed CSS files if they exist and the client accepts gzip.
    RewriteCond %{HTTP:Accept-encoding} gzip
    RewriteCond %{REQUEST_FILENAME}\.gz -s
    RewriteRule ^(.*)\.css $1\.css\.gz [QSA]

    # Serve gzip compressed JS files if they exist and the client accepts gzip.
    RewriteCond %{HTTP:Accept-encoding} gzip
    RewriteCond %{REQUEST_FILENAME}\.gz -s
    RewriteRule ^(.*)\.js $1\.js\.gz [QSA]

    # Serve correct content types, and prevent mod_deflate double gzip.
    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]

    <FilesMatch "(\.js\.gz|\.css\.gz)$">
      # Serve correct encoding type.
      Header set Content-Encoding gzip
      # Force proxies to cache gzipped & non-gzipped css/js files separately.
      Header append Vary Accept-Encoding
    </FilesMatch>
  </IfModule>

回答:


3

スタート:

1)はい。

注:何が起こっているのかを本当に知りたい場合は、フィドラー(Windows)を使用します。

2)common.inc(行3603)の関数drupal_build_css_cache()を参照してください。レベルに影響を与えることはできませんが、変数「css_gzip_compression」を使用して圧縮するかどうかに影響を与えることができます。default.settings.php行432を参照してください。

ところで:あなたは圧縮レベルに影響を与えたくありません:一度だけ圧縮するために、多くの場合を使用してください、最大圧縮は常に最高です。クライアントでの転送時間と解凍時間は、圧縮されたドキュメントサイズに比例します。そのため、パフォーマンスヒットが1回わずかに増加するだけで、将来、ネットワークアクティビティとクライアント側の処理の多くが節約されます。

3)-

4)-

5)圧縮は1回だけ行われるため、より良いでしょう。また、各リクエストで圧縮するmod_deflateと比較してより効率的に行われるため、圧縮レベルが低くなります。私はmod_deflateについてはあまり知りませんが、コンテンツが圧縮されていることを通知するContent-Encodingヘッダーがすでに存在する場合、mod_deflateはそれに触れるべきではないと思います。しかし、私は2度圧縮されたバックアップファイルを取得する場合がありました。そのため、mod_deflateはそれほど賢くなく、そのように明示的に指示する必要があります。

6)意味はありませんが、他のリクエスト、特に動的なリクエスト、つまりキャッシュ不可能なページについてはあるかもしれません。集約されたcssとjsとキャッシュされたページ(変数 'page_compression')のみがDrupalによって圧縮されることに注意してください。キャッシュ不可のページはDrupalによって圧縮されません。


0

私がこれまでに見つけたものとfietserwinの答えを要約します。

1)これらのオプションは圧縮されます。あなたが他で読んだものに関係なく。drupalバグトラッカーのいくつかのバグを調べましたが、drupal のパフォーマンス設定のさまざまなオプションでこの動作を実際に分離することについて説明するいくつかのバグがあります(たとえば、このd8の説明)。また、Chromium devtoolsまたはFirefox Networkパネルで(size列ではなく、Content-Encoding:gzipの応答ヘッダーを確認して)確認し、drupalでcss / js集約に使用できるオプションを切り替えることができます。開発者ツールバーが壊れているように見えるか、何ができるのか理解できません。

css_gzip_compression変数とjs_gzip_compression変数をFALSEに設定することで、集約は可能ですが圧縮はできません(fietserwinを参照)。

2)圧縮はphpコードで行われます。詳細については、fietswinの答えを参照してください。圧縮レベルに関する彼の答えから判断すると、php(少なくともdrupalの場合)は、圧縮の最大レベルで圧縮していると思います。PHPで圧縮し、Webサーバーに依存しないことは、owncloud、flysprayなど、他の多くのphpアプリケーションで一般的であることに注意してください。

3)これは少し奇妙ですが、なぜそれが起こるのかまだ分かりません。ニスモジュールと関係があると思います。私はワニス2を圧縮サポートなしで実行しているので、ワニス自体は言っていません)。これは、ワニスを介してサイトにアクセスした場合にのみ発生します(つまり、ワニスをバイパスするhttpsでアクセスした場合、ページはキャッシュされず、gzipされません)。そして、「キャッシュされたページを圧縮する」オプションを有効にしている場合。したがって、私の推測では、varnishモジュールはdrupalのキャッシュメカニズムを完全に引き継ぎますが、それでもこれらのオプションを使用して、varnishキャッシュの動作(圧縮、寿命など)を設定します。

これに関する情報が見つからず、すべてのhtmlファイルをgzipするようにmod_deflateを設定しているため、このオプションを無効にして、キャッシュされたページが二重に圧縮されるのを防ぎました。これを防ぐために、css / jsのように、チェックまたはsthがあるかもしれませんが、見つかりませんでした。

4)時代遅れの質問

5)圧迫は、Apacheではなくdrupalで行う必要があります。そこでは、それは(たまに)一度だけ起こります。したがって、上記の.htaccessの抜粋はそのままにしておく必要があります。それは何ですか:

RewriteCond %{HTTP:Accept-encoding} gzip #if the client can handle compression
RewriteCond %{REQUEST_FILENAME}\.gz -s #and if the (aggregated css file already exists
RewriteRule ^(.*)\.css $1\.css\.gz [QSA] #serve the compressed file instead

# The same for js files
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]

# Do no actual rewriting but set the no-gzip apache variable to inform apache not to compress the already compressed files.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]

したがって、メカニズム全体を安全に利用するには、この部分をそのままにしておく必要があります。上記のように、圧縮はおそらく最高です。

6)fietserwinの答えに追加するために、サーバー上で他のアプリも実行されている可能性があります。全体として、apacheでもcssとjsの圧縮を有効にするだけで、drupalのhtaccessは二重圧縮を防ぎます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.