2012-02-15 10 views
22

अद्यतन:मेरे एचटीएमएल 5 एप्लिकेशन कैश प्रकट सब कुछ कैश कर रहा है

** मैं इस प्रश्न पोस्ट जब यह सुविधा वास्तव में नया था, मैं अब कि इस सुविधा इस तरह से नहीं किया जाना चाहिए जब तक कि यह जावास्क्रिप्ट के माध्यम से प्रयोग किया जाता है का एहसास । लेकिन ऐसा लगता है कि यह हैक सबसे शुरुआती लोगों के लिए एक अच्छा समाधान है जो इस सुविधा की एक ही गलती और दुरुपयोग करते हैं। यदि आप अपने एचटीएमएल को छोड़कर सबकुछ कैश करना चाहते हैं तो इसे जेएस के साथ किया जाना चाहिए या आप नीचे दिए गए समाधान का उपयोग कर सकते हैं **

मुझे लगता है कि मेरा प्रश्न इस पर उबाल जाता है: यदि फ़ाइल के मैनिफेस्ट विशेषता का उपयोग करके मैनिफेस्ट का संदर्भ दे रहा है एचटीएमएल टैग मास्टर कैच एंटरप्राइज़ के अंतर्गत आता है कि आपके पास एक गतिशील पृष्ठ मेनिफेस्ट का उपयोग कैसे कर सकता है।

मेरे फ़ाइल इस तरह दिखता है:

CACHE MANIFEST 

CACHE: 
# IMAGES: 
/stylesheets/bg.jpg 
/stylesheets/cont_bg.png 
#and so forth.. 

#EXTERNAL 
http://chat.mydomain.com/themes/images/panel_bg.png 
http://chat.mydomain.com/themes/images/images_core.png 

#################################### 
#STYLE SHEETS: 
/stylesheets/min.css 
/stylesheets/css_night.aspx 

##################################### 
#JAVASCRIPT: 
/JAVASCRIPT/header_javascript.js 

#EXTERNAL: 
http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js 
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js 

FALLBACK: 
//offline.php 

NETWORK: 
* 

अब समस्या एक बार मैं एक पेज प्रकट में नहीं ब्राउज़ है, index.php, जब मैं पहले पृष्ठ और वहाँ में देखते हैं जैसे मेरे वास्तविक गतिशील php फ़ाइलें कोई कैश क्रोम जाता है:

Adding master entry to Application Cache with manifest http://208.109.248.197/manifest.appcache 

Application Cache Downloading event 
Application Cache Progress event (0 of 28) 
... 
Application Cache Progress event (28 of 28) 
Application Cache NoUpdate event 

अब तक तो अच्छा, जब तक मैं वास्तव में एक पृष्ठ लोड, और क्रोम जाता है:

Application Cache UpdateReady event 
Adding master entry to Application Cache with manifest http://mydomain.com/manifest.appcache 

अब के रूप में आप अंतिम पंक्ति यह अपने आवेदन कैश करने के लिए index.php कहते हैं में देख सकते हैं और मैं यूआरएल पर जाकर इसे सत्यापित कर ली है chrome://appcache-internals/

इसे कहते हैं:

Flags URL Size (headers and data) 
Explicit, http://mydomain/JAVASCRIPT/header_javascript.js 57.5 kB 
Master, http://mydomain/home.php 51.2 kB 
Master, http://mydomain/index.php 53.5 kB 
Master, Fallback, http://mydomain/offline.php 49.4 kB 

जहां index.php तरह बातें और home.php कैश्ड नहीं माना जाता है। मैं इसे बताना चाहता हूं कि यदि संभव हो तो किसी भी एचटीएमएल एक्सटेंशन को कैश न करें। लेकिन यहां मैंने विभिन्न आरएफसी से क्या सीखा है, मेरा मानना ​​है कि: एक ऑनलाइन श्वेतसूची वाइल्डकार्ड ध्वज, जो या तो खुला या अवरुद्ध है।

The open state indicates that any URL not listed as cached is to be implicitly treated as being in the online whitelist namespaces; the blocking state indicates that URLs not listed explicitly in the manifest are to be treated as unavailable. 

अच्छी तरह से मैं इन ऑनलाइन सफेद सूची वाइल्डकार्ड झंडे में से एक का उपयोग करें और अवरुद्ध करने के लिए इसे सेट करना चाहते हैं, लेकिन मैं कोई स्पष्टीकरण या उदाहरण आगे और अधिक नहीं मिल रहा। मैं भी पढ़ें:

zero or more URLs that form the online whitelist namespaces. 

These are used as prefix match patterns, and declare URLs for which the user agent will ignore the application cache, instead fetching them normally (i.e. from the network or locale HTTP cache as appropriate). 

मैं भी इस तरह की कुछ पैटर्न का उपयोग करने के लिए लेकिन फिर मुझे कोई दस्तावेज़ीकरण देख सकते हैं करना चाहते हैं। ऐप कैश मेनिफेस्ट प्रलेखन का कोई संकेत क्यों नहीं है और इसका उपयोग करने के लिए कोई अन्य वेबसाइट नहीं है, क्योंकि मेरी क्रोम एपैच निर्देशिका कोई भी नहीं दिखाती है!?

