2009-05-15 6 views
41

मैं Vista पर IE 8 का उपयोग कर रहा हूं, और हर बार जब मैं जावास्क्रिप्ट फ़ाइल बदलता हूं और फिर डीबगिंग शुरू करता हूं, तो मुझे अपने जावास्क्रिप्ट को पुनः लोड करने के लिए Ctrl + F5 दबा देना होगा। जब मैं डिबगिंग शुरू करता हूं तो इसे स्वचालित रूप से जावास्क्रिप्ट को पुनः लोड करने का कोई तरीका है, लेकिन नेट ब्राउज़ करते समय प्रदर्शन लाभ खोना नहीं है?IE को जावास्क्रिप्ट को पुनः लोड करने के लिए कैसे मजबूर करें?

हाँ हाँ मुझे पता है कि आपको शायद आईई पसंद नहीं है, लेकिन ध्यान रखें कि सवाल यह नहीं है कि "सबसे अच्छा ब्राउज़र क्या है?"।

उत्तर

45

कैश को तोड़ने के लिए अपने यूआरएल के अंत में एक स्ट्रिंग जोड़ें। मैं आमतौर पर (PHP) के साथ कार्य करें:

<script src="/my/js/file.js?<?=time()?>"></script> 

तो यह है कि यह हर बार पुन: लोड करते समय मैं इस पर काम कर रहा हूँ, और फिर इसे दूर ले जब यह उत्पादन में चला जाता है। हकीकत में मैं इसे थोड़ा और अधिक बताता हूं लेकिन विचार वही रहता है।

यदि आप इस वेबसाइट का स्रोत देखते हैं, तो वे जावास्क्रिप्ट फ़ाइलों को अपडेट करते समय हमारे द्वारा किए गए परिवर्तनों को बल देने के लिए समान रूप से URL के अंत में संशोधन संख्या जोड़ते हैं।

+0

अच्छा विकल्प, केवल इसका मतलब है कि ब्राउजर फ़ाइल को _never_ कैश करेगा जिसका अर्थ है कि "नेट ब्राउज़ करते समय प्रदर्शन लाभ खोना"। – Alconja

+3

जब आप "जिस वेबसाइट पर आप वर्तमान में काम कर रहे हैं उसे ब्राउज़ करें" तो आप प्रदर्शन लाभ खो देते हैं। –

+0

ठीक है, मुझे लगता है कि आप इसके साथ रहने के लिए मतलब था। (याद रखें कि अंतिम उपयोगकर्ताओं के पास भी कैश समस्याएं होंगी, इसलिए यह सुनिश्चित करने का कोई बुरा विचार नहीं है कि जब आप .js फ़ाइलों को उपयोगकर्ता के ब्राउज़र को बदलते हैं तो किसी भी तरह नवीनतम संस्करण भी प्राप्त करना जानता है)। – Alconja

15

जब आप वेब पेज या जावास्क्रिप्ट फ़ाइल के साथ काम करते हैं तो आप इसे हर बार बदलते समय इसे पुनः लोड करना चाहते हैं। आप आईई 8 में सेटिंग्स बदल सकते हैं ताकि ब्राउजर कभी कैश न करे।

इस सरल चरणों का पालन करें।

  1. उपकरण-> इंटरनेट विकल्प का चयन करें।
  2. सामान्य टैब में ब्राउज़िंग इतिहास अनुभाग में सेटिंग बटन पर क्लिक करें।
  3. "हर बार जब मैं वेबपृष्ठ पर जाता हूं" रेडियो बटन पर क्लिक करें।
  4. ठीक बटन क्लिक करें।
+3

ऐसा नहीं करता जो आपको लगता है कि यह करता है। प्रत्येक सेटिंग की चर्चा के लिए www.enhanceie.com/redir/?id=httpperf देखें। – EricLaw

+0

मैंने ऐसा किया लेकिन अभी भी पृष्ठ को रीफ्रेश करना है या F5 दबाएं? –

1

जावास्क्रिप्ट में मुझे लगता है कि यह संभव नहीं है, क्योंकि आधुनिक ब्राउज़र में जावास्क्रिप्ट में policy on security है .. और कैश साफ़ करना बहुत उल्लंघनकारी है।

आप

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 

जोड़ने के लिए अपने शीर्ष लेख में की कोशिश कर सकते हैं, लेकिन आप प्रदर्शन नुकसान होगा।

26

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

तो या तो कुछ इस तरह:

<script src="/my/js/file.js?version=2.1.3" ></script> 

या शायद

<script src="/my/js/file.2.1.3.js" ></script> 

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

+0

क्या फ़ायरफ़ॉक्स और क्रोम में भी काम करेगा? – BrianK

+0

@BrianK - ठीक होना चाहिए। – Alconja

+0

मैं इस विचार को लेने जा रहा हूं और दिनांक पृष्ठ (जैसे आप और पाओलो के विचार दोनों के मिश्रण) के आधार पर संस्करण संख्या बनाने के लिए अपने पृष्ठ लोड ईवेंट (.Net में) में प्रयास करने जा रहा हूं क्योंकि यह वास्तविक सिरदर्द बन रहा है। मेरे लिए व्यक्तिगत रूप से जरूरी नहीं है, लेकिन जब मैं अपने परीक्षकों को जेएस अपडेट करता हूं, तो वे CTRL F5 को भूल जाते हैं और फिर तय किए जाने के बाद वापस बग भेजते हैं ... (केवल यह सुनिश्चित करने की आवश्यकता है कि मैं इसे उत्पादन से पहले ले जाऊं!) –

