2015-07-23 10 views
5

मैं एक ऑफ़लाइन एप्लिकेशन विकसित कर रहा हूं जिसमें .php पृष्ठों का एक सेट भी है। वर्तमान में मैंने उन php फ़ाइलों को एक .appcache मेनिफेस्ट फ़ाइलों में रखा है और यह ठीक काम करता है। लेकिन मुद्दा यह है कि, हालांकि मैं ऑनलाइन हूं, जब मैं एक php पेज तक पहुंचने का प्रयास करता हूं, तो यह कैश किए गए संस्करण को लोड करता है। मैं जो पसंद करता हूं वह इस तरह की कार्यक्षमता है,एचटीएमएल 5 एपकेच में कैशिंग PHP पेज

  • यदि ऑनलाइन - सर्वर से कनेक्ट करें और अद्यतित जानकारी लोड करें, और कैश किए गए एक को नई जानकारी के साथ ओवरराइट करें।
  • ऑफ़लाइन अगर - अंतिम अद्यतन स्थिर HTML पृष्ठ दिखाएं।

यहाँ मेरी .appcache मैनिफ़ेस्ट फ़ाइल सामग्री

CACHE MANIFEST 
#2 
taskmanager.php 
public/css/bootstrap.css.map 
public/css/bootstrap.min.css 
public/css/bootstrap-theme.css.map 
public/css/bootstrap-theme.min.css 
public/css/main.css 
public/css/task-manager.css 
public/js/app.js 
public/js/taskmanager.js 
public/js/offlink.js 
public/js/jquery-2.1.4.js 
public/js/bootstrap.min.js 

NETWORK: 
* 
http://* 

क्या taskmanager.php है एक डेटाबेस से कार्यों पढ़ सकते हैं और यह दिखाने जाता है। जब मैं इसे उपरोक्त की तरह कैश करता हूं, तो यह हमेशा कार्यों की सूची दिखाएगा जब इसे पहली बार लोड किया गया था। यहां तक ​​कि जब मैं ऑनलाइन हूं, यह डेटाबेस को कॉल नहीं करता है और नई प्रविष्टियां प्राप्त करता है। इसके बजाय यह कैश से भरा हुआ है। तो, मेरा समाधान इसे पहले जवाब द्वारा उल्लिखित FALLBACK अनुभाग में रखना था। यहां तक ​​कि अगर मैं नीचे की तरह वापस आने धारा के तहत taskmanager.php फ़ाइल शब्दों में कहें,

FALLBACK 
taskmanager.php static_taskmanager.php 

अब, अगर मैं इंटरनेट कनेक्शन है, taskmanager.php चलेंगे और मुझे नवीनतम कार्यों में दिखाई देंगे। लेकिन मैं static_taskmanager को इस तरह से बनाना चाहता हूं कि इसे उन नवीनतम कार्यों के साथ सिंक्रनाइज़ किया जाएगा। जिसका अर्थ है, जब उपयोगकर्ता ऑफलाइन हो जाता है, static_taskmanager.php कार्य की सबसे हाल की सूची दिखाएगा जो उपयोगकर्ता द्वारा ऑनलाइन होने पर taskmanager.php द्वारा वापस किया गया था)। लेकिन फिलहाल यह एक पूर्ण स्थिर पृष्ठ के रूप में काम करता है।

  1. क्या ऐसा करना संभव है?
  2. मैं इस मुद्दे को कैसे हल कर सकता हूं?

संपादित

जैसा कि मैंने इतना पर खोजते समय और गूगल द्वारा समझा, इस को प्राप्त करने का एक ही रास्ता है AJAX का उपयोग कर गतिशील सामग्री लोड है। लेकिन मुझे आश्चर्य है कि केवल मैनिफेस्ट फ़ाइल का उपयोग करके करना संभव है।

उत्तर

1

FALLBACK का उपयोग करने के बारे में क्या?

fallback

