2008-11-19 14 views
8

मेरे पास एकाधिक मॉड्यूल के साथ एक फ्लेक्स एप्लिकेशन है।ब्राउज़र में फ्लेक्स एप्लिकेशन कैशिंग को रोकना (एकाधिक मॉड्यूल)

जब मैं एप्लिकेशन को दोबारा तैनात करता हूं तो मुझे लगता है कि मॉड्यूल (जिन्हें अलग-अलग swf फ़ाइलों के रूप में तैनात किया गया है) ब्राउज़र में कैश किए जा रहे थे और नए संस्करण लोड नहीं किए जा रहे थे।

इसलिए मैंने लोड होने पर सभी मॉड्यूल में ?version=xxx जोड़ने की पुरानी चाल की कोशिश की।

var moduleSection:ModuleLoaderSection; 
moduleSection = new ModuleLoaderSection(); 
moduleSection.visible = false; 
moduleSection.moduleName = moduleName + "?version=" + MySite.masterVersion; 

इसके अलावा मैं मुख्य .swf कि लोड किया जा रहा था के लिए ?version=xxx जोड़ने के लिए की जरूरत: मूल्य xxx एक वैश्विक पैरामीटर जो वास्तव में मेजबान html पृष्ठ में संग्रहीत किया जाता है। चूंकि यह एचटीएमएल द्वारा किया जाता है मैं संशोधित मेरी AC_OETags.js नीचे के रूप में फाइल से यह करने के लिए किया था:

function AC_FL_RunContent(){ 
    var ret = 
    AC_GetArgs 
    ( arguments, ".swf?mv=" + getMasterVersion(), "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    , "application/x-shockwave-flash" 
    ); 
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 
} 

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

अन्य लोग क्या करते हैं? मुझे यह सुनिश्चित करने की ज़रूरत है कि मेरा एप्लिकेशन सही ढंग से फिर से लोड हो जाए, भले ही किसी के पास once per session उनके 'ब्राउज़र कैश जांच नीति' के लिए चुना गया हो।

उत्तर

0

कैशिंग फ़्लैश प्लेयर द्वारा नहीं किया जाता है लेकिन ब्राउज़र द्वारा, इसलिए यह एडोब के नियंत्रण से बाहर है। मुझे लगता है कि आपको एक व्यावहारिक समाधान मिला है। अगर मैं कैशिंग से बचना चाहता हूं तो मैं आमतौर पर यूआरएल पर एक यादृच्छिक संख्या जोड़ता हूं।

+0

सही है, लेकिन उनके नियंत्रण से बाहर से समस्या का समाधान नहीं है ढूँढने। मुख्य रूप से मैं यह सुनिश्चित करना चाहता हूं कि मैं कुछ अंतर्निहित फीचर और व्हील को पुनर्निर्मित नहीं कर रहा हूं। मैं विशेष रूप से एक यादृच्छिक संख्या नहीं चाहता क्योंकि मैं चाहता हूं कि जब संभव हो तो एप्लिकेशन को कैश किया जाए –

1

मैंने जो किया है वह एसडब्ल्यूएफ फ़ाइल चेकसम है और फिर इसे अपने यूआरएल में जोड़ता है। तब तक रहता है जब तक फ़ाइल को पुनर्निर्मित/पुनर्निर्मित नहीं किया जाता है। सर्वर-साइड PHP स्क्रिप्ट की कुछ पंक्तियों द्वारा स्वचालित रूप से संभाला गया

+0

दिलचस्प लगता है। मुझे 'सेट और भूल' सोच पसंद है। आप इन चेकसमों को कहां संग्रहित/कैशिंग कर रहे हैं? आप प्रत्येक पृष्ठ अनुरोध के साथ स्वचालित रूप से उन्हें पुन: गणना नहीं कर रहे हैं? –

+0

मेरे आवेदन में एसडब्ल्यूएफ धारण करने वाला पृष्ठ एक बार लोड होता है (या अक्सर बार-बार - मैं उसके बाद AJAX और फ्लेक्स रीमोटिंग करता हूं)। और इसलिए पेज को इकट्ठा करते समय PHP में md5 चेकसम की गणना करना एक बड़ा सौदा नहीं है। मेरा एसडब्ल्यूएफ आकार में 120K से कम है इसलिए यह काम बहुत तेज हो गया है। ... –

+0

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

3

मुझे एक ही समस्या थी, और एसडब्ल्यूएफ फ़ाइलों को बिल्ड नंबर के रूप में नामित उप-निर्देशिका में डाल दिया। इसका मतलब था कि एसडब्ल्यूएफ फाइलों के यूआरएल हर बार एक अलग स्थान की ओर इशारा करते हैं।

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

1

यहां नमूना है।

function AC_FL_RunContent(){ 
    var ret = AC_GetArgs(arguments, ".swf?ts=" + getTS(), "movie", 
       "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", 
       "application/x-shockwave-flash"); 
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 
    } 

    function getTS() { 
    var ts = new Date().getTime(); 
    return ts; 
    } 

AC_OETags.js फ़ाइल है और यह कई स्थानों पर HTML-टेम्पलेट मौजूद है। लेकिन जैसा कि मेरी पोस्टिंग ने कहा, मुझे एक और प्रकार की समस्या का सामना करना पड़ रहा है।

2
+0

यह विशेष रूप से प्रदर्शन परीक्षण के लिए है जहां आप कभी भी कैश नहीं करना चाहते हैं। जब आप इसे कैश नहीं करना चाहते हैं तो सवाल विशेष रूप से आशावादी रूप से कैशिंग से संबंधित है। लेकिन परीक्षण करते समय निश्चित रूप से उपयोगी - धन्यवाद! –

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