StaticGenerator Pro

Jared Kuoltは、Django用の小さなキャッシュスクリプトを作成しました。 誰もが注目すべき:シンプルさとサイズの両方。



ただし、Jaredが提供するStaticGeneratorスクリプトとnginx構成には次のような欠点があります。

1)登録のないサイトにのみ関連。

2)単純な形式のリンクのみを使用します。

3)コンテンツおよび/またはコメントを変更/追加する場合のみ生成。



これらの欠点を修正し、スクリプトに興味深いものを追加し、 StaticGenerator Proを入手しました



追加機能:
  1. 匿名訪問者のみのキャッシュ

    ページが異なる可能性がある登録ユーザーのリクエストは、キャッシュせずに常にDjangoに直接リダイレクトされますが、この場合は意味がありません。 したがって、StaticGenerator Proは主に匿名ユーザーに役立ちます(通常、99%以上あります)。



    ユーザー定義は、スクリプト内だけでなく、nginx-eでも発生します(Cookie内のsessionidの存在に基づきます)。

    これを行うには、ジェネレーターのスクリプトとnginxの設定を変更する必要がありました。



    匿名ユーザーと匿名ユーザーを区別するために変更されたnginx設定の一部(Apacheバックエンドの代わりに、Djangoはfcgiを介して動作します): http {

    # [here must be all standard parameters]

    server {

    server_name example.com;

    listen 80;

    root /home/mydjangoproject/www;



    # django

    set $django 1;



    # ,

    #

    if ($is_args = "?") {

    set $args_old ?$args;

    }

    if ($is_args = "") {

    set $args_old "";

    }



    # ,

    #

    default_type text/html;



    location / {

    if (-f $request_filename/index.html$args_old) {

    set $django 0;

    }



    #

    if ($http_cookie ~* "sessionid=([^;]+)(?:;|$)" ) {

    set $django 1;

    }



    #

    if ($django = 0) {

    rewrite (.*) $1/index.html$args_old break;

    }



    # django

    if ($django) {

    fastcgi_pass unix:/home/mydjangoproject/dj.sock;

    break;

    }



    index index.html;

    include conf/fastcgi.conf;

    access_log logs/project.log main;

    }

    }

    }





    http {

    # [here must be all standard parameters]

    server {

    server_name example.com;

    listen 80;

    root /home/mydjangoproject/www;



    # django

    set $django 1;



    # ,

    #

    if ($is_args = "?") {

    set $args_old ?$args;

    }

    if ($is_args = "") {

    set $args_old "";

    }



    # ,

    #

    default_type text/html;



    location / {

    if (-f $request_filename/index.html$args_old) {

    set $django 0;

    }



    #

    if ($http_cookie ~* "sessionid=([^;]+)(?:;|$)" ) {

    set $django 1;

    }



    #

    if ($django = 0) {

    rewrite (.*) $1/index.html$args_old break;

    }



    # django

    if ($django) {

    fastcgi_pass unix:/home/mydjangoproject/dj.sock;

    break;

    }



    index index.html;

    include conf/fastcgi.conf;

    access_log logs/project.log main;

    }

    }

    }







    別の素晴らしい機能:

    nginxログでは、ページがキャッシュから提供されたのか、django経由で提供されたのかを確認できます。 ログ形式に$ djangoを追加するのに十分です。

    たとえば、次のように:

    log_format main '$remote_addr [$time_local] "$request" '

    '$status $bytes_sent $body_bytes_sent $gzip_ratio '

    '$django "$http_referer" "$http_user_agent"';







    ログに

    0-ファイルからのページ(キャッシュ)

    1-djangoからfcgi経由のページ

  2. ミドルウェアは 、最初のアクセスで静的ファイルを生成し、後続のファイルはすべてキャッシュから取得されます。

    静的ファイルは、肯定応答(コード200)とタイプGETの要求でのみ作成されます。



    インストールするには、generatorpro.pyをプロジェクトフォルダーに配置します

    そして、settings.py 'generator.ResponseStaticGenerator'のMIDDLEWARE_CLASSESに追加します。

    そこにwwwフォルダーへのパスを登録することを忘れないでください。

    from os import path

    WEB_ROOT = path.realpath("www")







    したがって、プロジェクトディレクトリにキャッシュを配置できます。

  3. www.alrond.com/?test=1のような、 引数を1行に含むリンクの 操作

    一意の各オプションは個別にキャッシュされます。

  4. settings.pyでは、キャッシュから除外されるパスの先頭を設定できます:

    STATIC_GENERATOR_EXCLUDED = (

    '/comments/postfree',

    '/rating',

    '/rss',

    '/admin',

    )






    したがって、たとえば、/ comments / postfree、/ rating、/ rss、/ adminで始まるすべてのパスは除外されます。



    もちろん、アプリケーションでは、一意のデータを匿名ユーザーに表示することもできることに留意する必要があります。この場合、これらのパスも単純に除外できます。

  5. 巧妙なキャッシュ削除

    特定のパスを削除すると、引数を持つすべてのオプションが削除されます(当然、最初の呼び出しの前)。



    たとえば、 http://www.alrond.com/en/index.htmlを削除すると、 http://www.alrond.com/en/index.html? test = 1http://www.alrond.com/が削除されますja / index.html?tag = django&sort = desc
  6. ビューコントローラーのキャッシュから除外する機能

    どのハンドラでも、 応答を返す前に応答['DisableStaticGenerator'] = 1を挿入するだけで十分です。
このスクリプトはうまく機能します。たとえば、自宅のコンピューターで14.2 ppmを生成できる私のブログは、スクリプトで7500 ppmを生成します。 530倍高速です!



StaticGenerator Proはこちらからダウンロードしてください 。 違いは、追加されたResponseStaticGeneratorクラスと若干変更されたdelete_from_path関数にあります。



もとの記事: www.alrond.com/en/2008/feb/23/static-generator-pro



All Articles