2017-01-12 14 views
5

सेवा कार्यकर्ता कोड मैं वर्तमान में मानक लाने घटना श्रोता कि कैश से लौटता है, या आइटम है, तो किसी नेटवर्क अनुरोध चलाता पाठ्यक्रम के हिस्से केप्रबंध सेवा कार्यकर्ता कैश

self.addEventListener('install', function(event) { 
    event.waitUntil(
     caches.open('v1').then(function(cache) { 
      return cache.addAll([ 
       '/react-redux/node_modules/react/dist/react-with-addons.js', 
       '/react-redux/node_modules/react-dom/dist/react-dom.js', 
       '/react-redux/a.js' 
      ]); 
     }) 
    ); 
}); 

में इस तरह दिखता है के साथ प्रयोग कर रहा हूँ के साथ वहाँ नहीं है।

लेकिन क्या होगा अगर, उदाहरण के ऊपर, a.js, और से केवल a.js है अद्यतन है कि कैसे मैं उस फ़ाइल को अद्यतन करने के सेवा कार्यकर्ता मिलता है, लेकिन केवल उस फ़ाइल; और मैं कैसे सुनिश्चित करते हैं कि अगली बार जब उपयोगकर्ता मेरे पृष्ठ को ब्राउज़, वे सेवा कार्यकर्ता से फ़ाइल की अब बासी संस्करण खींच नहीं होगा?

सबसे अच्छा मैं कल्पना कर सकते हैं उन फ़ाइल यूआरएल के लिए एक कैश बस्टर जोड़ने के लिए हो सकता है, उदाहरण के लिए

'/react-redux/node_modules/react/dist/react-with-addons.js?hash=1MWRF3...'

तो अद्यतन जो कुछ मॉड्यूल लोडर मुझे लगता है कि एक ही है, वर्तमान के साथ इन फ़ाइलों का अनुरोध करने का उपयोग कर रहा हैश/कैश बस्टर, और उसके बाद एसडब्ल्यू इंस्टॉलेशन ईवेंट में वर्तमान कैश कुंजियों पर पुनरावृत्ति होती है और जो कुछ भी है, उसे हटा दें, और जो कुछ भी गुम है उसे जोड़ें।

दोनों समस्याओं को हल करने प्रतीत होता है कि: जब किसी फ़ाइल अद्यतन किया जाता है, नेटवर्क अनुरोध भेज दिया जाता है कि अब बासी सेवा कार्यकर्ता में कुछ भी मेल नहीं है, और इसलिए एक ही नेटवर्क वापस आने नहीं होगा; और सेवा कार्यकर्ता के इंस्टॉलेशन ईवेंट में चुनिंदा कैश सम्मिलन उन चीज़ों को जोड़ने की कोशिश नहीं करेगा जो पहले से मौजूद हैं और वर्तमान में हैं।

और हां सेवा कार्यकर्ता कोड इन हैश मान परिवर्तन (एक निर्माण प्रक्रिया से स्वचालित रूप से) और इसलिए दप हो रही फिर से स्थापित करने के लिए जब फ़ाइलें होगा बदलने के लिए, और साथ ही बदल जाएगा की।

लेकिन मैं मदद लेकिन वहाँ एक सरल तरीका है सोच भी नहीं सकते। है?

उत्तर

5

क्या आदर्श होना चाहिए बारे में आपकी समझ, और यह सुनिश्चित करें कि कैश की गई संपत्ति कुशलतापूर्वक और मज़बूती से अपडेट किया जाता है बनाने में कठिनाइयों, स्पॉट पर है।

आप अपने खुद के दृष्टिकोण रोल कर सकता है, वहीं मौजूदा उपकरण है कि प्रत्येक फ़ाइल फिंगरप्रिंटिंग और फिर एक सेवा कार्यकर्ता फ़ाइल है कि अपने कैश की गई परिसंपत्तियों का प्रबंधन पैदा करने की प्रक्रिया को स्वचालित करेगा कर रहे हैं। मैंने उनमें से एक विकसित किया है, sw-precacheoffline-plugin एक और विकल्प है जो समान जमीन को कवर करता है।

+0

बकाया - उन संसाधनों पर दिखेगा। अनेक अनेक धन्यवाद। तो ... क्या आप जेक आर्किबाल्ड के साथ जानते/काम करते हैं? :) –

+3

हां, मेरे पास जेक के सहकर्मी होने का गौरव है! –

+0

तो स्व-सटीक - दुनिया में कैसे यह क्लाइंट साइड/मॉड्यूल लोडिंग के साथ एकीकृत करता है? आप वेबपैक, सिस्टमजेएस, या अन्य विकल्पों का उपयोग कर सकते हैं - क्या आपके यूआरएल लोडर के साथ सिंक करने की आपकी ज़िम्मेदारी होने के साथ-साथ सही यूआरएल का उपयोग करने के लिए स्व-सटीक आउटपुट होता है? –

संबंधित मुद्दे