दस्तावेज़फ़ाइल पृष्ठों के मोड

आईएसआर (बासी-जबकि-पुनर्वैधीकरण)

परिभाषा

आईएसआर प्रति यूआरएल एक पृष्ठ के HTML को कैश करता है, और इसकी विंडो समाप्त होने तक इसे परोसता है। समाप्त हो चुकी प्रति अभी भी परोसी जाती है जबकि पृष्ठभूमि में एक नई प्रति प्रस्तुत की जाती है: वह है बासी-जबकि-पुनर्वैधीकरण।

यह कैसे काम करता है

revalidate = N एक .nexy पेज के फ्रंटमैटर में इसे चालू करता है। N सेकंड की संख्या है; लुप्त, शून्य या ऋणात्मक मान का मतलब है कि कोई कैश नहीं है।

कैश कुंजी केवल अनुरोध पथ है - request.scope["path"]। क्वेरी स्ट्रिंग इसका हिस्सा नहीं है.

क्या मूल्य
कुंजी यूआरएल पथ (/blog/hello)
भंडारण स्मृति में, पृष्ठ को प्रस्तुत करने की प्रक्रिया में
बाध्य प्रति प्रक्रिया 256 प्रविष्टियाँ, कम से कम हाल ही में उपयोग की गई बेदखल
प्रतिक्रिया शीर्षलेख cache-control: public, s-maxage=N, stale-while-revalidate=N

जीवनचक्र का प्रतिपादन

  1. एक पृष्ठ के लिए एक अनुरोध आता है जो revalidate घोषित करता है।
  2. अभी तक कोई प्रविष्टि नहीं: पृष्ठ प्रस्तुत किया गया है, संग्रहीत किया गया है और लौटाया गया है।
  3. N सेकंड से कम उम्र की प्रविष्टि: वैसे ही लौटा दी गई, पृष्ठ प्रस्तुत नहीं किया गया है।
  4. N सेकंड से अधिक पुरानी प्रविष्टि: पुरानी प्रविष्टि तुरंत लौटा दी जाती है, और एक पृष्ठभूमि कार्य एक ताज़ा प्रस्तुत करता है।
  5. यदि वह पृष्ठभूमि रेंडर उठता है, तो पुरानी प्रविष्टि रुक ​​जाती है और अगला पुराना अनुरोध फिर से प्रयास करता है।

कब उपयोग करें

  • प्रत्येक विज़िटर के लिए समान HTML: एक ब्लॉग पोस्ट, एक उत्पाद पृष्ठ, एक दस्तावेज़ीकरण पृष्ठ।
  • पेज अक्सर पढ़ा जाता है और कभी कभार ही बदलता है।
  • डेटा बिना किसी के ध्यान में आए कुछ सेकंड पुराना हो सकता है।

विन्यास

src/routes/blog/index.nexy
---revalidate = 60---<h1>Rendered at most once per minute</h1>

N एक सादा पूर्णांक है। कहीं और कोई प्रति-रूट ओवरराइड नहीं है, और .py हैंडलर पेज नहीं हैं: वे कभी भी इस कैश में प्रवेश नहीं करते हैं।

उदाहरण

एक ब्लॉग पोस्ट जो डेटाबेस पढ़ता है:

src/routes/blog/[slug].nexy
---revalidate = 300slug: prop[str] = "untitled"posts = {"hello": {"title": "Hello"}, "other": {"title": "Other"}}post = posts.get(slug, {"title": "Untitled"})---<h1>{{ post.title }}</h1>

/blog/hello रेंडर और स्टोर करने का पहला अनुरोध। अगले 300 सेकंड मेमोरी से परोसे जाते हैं। /blog/other एक अलग प्रविष्टि है, जिसे स्वयं प्रस्तुत और संग्रहित किया गया है। एक वास्तविक प्रोजेक्ट में posts एक डेटाबेस या सेवा से आता है, जिसे प्रति पुनर्जनन एक बार कहा जाता है।

सीमाएँ

नेक्सी गारंटी देता है कैश कुंजी पथ है, पुरानी प्रतिलिपि पुनर्जनन के दौरान परोसी जाती है, और स्टोर सीमित और थ्रेड-सुरक्षित है।

परंपरा के अनुसार, एक पृष्ठ जो घोषणा करता है कि revalidate सार्वजनिक सामग्री है। इसे ऐसे लिखें जैसे कि प्रत्येक विज़िटर समान HTML देखता है।

आपका एप्लिकेशन बाकी सभी चीज़ों के लिए ज़िम्मेदार है:

सीमा इसका क्या मतलब है
क्वेरी स्ट्रिंग पर ध्यान नहीं दिया गया /search?q=a और /search?q=b एक प्रविष्टि साझा करते हैं। किसी खोज पृष्ठ को कैश न करें.
सत्र पृथक नहीं है प्रतिक्रिया कहती है public, और पहले विज़िटर का HTML सभी को प्रदान किया जाता है। सत्र को कभी भी revalidate वाले पृष्ठ पर न पढ़ें।
कोई सर्वर-साइड अमान्यकरण नहीं कोई भी चीज़ अपनी विंडो समाप्त होने से पहले किसी प्रविष्टि को शुद्ध नहीं करती है। revalidate(...) एक एक्शन के अंदर केवल ब्राउज़र को पथ पुनः लोड करने के लिए कहता है; यह इस कैश को नहीं छूता.
प्रति प्रक्रिया एक कैश कई कर्मचारी विभिन्न सामग्रियों के साथ कई कैश रखते हैं।
समवर्ती पुनर्जनन कुछ भी उन्हें डुप्लिकेट नहीं करता: दस पुराने अनुरोध दस रेंडर शुरू कर सकते हैं।
त्रुटियाँ मौन हैं एक असफल पुनर्जनन पुराने पृष्ठ की सेवा करता रहता है; विफलता लॉग की गई है, वापस नहीं की गई है।

अगले चरण

GitHub पर संपादित करें

Enter परिणाम खोलता है, Esc बंद करता है।