fallback अनुभाग ब्राउज़र उपयोगकर्ता की कोशिश करता है ऑफ़लाइन रहते हुए कोई uncached संसाधन का उपयोग करने के लिए जब क्या सेवा करने के लिए कहता है। इस वजह से, यह कैच और नेटवर्क से थोड़ा अलग दिखता है। इसमें एक स्थान से अलग, प्रति पंक्ति दो मान हैं। पहला मान अनुरोध है कि मिलान करने के लिए यूआरआई, और दूसरा मिलान पर भेजा संसाधन है। यह ऑफलाइन उपयोग के अधिकार पर संसाधन को कैश करता है, इसलिए यह स्पष्ट पथ होना चाहिए। (http://html5doctor.com/go-offline-with-application-cache/)

FALLBACK: 
/main.php /static.php 
इस कॉन्फ़िगरेशन के साथ

, /main.php के लिए अनुरोध जब तक कि उपयोगकर्ता ऑफ़लाइन है, जिस स्थिति में उपयोगकर्ता /static.php के अंतिम कैश्ड संस्करण देखेंगे परोसा जाएगा।

याद रखें कि आपके सर्वर पर संपत्तियों को अपडेट करने से कैश अपडेट ट्रिगर नहीं होगा। आपको मेनिफेस्ट फ़ाइल को संशोधित करना होगा। उस स्थिति में, जब आप static.php का एक नया संस्करण बनाया जाता है, तो हो सकता है कि आप एक संस्करण या टाइमस्टैंप टिप्पणी के साथ प्रकट होना चाहें।

# Generated: 2015-07-23 10:34a 

बाद में नोटों

इस मामले में, मैं कैश से main.php निकालने या एक स्थिर वापस आने उपयोगकर्ता जानते हैं कि वे पुरानी सामग्री को देख रहे हैं देता है कि होने की सिफारिश करेंगे। इसका कारण यह है कि यदि static.php अपडेट किया गया है, तो यदि उपयोगकर्ता लाइन से बाहर है और उसे अपडेट नहीं मिलता है, तो वे वैसे भी पुरानी सामग्री देखेंगे।

आप प्रदर्शन के मुद्दों को देख रहे हैं और सर्वर पर लोड कम करने के लिए चाहते हैं, तो आप wget का उपयोग कर main.php की एक स्थिर संस्करण बना सकते हैं, तो जैसे:

wget http://example.com/main.php -O main.html 

यह पृष्ठ उन स्टोर करेगा एचटीएमएल के रूप में एक क्रॉन नौकरी के रूप में भागो, इसे हर पांच मिनट या तो ताज़ा किया जा सकता है।

विकल्प static.php और एपकेच को हर बार अपडेट करना है, जिससे सभी संपत्तियों को फिर से लोड किया जा सकता है - इस प्रकार कैश के इरादे को हराया जाता है।

+0

प्रतिक्रिया के लिए धन्यवाद। हां, फॉलबैक मेरे समाधान के पूरे हिस्से को हल करेगा। मैं main.php के साथ समन्वयित static.php भी बनाना चाहता हूं। जिसका अर्थ है, जब भी main.php की सामग्री बदलती है, तो मैं इसे कैश किए गए static.php को ओवरराइट करना चाहता हूं (इसलिए, alwasy static.php नवीनतम संभव जानकारी दिखाएगा)। क्या क्लाइंट साइड में ऐसा करना संभव है? – arunatebel

+0

प्रत्येक बार main.php परिवर्तनों को टाइमस्टैम्प को अपडेट करना ब्राउज़र को मैनिफेस्ट और static.php – user2182349

+0

के नए संस्करण का अनुरोध करने का कारण बनता है वास्तव में 'परिवर्तन' से मेरा मतलब है कि ज्यादातर डेटाबेस परिवर्तन होते हैं। उदाहरण के लिए कहें: main.php डेटाबेस से जानवरों के नाम प्रिंट करता है। इसलिए, जब इसे पहली बार लोड किया जाता है तो यह जानवरों के नामों को पढ़ेगा और एचटीएमएल पेज को ऐपकेच में कैश किया जाएगा। इसके बाद हर बार जब मैं पृष्ठ को फिर से लोड करता हूं (यहां तक ​​कि जब मैं ऑनलाइन हूं) यह नामों का एक ही सेट दिखाएगा, ** हालांकि डेटाबेस बदल जाता है **। मैं चाहता हूं कि इन डेटाबेस परिवर्तनों का ट्रैक रखें, किसी भी तरह से उन परिवर्तनों को सिंक करके कैश किए गए संस्करण को अद्यतित करें। मुझे उम्मीद है कि आप बिंदु प्राप्त करेंगे? – arunatebel

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