स्टैटिस्टिकनर प्रो

जेरेड कुओलट ने Django के लिए एक छोटी सी कैचिंग स्क्रिप्ट बनाई है। सभी के लिए उल्लेखनीय: सादगी और आकार दोनों।

लेकिन जेरेट द्वारा प्रदान किए गए स्टैटिस्टिकर स्क्रिप्ट और नेगनेक्स कॉन्फिग में नुकसान हैं:
1) केवल पंजीकरण के बिना साइटों के लिए प्रासंगिक;
2) केवल एक सरल रूप के लिंक के साथ काम करें;
3) पीढ़ी केवल तभी जब / सामग्री और / या टिप्पणियां जोड़ / बदल रही हों।

मैंने इन कमियों को ठीक किया, स्क्रिप्ट के लिए कुछ दिलचस्प जोड़ा, और मुझे स्टैटिकनरनर प्रो मिला।

इसकी अतिरिक्त विशेषताएं:
  1. अनाम आगंतुकों के लिए ही कैशिंग
    पंजीकृत उपयोगकर्ताओं के अनुरोध, जिनके लिए पृष्ठ भिन्न हो सकते हैं, हमेशा कैशिंग के बिना, सीधे Django के लिए पुनर्निर्देशित किए जाते हैं, जो इस मामले में कोई मतलब नहीं है। इस प्रकार, StaticGenerator प्रो मुख्य रूप से गुमनामी के लिए उपयोगी है (और आमतौर पर उनमें से 99% से अधिक हैं)।

    उपयोगकर्ता की परिभाषा न केवल स्क्रिप्ट में होती है, बल्कि नग्नेक्स-ई में भी होती है (यह कुकीज़ में सेशनिड की उपस्थिति पर आधारित है)।
    ऐसा करने के लिए, जनरेटर की स्क्रिप्ट और नगीनक्स कॉन्फ़िगरेशन में परिवर्तन करना आवश्यक था।

    अधिकृत उपयोगकर्ताओं से अनाम को अलग करने के लिए संशोधित nginx config का एक टुकड़ा (अपाचे बैकेंड के बजाय, 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 के अनुरोध के साथ बनाई जाती हैं।

    इंस्टॉल करने के लिए, प्रोजेक्ट फोल्डर में जनरेटरप्रूफ को जगह दें
    और सेटिंग 'Oracle.ResponseStaticGenerator' में MIDDLEWARE_CLASSES जोड़ें।
    वहां www फ़ोल्डर में पथ पंजीकृत करने के लिए मत भूलना।
    from os import path
    WEB_ROOT = path.realpath("www")

    इसलिए आप कैश को प्रोजेक्ट डायरेक्टरी में रख सकते हैं।
  3. एक पंक्ति में तर्कों के साथ काम करना , जैसे www.alrond.com/?test=1
    प्रत्येक अद्वितीय विकल्प को अलग से कैश किया जाता है।
  4. सेटिंग्स में यह संभव है कि जिन रास्तों को कैशिंग से बाहर रखा गया है, उनकी शुरुआत सेट करें :
    STATIC_GENERATOR_EXCLUDED = (
    '/comments/postfree',
    '/rating',
    '/rss',
    '/admin',
    )

    इस प्रकार, उदाहरण के लिए, / टिप्पणियों / पोस्टफ्री, रेटिंग, / आरएसएस, / व्यवस्थापक के साथ शुरू होने वाले सभी रास्तों को बाहर रखा गया है।

    बेशक, आपको अपने अनुप्रयोगों को ध्यान में रखने की आवश्यकता है कि कभी-कभी अनूठे डेटा को अनाम उपयोगकर्ताओं को भी प्रदर्शित किया जा सकता है, जिस स्थिति में इन रास्तों को भी केवल बाहर रखा जा सकता है।
  5. चालाक कैश डिलीट
    एक विशिष्ट पथ को हटाने से तर्कों के साथ सभी विकल्पों को हटा दिया जाता है (स्वाभाविक रूप से, पहले कॉल से पहले)।

    उदाहरण के लिए, http://www.alrond.com/en/index.html हटाने से http://www.alrond.com/en/index.html?test=1 और http://www.alrond.com/ हट जाएंगे । en / index.html? tag = django & sort = desc
  6. विचारों नियंत्रक में कैश से बाहर करने की क्षमता
    किसी भी हैंडलर में रिटर्न प्रतिक्रिया से पहले [[DisableStaticGenerator]] = 1 को सम्मिलित करना पर्याप्त है
स्क्रिप्ट महान काम करती है: मेरा ब्लॉग, उदाहरण के लिए, मेरे घर के कंप्यूटर पर 14.2 पीपीएम उत्पन्न करने में सक्षम है, स्क्रिप्ट के साथ 7500 पीपीएम उत्पन्न करता है। यह 530 गुना तेज है!

डाउनलोड StaticGenerator प्रो यहाँ । अंतर जोड़ा ResponseStaticGenerator वर्ग और थोड़ा संशोधित delete_from_path फ़ंक्शन में है

मूल लेख: www.alrond.com/en/2008/feb/23/static-generator-pro

Source: https://habr.com/ru/post/In20922/


All Articles