आपके समय के लिए धन्यवाद!

मैं परम उत्तर नहीं मिला, लेकिन मैं क्या सीखा है से ऐसा लगता है कि प्रकट हर पृष्ठ पर सेट किया जा करने के लिए नहीं है:

उत्तर

26

यहाँ एक हैक मैं चारों ओर खेल कर पता चला है। फिर मुझे यकीन नहीं है लेकिन यह एक हैक है कि मैं पार आया। मैं इस तरह के manifest.html है कि

<html manifest="manifest.appcache"> 

मुझे पता चला कि पृष्ठों जो इस की जरूरत नहीं है कैश के लिए जोड़ा जा नहीं होगा लेकिन वे अभी भी एप्लिकेशन को कैश करता है, तो एक ही डोमेन पर उपयोग जारी रहेगा के रूप में एक पृष्ठ है। अगर आप मेनिफेस्ट शामिल हैं तो पहले।एक सादे html पृष्ठ everypage यह क्रोम की तरह है कि पेज को कैश नहीं होगा पर किसी iframe में यह है कि HTML नहीं करेगा उत्पादन:

Adding master entry to Application Cache with manifest 

लेकिन अगर आप टैब नेटवर्क के लिए जाना आप देखेंगे कि यह कैश

उपयोग कर रहा है देखेंगे temporary_manifest_hack.html की
<iframe id='manifest_iframe_hack' 
    style='display: none;' 
    src='temporary_manifest_hack.html'> 
</iframe> 

सामग्री:

<!DOCTYPE HTML> 
<html lang="en" class="no-js" manifest="manifest.appcache"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Hack 4 Manifest</title> 
    </head> 
    <body></body> 
</html> 
+0

यह मेरे लिए अच्छा काम करता है। पोस्ट करने का शुक्रिया। –

+1

मैं समझता हूं कि, मेरा मुद्दा यह था कि: आप मुख्य HTML पृष्ठ के बिना ब्राउज़र कैश को एप्लिकेशन कैश का उपयोग और परिचय कैसे देते हैं ... यदि यह कोई समझ में आता है। – Neo

+1

@Neo आप मुख्य पृष्ठ की सेवा कर सकते हैं, जिसे आप "नो-स्टोर" कैश निर्देश के साथ कैश नहीं करना चाहते हैं। – oberhamsi

10

appcache हमेशा पेज कि html टैग में मेनिफ़ेस्ट विशेषता शामिल हों।

यदि आप चाहते हैं कि वह पृष्ठ स्वयं गतिशील हो, तो आपको नेटवर्क्स अनुभाग में मौजूद किसी सेवा के लिए AJAX कॉल के साथ सामग्री लोड करनी होगी।

+1

+1 यह एक बेहतर तरीका है। जब मैंने यह प्रश्न लिखा था तो ऐप कैश नया था और कई लोगों ने स्वयं को HTTP हेडर से निपटने के बिना त्वरित कैश समाधान के लिए इस्तेमाल किया था, मुझे अभी भी लगता है कि इसे पूरी तरह से समझने पर हैक के रूप में इस्तेमाल किया जा सकता है, जो आप सुझा रहे हैं इस तकनीक का उपयोग करने का सही तरीका है, मेरा जवाब यह है कि स्थिर सामग्री को कैशिंग करने के लिए हैक के रूप में इसका उपयोग कैसे करें, एक गतिशील पृष्ठ पर जो पूरी तरह से अजीब है। – Neo

+0

@ जोएरी यह अभी भी उस पृष्ठ को एपकेच में सहेज लेगा, इसलिए यदि आपके पास कई मार्ग हैं (उदा। Domain.com/userId) तो यह काम नहीं करता है। – themihai

3

मुझे लगता है कि इफ्रेम-वर्कअराउंड काम नहीं करता है। अगर आपको लगता है कि फाइलें एपकेच से लगी हुई हैं: नहीं। वे ब्राउज़र कैश से आ रहे हैं।

devtools-settings में ब्राउज़र कैश अक्षम करें "नेटवर्क" पर अनदेखा करें। आप देख सकते हैं कि सभी तत्व नेटवर्क के माध्यम से लोड किए जाएंगे और वे (ऐप) कैश नहीं आते हैं।

+0

फिर आपने अपने एपैच मैनिफेस्ट में फ़ाइलों को निर्दिष्ट नहीं किया होगा। क्या आप init लॉग देखते हैं? – Neo

+0

हां। मैंने जेएस और सीएसएस में 'नो-कैश' सेट किया है, और फिर पाते हैं कि उनमें से सभी सर्वर से '200' हैं, ** ** कैश से नहीं ** !! – Turtle

+0

@Neo मैं उन्हें प्रकट में बना देता हूं, लेकिन इसका कोई उपयोग नहीं करता है। – Turtle

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