0

वेबसाइट विकसित करते समय आईई टैब में बार-बार दबाए जाने की आवश्यकता को खत्म करने के लिए, ReloadIt का उपयोग करें।

enter image description here

आईई में दिखाया गया है कि प्रत्येक वेबपेज के लिए, आप एक फ़ाइल नाम, एक निर्देशिका, या उनमें से एक सेट कॉन्फ़िगर कर सकते हैं। यदि किसी भी कॉन्फ़िगर किए गए पथ में कोई भी परिवर्तन होता है, तो पुनः लोड करें I IE टैब को रीफ्रेश करता है। एक साधारण उपकरण यह सिर्फ काम करता है।

यह सब कुछ पुनः लोड करेगा, न केवल जावास्क्रिप्ट।

4

यदि आप इसे अपने ब्राउज़र (ए.के.ए. पर अपने उपयोगकर्ताओं पर मजबूर नहीं कर रहे हैं) पर ऐसा करने के लिए देख रहे हैं, तो मैं आपके कोड को कैश का उपयोग न करने के लिए सेट नहीं करूंगा। जैसा कि जोसे ने कहा, एक प्रदर्शन नुकसान है।

और मैं पूरी तरह से आईई पर कैशिंग बंद नहीं करूँगा, क्योंकि आप जिस वेबसाइट पर जाते हैं, उसके लिए आप उस प्रदर्शन लाभ को खो देते हैं। आप IE बता सकते हैं हमेशा एक विशेष साइट या ब्राउज़िंग सत्र के लिए सर्वर से ताज़ा करने के लिए:

  1. IE खोलें डेवलपर टूल
  2. जाँच करने के लिए "हमेशा सर्वर से ताज़ा करें"
  3. क्लिक मेनू से कैश चुनें

या, कुंजीपटल-शॉर्टकट-philes (अपने आप की तरह) वहाँ के लिए ..

  • F12, Alt + C, नीचे तीर, Alt + R। चेतावनी के

नोट: कहा करने के बाद इस ... ध्यान रखें कि जब भी आप एक अलग तरह से साइट उत्पादन में देखा जाएगा में/परीक्षण विकसित रखें, आप मिश्रित परिणाम होने का खतरा चलाते हैं। एक अच्छा उदाहरण यह कैशिंग मुद्दा है। हमें एक मुद्दा मिला जहां आईई हमारी अजाक्स कॉल को कैश कर रहा था और जीईटी विधि से परिणाम अपडेट नहीं कर रहा था। अगर हमने आईई में कैशिंग को अक्षम कर दिया है, तो हमने कभी भी इस समस्या को विकास में नहीं देखा होगा, और इसे इस तरह के उत्पादन में तैनात कर दिया होगा।

+0

आपके "सावधानी के नोट" पर, यही कारण है कि कई देव दुकानों में एक विशेष परीक्षण वातावरण होता है, जहां लक्ष्य जितना संभव हो उतना उत्पादन दर्पण करना है। उदाहरण के लिए, यदि आप विंडोज़ पर विकसित/परीक्षण करते हैं, लेकिन आपका उत्पादन सर्वर लिनक्स है, तो आपके पास एक और परीक्षण वातावरण होना चाहिए जो लिनक्स पर चलता है। – michaelok

+0

आइटम 'एफ 12 ...' मेरे लिए काम करता है, आईई 8. आईई 11 के लिए काम नहीं करता है। – youngzy

1

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

 
<script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script> 

पूर्ण उदाहरण:

 
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 

    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script> 
    <script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script> 
    <script type="text/javascript"> 

     $(document).ready(function() { 
           myInit(); 
          }); 

    </script> 
</asp:Content> 

obvously, इस समाधान केवल विकास के चरण के दौरान इस्तेमाल किया जाना चाहिए, और साइट पोस्ट करने से पहले हटा दिया जाना चाहिए।

0

अपने यूआरएल के अंत में जेएस फाइल के संशोधन की तिथि जोड़ें। PHP के साथ यह कुछ ऐसा दिखाई देगा:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>'; 

जब आपकी स्क्रिप्ट को हर बार अपडेट किया जाएगा तो उसे फिर से लोड किया जाएगा।

0

यदि आप एएसपी.NET चला रहे हैं, तो एएसपी.Net 4.5 में उपलब्ध बंडलिंग और मिनिफिकेशन मॉड्यूल देखें।

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

आप एक "समूह" को है कि आपके जावास्क्रिप्ट फ़ाइल के लिए अंक घोषणा कर सकते हैं। हर बार जब आपकी फ़ाइल बदलती है, तो यह एक नया क्वेरीस्ट्रिंग प्रत्यय उत्पन्न करेगा ... लेकिन जब फ़ाइल बदलती है तो केवल ऐसा ही होगा। इससे अद्यतनों को तैनात करना बहुत आसान हो जाता है, क्योंकि आपको अपने टैग को नए संस्करण संख्याओं के साथ अपडेट करने के बारे में भी सोचना नहीं पड़ता है।

यह एक फ़ाइल में एकाधिक .js फ़ाइलों को एक साथ जोड़ सकता है, और उन्हें एक ही चरण में छोटा कर सकता है। सीएसएस के लिए डितो।