ব্রাউজারকে ক্যাশে সাফ করতে বাধ্য করুন


283

আমার পৃষ্ঠায় আমি কিছু কোড রাখার উপায় আছে যাতে কেউ যখন কোনও সাইট পরিদর্শন করেন তখন এটি ব্রাউজারের ক্যাশে সাফ করে, যাতে তারা পরিবর্তনগুলি দেখতে পারে?

ব্যবহৃত ভাষা: এএসপি.এনইটি, ভিবি.এনইটি এবং অবশ্যই এইচটিএমএল, সিএসএস এবং jQuery।


একটি সুন্দর সমাধান বা "স্পষ্ট ক্যাশে" করার কার্যসংক্রান্ত এখানে পাওয়া যাবে: stackoverflow.com/a/43676353/2008111
caramba

উত্তর:


350

যদি এটি সম্পর্কিত .cssএবং .jsপরিবর্তিত হয় তবে একটি উপায় হ'ল "ক্যাশে বুস্টিং" হ'ল _versionNoপ্রতিটি প্রকাশের জন্য ফাইলের নামের " " মতো কিছু যুক্ত করা । উদাহরণ স্বরূপ:

script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.

অথবা বিকল্পভাবে ফাইল নামের পরে এটি করুন:

script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.

এটি কীভাবে কাজ করতে পারে তা দেখতে আপনি এই লিঙ্কটি পরীক্ষা করে দেখতে পারেন।


10
এটি একটি মোটামুটি ভাল সমাধান, এবং এমনকি আপনার বিল্ড সিস্টেম দ্বারা স্বয়ংক্রিয় করা যেতে পারে (এবং হওয়া উচিত)। স্ট্যাকওভারফ্লো, উদাহরণস্বরূপ, এই পদ্ধতির ব্যবহার করে।
ডারোবার্ট

7
SO এখন GET টি আর্গুমেন্ট ব্যবহার করছে।
সায়েব আমিনী

60
ফাইলের নামটি যেমন রয়েছে তেমন রাখা আরও ভাল তবে সংস্করণ নম্বরটি ক্যোরিস্ট্রিং প্যারামিটার হিসাবে যুক্ত করা উচিত script.js?v=1.2। (বা আপনি যদি সংস্করণগুলি ট্র্যাক না করে থাকেন তবে কেবল ফাইলটি সর্বশেষ-সংশোধিত সময় ব্যবহার করুন যা করা আরও সহজ)। নিশ্চিত না যে এটি পূর্ববর্তী মন্তব্যকারী বলতে কী বোঝায়!
ডাইন

5
সংস্করণ নিয়ন্ত্রণের মাধ্যমে সবাই কীভাবে এটি করে? বাস্তব বেদনার মতো মনে হচ্ছে।
শন

1
@ শ্যাশন ভার্সন-কন্ট্রোল ওয়াইজ আপনি গতিসম্পন্ন ট্যাগগুলি রেন্ডার করতে <link />এবং কোয়েরি স্ট্রিং প্যারামিটার হিসাবে অ্যাপ্লিকেশনটির সংস্করণটি ইনজেক্ট করতে পারেন। বিকল্পভাবে, কিছু সিএমএসের একটি সিএমএস-প্রশস্ত সেটিংস হিসাবে একটি "ক্লায়েন্ট রিসোর্স সংস্করণ" থাকবে যা সংযুক্ত করা হয়েছে - সাইটের প্রশাসক ম্যানুয়ালি সেই সংস্করণটি এনআরটি বাড়িয়ে তুলতে পারবেন এবং সিএমএসের আপডেটগুলিও স্বয়ংক্রিয়ভাবে এটি আপডেট হতে পারে। নীচের লাইন: আপনার ফাইল URL গুলি গতিশীলভাবে রেন্ডার করতে হবে।
জেরোইন

103

দেখব ক্যাশে-নিয়ন্ত্রণ এবং মেয়াদ শেষ মেটা ট্যাগ।

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">

অন্য একটি সাধারণ অভ্যাস হ'ল অনুরোধ করা ফাইলগুলির শেষে ক্রমাগত পরিবর্তনশীল স্ট্রিং যুক্ত করা। এই ক্ষেত্রে:

<script type="text/javascript" src="main.js?v=12392823"></script>


44
এটি ইতিমধ্যে ক্যাশেডের ক্ষেত্রে এটি তেমন সাহায্য করবে না - যেহেতু এটি ক্যাশে হয়েছে, সার্ভারটি জিজ্ঞাসা করা হবে না এবং এভাবে নো-ক্যাশে দায়বদ্ধ হতে পারে না। এছাড়াও, সেই মেটা ট্যাগটি সত্যই ব্যবহার করা উচিত নয়, যেমন নোটটি বলেছে, এটি ওয়েব ক্যাশের সাথে ভেঙে যাবে।
ডার্বোবার্ট

1
+1 ডারবার্ট কী বলেছে। ক্লায়েন্ট এবং ওয়েব ক্যাশে ক্যাশে নীতি প্রস্তাব দেওয়ার জন্য HTTP শিরোনাম ব্যবহার করা সর্বদা ভাল তবে এটি ক্যাশে পুনরায় লোড করার জন্য কাজ করে না।

4
আপনার দ্বিতীয় সমাধানের জন্য +1। আমার এই সমস্যাটি রয়েছে যে কোনও প্রশাসক আপডেট করার পরে প্রথমবার ক্যাশে সাফ করা উচিত। এই পদ্ধতির সমাধান করা উচিত
জুলস কল

সম্পূর্ণরূপে ক্যাশে অক্ষম করা সত্যিই খুব খারাপ ধারণা।
জর্দান

73

আপডেট 2012

এটি একটি পুরানো প্রশ্ন তবে আমি মনে করি এটির একটি আরও উত্তরোত্তর উত্তর প্রয়োজন কারণ এখন ওয়েবসাইটের ক্যাচিংয়ের আরও নিয়ন্ত্রণের উপায় রয়েছে।

ইন অফলাইন ওয়েব অ্যাপ্লিকেশন (যা সত্যিই কোন HTML5 এর ওয়েবসাইট) applicationCache.swapCache()ম্যানুয়ালি পৃষ্ঠাটি পুনরায় লোড প্রয়োজন ছাড়াই আপনার ওয়েবসাইটের ক্যাশেড সংস্করণটি আপডেট করার জন্য ব্যবহার করা যাবে।

এটি HTML5 রকস- এ অ্যাপ্লিকেশন ক্যাশে ব্যবহার করার জন্য শিক্ষানবিশদের গাইড থেকে আপনার সাইটের নতুন সংস্করণে কীভাবে ব্যবহারকারীদের আপডেট করবেন তা ব্যাখ্যা করার একটি কোড উদাহরণ :

// Check if a new cache is available on page load.
window.addEventListener('load', function(e) {

  window.applicationCache.addEventListener('updateready', function(e) {
    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
      // Browser downloaded a new app cache.
      // Swap it in and reload the page to get the new hotness.
      window.applicationCache.swapCache();
      if (confirm('A new version of this site is available. Load it?')) {
        window.location.reload();
      }
    } else {
      // Manifest didn't changed. Nothing new to server.
    }
  }, false);

}, false);

আরও তথ্যের জন্য মোজিলা বিকাশকারী নেটওয়ার্কের অ্যাপ্লিকেশন ক্যাশে ব্যবহার করে দেখুন ।

২০১ Update আপডেট করুন

বিষয়গুলি ওয়েবে দ্রুত পরিবর্তন হয়। এই প্রশ্নটি 2009 সালে জিজ্ঞাসা করা হয়েছিল এবং 2012 সালে আমি প্রশ্নটিতে বর্ণিত সমস্যাটি পরিচালনা করার জন্য একটি নতুন উপায় সম্পর্কে একটি আপডেট পোস্ট করেছি। আরও 4 বছর কেটে গেছে এবং এখন মনে হচ্ছে এটি ইতিমধ্যে অবচয় হয়ে গেছে। মন্তব্যে এটিকে নির্দেশ করার জন্য চাগলদিওলোকে ধন্যবাদ ।

বর্তমানে, জুলাই ২০১ 2016 পর্যন্ত, এইচটিএমএল স্ট্যান্ডার্ড, বিভাগ Section.৯, অফলাইন ওয়েব অ্যাপ্লিকেশনগুলিতে একটি অবচয় সতর্কতা অন্তর্ভুক্ত রয়েছে:

এই বৈশিষ্ট্যটি ওয়েব প্ল্যাটফর্ম থেকে সরানোর প্রক্রিয়াধীন রয়েছে। (এটি একটি দীর্ঘ প্রক্রিয়া যা অনেক বছর সময় নেয়)) এই সময়ে অফলাইন ওয়েব অ্যাপ্লিকেশন বৈশিষ্ট্যগুলির মধ্যে যে কোনওটি ব্যবহার করা অত্যন্ত নিরুৎসাহিত। পরিবর্তে পরিষেবা কর্মীদের ব্যবহার করুন।

সুতরাং করে অ্যাপ্লিকেশন ক্যাশে ব্যবহার মোজিলা ডেভেলপার নেটওয়ার্কে যে আমি 2012 সালে রেফারেন্সড:

অবচয়
এই বৈশিষ্ট্যটি ওয়েব মান থেকে সরানো হয়েছে। যদিও কিছু ব্রাউজার এখনও এটি সমর্থন করতে পারে তবে এটি বাদ দেওয়ার প্রক্রিয়াধীন। পুরানো বা নতুন প্রকল্পে এটি ব্যবহার করবেন না। এটি ব্যবহার করে পৃষ্ঠা বা ওয়েব অ্যাপ্লিকেশনগুলি যে কোনও সময় ভেঙে যেতে পারে।

এছাড়াও বাগ 1204581 দেখুন - যদি পরিষেবা কর্মী আনতে বাধা সক্ষম করে থাকে তবে অ্যাপক্যাচের জন্য অবচয় বিজ্ঞপ্তি যুক্ত করুন


1
এটি কি আপনাকে বোঝায় এবং ক্যাশে ম্যানিফেস্ট ফাইলটি বজায় রাখতে হবে?
স্যাম

সতর্কতা: অ্যাপ্লিকেশন ক্যাশে (
অ্যাপক্যাচ

59
সুতরাং, 2017 হিসাবে বর্তমানের সুপারিশটি কী?
গ্যারেট

এই বিষয়টিতে দেখা মূল সমস্যাটি হ'ল যখন দর্শক যে ডিভাইসটি ব্যবহার করছেন তা ক্যাশেড সংস্করণগুলি ব্যবহার করা চালিয়ে যায় কারণ ব্যবহারকারীদের ডিভাইসের অভ্যন্তরীণ স্মৃতি পূর্ণ হয়ে যাচ্ছে। মনে হয় এটি পৃষ্ঠার ক্যাশেড সংস্করণে আটকে গিয়েছে এবং নথিতে কোনও উপাদান আপডেট করবে না। এটি কি কেবল ক্রোমে ঘটে ?? এটি কেবলমাত্র একমাত্র ব্রাউজারেই এটির অভিজ্ঞতা রয়েছে।
ব্যবহারকারী 2585548

4
2017: পরিষেবা কর্মীদের ব্যবহার করুন।
ডিজিটাই

27

যেমন না। একটি পদ্ধতি হ'ল ব্রাউজারটিকে পুনরায় লোড করতে বাধ্য করার জন্য সামগ্রী সরবরাহ করার সময় উপযুক্ত হেডারগুলি প্রেরণ করা হয়:

সমস্ত ব্রাউজার জুড়ে কোনও ওয়েব পৃষ্ঠা ক্যাশেড নয় তা নিশ্চিত করা।

আপনার অনুসন্ধান "cache header"বা এসও-তে এখানে অনুরূপ কিছু থাকলে, আপনি এএসপি.এনইটি নির্দিষ্ট উদাহরণগুলি খুঁজে পাবেন।

আরেকটি, কম পরিচ্ছন্ন তবে কখনও কখনও কেবলমাত্র যদি আপনি সার্ভারের পাশের শিরোনামগুলি নিয়ন্ত্রণ করতে না পারেন তবে রিসোর্সে একটি র্যান্ডম জিইটি প্যারামিটার যুক্ত করা হচ্ছে যা বলা হচ্ছে:

myimage.gif?random=1923849839

2
ফাইলগুলি যথাযথভাবে সংস্করণ করা ভাল। এটি ব্যান্ডউইথের বেশ বড় বর্জ্য এবং সম্ভবত আরও গুরুত্বপূর্ণভাবে আপনার সাইটটিকে অনেকটা ধীর করে দেয়।
ডার্বোবার্ট

8
আসলেই পরিস্থিতি নির্ভর করে, তাই না? আপনি যদি কোনও সিএমএস প্রোগ্রামিং করছেন এবং সমস্ত পরিবর্তিত সংস্থান সঠিকভাবে আপডেট হয়েছে তা নিশ্চিত করার প্রয়োজন হলে মাঝে মাঝে এই দুটি বিকল্পের মধ্যে কোনওরকম উপায় নেই।
পেক্কা

এর মতো সমাধানগুলি নেতিবাচক ক্ষেত্রে ভোট দেওয়া উচিত। ইন্টারনেটের সিও 2 পদচিহ্ন যতটা সম্ভব কম রাখা আমাদের উপর নির্ভর করে।
সময়

14

জন্য স্ট্যাটিক সম্পদ অধিকার ক্যাশে হবে ক্যোয়ারী প্যারামিটার ব্যবহার প্রতিটি স্থাপনার বা ফাইল সংস্করণের মান। এটি প্রতিটি স্থাপনার পরে ক্যাশে সাফ করার প্রভাব ফেলবে।

/Content/css/Site.css?version={FileVersionNumber}

এখানে এএসপি.নেট এমভিসি উদাহরণ।

<link href="@Url.Content("~/Content/Css/Reset.css")?version=@this.GetType().Assembly.GetName().Version" rel="stylesheet" type="text/css" />

সমাবেশ ভার্সন আপডেট করতে ভুলবেন না


এই উত্তরের জন্য ধন্যবাদ তবে যখন আমরা বান্ডেল টেবিলের রিসোর্স যুক্ত করব তখন কীভাবে এটি করবেন?
টেরেগুয়া

আমার ক্ষেত্রে, এটি সংস্করণ হিসাবে "0.0.0.0" ফিরে আসছিল। আপনার এমভিসি অ্যাপ্লিকেশনটির dll এর সংস্করণ পেতে, পরিবর্তে এটি ব্যবহার করুন:?version=@ViewContext.Controller.GetType().Assembly.GetName().Version
সিজিডো

1
আমি দেখতে পেয়েছি যে এটি ফায়ারফক্স এবং ক্রোমকে সামগ্রিকভাবে সামগ্রীতে ক্যাচিং করতে বাধা দেয়।
স্যাম

10

আমার একযোগে সমস্যা ছিল এবং এটিই আমি এটি সমাধান করেছি:

  1. ইন index.htmlফাইল আমি স্পষ্ট জুড়েছেন:

    <html manifest="cache.manifest">
  2. ইন <head>অধ্যায় স্ক্রিপ্ট ক্যাশে আপডেট অন্তর্ভূক্ত করেছেন:

    <script type="text/javascript" src="update_cache.js"></script>
  3. ইন <body>অধ্যায় আমি ফাংশন লোড থাকলে সন্নিবেশিত করেছি:

    <body onload="checkForUpdate()">
  4. ইন cache.manifestআমি সব ফাইল রেখেছি আমি ক্যাশে করতে চান। এটি এখন গুরুত্বপূর্ণ যে এটি প্রতিবার "সংস্করণ" মন্তব্য আপডেট করে কেবলমাত্র আমার ক্ষেত্রে (অ্যাপাচি) কাজ করে। "? Ver = 001" বা নামের শেষে কোনও কিছুর সাথে ফাইলগুলির নামকরণও এটি একটি বিকল্প তবে এটির প্রয়োজন নেই । পরিবর্তন কেবল # version 1.01ক্যাশে আপডেট ইভেন্ট ট্রিগার করে।

    CACHE MANIFEST
    # version 1.01
    style.css
    imgs/logo.png
    #all other files

    1., 2. এবং 3 পয়েন্ট কেবল সূচিপত্রের মধ্যে অন্তর্ভুক্ত করা গুরুত্বপূর্ণ t অন্যভাবে

    GET http://foo.bar/resource.ext net::ERR_FAILED

    সংঘটিত হয় কারণ পৃষ্ঠাটি ইতিমধ্যে ক্যাশে থাকা অবস্থায় প্রতিটি "শিশু" ফাইল পৃষ্ঠাটি ক্যাশে করার চেষ্টা করে।

  5. ইন update_cache.jsফাইল আমি এই কোড রেখেছি:

    function checkForUpdate()
    {
        if (window.applicationCache != undefined && window.applicationCache != null)
        {
            window.applicationCache.addEventListener('updateready', updateApplication);
        }
    }
    function updateApplication(event)
    {
        if (window.applicationCache.status != 4) return;
        window.applicationCache.removeEventListener('updateready', updateApplication);
        window.applicationCache.swapCache();
        window.location.reload();
    }

এখন আপনি কেবল ফাইলগুলি পরিবর্তন করেছেন এবং ম্যানিফেস্টে আপনাকে সংস্করণ মন্তব্য আপডেট করতে হবে। এখন index.html পৃষ্ঠাটি পরিদর্শন করা ক্যাশে আপডেট করবে।

সমাধানের অংশগুলি আমার নয় তবে আমি সেগুলি ইন্টারনেটের মাধ্যমে খুঁজে পেয়েছি এবং একসাথে রেখেছি যাতে এটি কার্যকর হয়।


CACHE.MANIFEST কোথায় লেখা হয়েছে তা আমি জানতে পারি।
শ্বেতা গুলতি

1
শ্বেতা গুলতি ম্যানিফেস্ট ফাইলটি "সূচী" ফাইলের মতো একই ফোল্ডারে থাকা উচিত। কোন সময় এটি কাজ করে না?
ওয়াজটেক মাজুরেক

1
@ শ্বেতাগুলাটি হ্যাঁ, ক্যাশে এইচটিএমএল ফাইলগুলিতে পরিবর্তনগুলি সনাক্ত করতে পারে না - এজন্য আপনাকে ম্যানিফেস্ট ফাইলটিতে সংস্করণ নম্বর আপডেট করতে হবে, কারণ এটিই সেই পরিবর্তনগুলির জন্য যাচাই করা হচ্ছে। আপনাকে সাহায্য করা সত্যিই কঠিন, কারণ আমি বিশদ জানি না। দয়া করে আমাকে বলুন আপনি কি ক্যাশে হওয়া সমস্ত পছন্দসই ফাইল প্রকাশ্যে রেখেছেন? পাথটি ম্যানিফেস্ট ফাইলের সাথে সম্পর্কিত হওয়া উচিত। আপনি আমাকে আপনার ওয়েবসাইটের ঠিকানা দিতে পারেন এবং আমি বিষয়টি বলতে পারি :)
ওয়াজটেক মাজুরেক

1
@ শ্বেতাগুলাতি এর কারণ পৃষ্ঠাটি লোড করা দ্রুত করার জন্য ব্রাউজার কিছু ফাইল স্বয়ংক্রিয়ভাবে ক্যাশে করে। এটি ডিফল্ট আচরণ এবং কেবল ব্রাউজারের উপর নির্ভরশীল তাই আপনি এটি কোনও উপায়ে সেট করতে পারবেন না। বিশেষত জেএস ফাইলগুলি ব্রাউজারের সুযোগে রয়েছে, কারণ সেগুলি ওয়েবসাইটের সমস্ত পৃষ্ঠায় সাধারণত ব্যবহৃত হয় তাই তাদের ক্যাশে করা বুদ্ধিমানের কাজ। সমস্ত ফাইল ক্যাশে করার জন্য ম্যানিফেস্ট ফাইলটিতে সমস্ত ফাইলের নাম লিখানো ছাড়া অন্য কোনও উপায় নেই। যদি আপনার
কোনটি পাওয়া

1
আপনার ফাইলগুলির নিখুঁত পথ কোনও বিষয় নয়। অ্যাড্রেস বিষয়গুলির কারণে সম্পর্কিত ব্রাউজার থেকে আপেক্ষিক পথ ফাইলগুলির জন্য অনুরোধ প্রেরণ করে। এফ.এক্স: আমার ডোমেন উদাহরণ.কম রয়েছে এবং এটি সার্ভার নেমস.কম এ রয়েছে। এটিতে আমার স্থান উদাহরণ.names.com। তাই আমি আমার সার্ভারের স্পেস উদাহরণস্বরূপ। এটি করতে আমাকে এই পুনঃনির্দেশের লক্ষ্য হিসাবে ফোল্ডারটি সেট করতে হবে। সুতরাং যদি আমি উদাহরণ.নেমস.কম এ বেশ কয়েকটি সাইট রাখতে চাই তবে আমি "নাম 1" ফোল্ডারটি তৈরি করি, এটিতে পুনঃনির্দেশ সেট করুন এবং আমার সমস্ত ফাইল ভিতরে রেখে দিন। পথগুলি এখান থেকে গণনা করা হয়। ম্যানিফেস্ট ফাইলে আমার কাছে নাম 1 \ স্ক্রিপ্টস \ test.js থাকলে আমি স্ক্রিপ্টগুলি \ test.js লিখি।
ওয়াজটেক মাজুরেক

7

আমার একটি কেস ছিল যেখানে আমি অনলাইনে ক্লায়েন্টদের ফটোগুলি তুলব এবং কোনও ফটো পরিবর্তন করা থাকলে ডিভ আপডেট করতে হবে। ব্রাউজারটি এখনও পুরানো ছবিটি দেখাচ্ছে showing তাই আমি এলোমেলো জিইটি ভেরিয়েবল কল করার হ্যাক ব্যবহার করেছি, যা প্রতিবারই অনন্য হয়ে উঠবে। এটি যদি কারও সাহায্য করতে পারে তবে এখানে

<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...

সম্পাদনা করুন অন্যদের দ্বারা নির্দেশিত অনুসারে, নিম্নলিখিতটি আরও কার্যকর সমাধান হ'ল যেহেতু এটি চিত্র পরিবর্তন করা হলেই ফাইলগুলি পুনরায় লোড করবে, ফাইলের আকার দ্বারা এই পরিবর্তনটি সনাক্ত করে:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"

29
এটি মোটেও মার্জিত নয়, এটি প্রতিটি সময় ডাউনলোডের সংস্থানগুলি ডাউনলোড করার সময় প্রতিবারের চিত্রটি পুনরায় লোড করে দেবে, এর চেয়ে ভাল সমাধানটি এলোমেলো সংখ্যার পরিবর্তে ফাইলাইজ ব্যবহার করা হবে, এটি ক্যাশে কেবল তখনই পুনরায় বৈকল্পিক করবে যখন ফাইলটি আসলে ফাইল পরিবর্তনগুলি
রবার্তো অরোসেমেনা

8
বা চিত্রের বাইটগুলির একটি হ্যাশ
টেলর এডমিস্টন

1
এটি সমস্ত ব্যবহারকারীর প্রয়োজনীয়তার উপর নির্ভর করে। সংখ্যক ফটোগুলির জন্য কয়েকটি দৃশ্যের তুলনায় দৃশ্যাবলি আলাদা। ফাইলের আকার চেক করা ব্যান্ডউইথকে বাঁচাতে পারে, তবে অতিরিক্ত প্রসেসিংও যুক্ত করবে, সম্ভাব্যভাবে পৃষ্ঠা লোডটি কমিয়ে দেবে। আমার ক্ষেত্রে যেখানে ছবিগুলি বেশ ঘন ঘন পরিবর্তিত হত এবং এটি ব্যবসায়ের সিদ্ধান্ত ছিল যে ব্যবহারকারী সর্বাধিক যুগোপযোগী হবে, এটি ছিল একটি নিখুঁত সমাধান।
জিशान

এমনকি আপনি এটি কনফিগারেশনের ক্ষেত্রেও একটি স্থিতিশীল মান হিসাবে তৈরি করতে পারেন, এটি কোনওভাবেই একটি আদর্শ পন্থা নয়।
দেখেন

3
<img src = "/ Photos / userid_73.jpg? modified = <? = filemtime (" / Photos / userid_73.jpg ")?>" আরও অনেক উপকারী হবে!
ফুসকা সফ্টওয়্যার

4

প্রচুর উত্তর পয়েন্টটি অনুপস্থিত - বেশিরভাগ বিকাশকারী ভাল জানেন যে ক্যাশে বন্ধ করা অযোগ্য। তবে, অনেকগুলি সাধারণ পরিস্থিতি রয়েছে যেখানে দক্ষতা গুরুত্বহীন এবং ডিফল্ট ক্যাশে আচরণটি খারাপভাবে ভেঙে যায়।

এর মধ্যে নেস্টেড, পুনরাবৃত্ত স্ক্রিপ্ট টেস্টিং (বড়টি!) এবং ভাঙ্গা তৃতীয় পক্ষের সফ্টওয়্যার ওয়ার্কআউন্ডস অন্তর্ভুক্ত রয়েছে। এখানে প্রদত্ত সমাধানগুলির মধ্যে কোনওরকমই সাধারণ পরিস্থিতিগুলিকে সমাধান করার জন্য পর্যাপ্ত নয়। বেশিরভাগ ওয়েব ব্রাউজারগুলি খুব আক্রমণাত্মক ক্যাশে হয় এবং এই সমস্যাগুলি এড়াতে কোনও বুদ্ধিমান উপায় সরবরাহ করে না।



2

নিম্নলিখিতটি ইউআরএল আপডেট করা আমার পক্ষে কাজ করে:

/custom.js?id=1

?id=নতুন পরিবর্তনের জন্য একটি অনন্য নম্বর যুক্ত করার পরে এবং এটি বাড়ানোর মাধ্যমে, ব্যবহারকারীদের CTRL + F5ক্যাশে রিফ্রেশ করার জন্য চাপতে হবে না । বিকল্পভাবে, আপনি হ্যাশ বা বর্তমান সময়ের স্ট্রিং সংস্করণ যুক্ত করতে পারেন বা এরপরে ইপোক করতে পারেন?id=

কিছুটা এইরকম ?id=1520606295


1

এএসপি.এনইটি-তে ক্যাশিং সেট করার বিষয়ে এমডিএসএন পৃষ্ঠাটি এখানে রয়েছে।

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.Cache.SetValidUntilExpires(False)
Response.Cache.VaryByParams("Category") = True

If Response.Cache.VaryByParams("Category") Then
   '...
End If

1

নিশ্চিত না যে এটি সত্যই আপনাকে সহায়তা করতে পারে তবে কোনও ব্রাউজারে ক্যাশিংয়ের কাজ করা উচিত। ব্রাউজার যখন কোনও ফাইলের জন্য অনুরোধ করে তখন "অফলাইনে" মোড না থাকলে সার্ভারের কাছে সর্বদা একটি অনুরোধ প্রেরণ করা উচিত। সার্ভারটি কিছু পরামিতি পড়বে যেমন তারিখ সংশোধিত বা এট্যাগগুলি।

রূপান্তরিত না হওয়ার জন্য সার্ভারটি 304 ত্রুটির প্রতিক্রিয়া ফিরিয়ে দেবে এবং ব্রাউজারটি তার ক্যাশে ব্যবহার করতে হবে। যদি ইটাগ সার্ভারের পক্ষে বৈধতা না দেয় বা পরিবর্তিত তারিখটি বর্তমান পরিবর্তিত তারিখের নীচে থাকে তবে সার্ভারের নতুন পরিবর্তিত তারিখ বা ইটাগ বা উভয়ই নতুন সামগ্রীটি ফিরিয়ে দেওয়া উচিত।

যদি ব্রাউজারে কোনও ক্যাশিং ডেটা প্রেরণ করা না থাকে, তবে অনুমান করি আচরণটি নির্ধারিত হয়, ব্রাউজারটি ফাইল ক্যাশে বা নাও পারে যা তারা কীভাবে ক্যাশে হয় তা জানায় না। প্রতিক্রিয়াতে আপনি যদি ক্যাচিং প্যারামিটার সেট করেন তবে এটি আপনার ফাইলগুলিকে সঠিকভাবে ক্যাশে করবে এবং সার্ভারটি পরে 304 ত্রুটি বা নতুন সামগ্রী ফিরে আসতে পারে।

এই কাজ করা উচিত কিভাবে হয়। ইউআরএলগুলিতে এলোমেলো প্যারাম বা সংস্করণ নম্বর ব্যবহার করা যে কোনও কিছুর চেয়ে হ্যাকের মতো।

http://www.checkupdown.com/status/E304.html http://en.wikedia.org/wiki/HTTP_ETag http://www.xpertdeveloper.com/2011/03/last-modified-header-vs- মেয়াদ শেষ-হেডার-বনাম-etag /

পড়ার পরে আমি দেখলাম একটি মেয়াদোত্তীর্ণের তারিখও রয়েছে। আপনার যদি সমস্যা হয় তবে এটি হতে পারে যে আপনার একটি মেয়াদ শেষ হয়ে যাবে। অন্য কথায়, যখন ব্রাউজারটি আপনার ফাইলটিকে ক্যাশে করবে, যেহেতু এটির একটি মেয়াদ শেষ হওয়ার তারিখ রয়েছে, সেই তারিখের আগে এটি পুনরায় অনুরোধ করা উচিত নয়। অন্য কথায়, এটি সার্ভারের কাছে ফাইলটি কখনই জিজ্ঞাসা করবে না এবং কোনও 304 সংশোধিত নয়। মেয়াদ শেষ হওয়ার তারিখ না পৌঁছানো বা ক্যাশে সাফ হওয়া পর্যন্ত এটি কেবল ক্যাশে ব্যবহার করবে।

সুতরাং এটি আমার অনুমান, আপনার কোনও মেয়াদ শেষ হওয়ার তারিখ রয়েছে এবং আপনার সর্বশেষ-সংশোধিত ইটাগ বা এটির একটি মিশ্রণ ব্যবহার করা উচিত এবং নিশ্চিত হওয়া উচিত যে কোনও মেয়াদ শেষ হওয়ার তারিখ নেই।

লোকেরা যদি প্রচুর রিফ্রেশ করতে থাকে এবং ফাইলটি খুব বেশি পরিবর্তন না ঘটে তবে একটি বড় মেয়াদ শেষ হওয়ার তারিখ নির্ধারণ করা বুদ্ধিমানের কাজ হতে পারে।

আমার 2 সেন্ট!


1

আমি এই সহজ সমাধানটি কার্যকর করেছিলাম যা আমার পক্ষে কাজ করে (এখনও উত্পাদন পরিবেশে নয়):

function verificarNovaVersio() {
    var sVersio = localStorage['gcf_versio'+ location.pathname] || 'v00.0.0000';
    $.ajax({
        url: "./versio.txt"
        , dataType: 'text'
        , cache: false
        , contentType: false
        , processData: false
        , type: 'post'
     }).done(function(sVersioFitxer) {
        console.log('Versió App: '+ sVersioFitxer +', Versió Caché: '+ sVersio);
        if (sVersio < (sVersioFitxer || 'v00.0.0000')) {
            localStorage['gcf_versio'+ location.pathname] = sVersioFitxer;
            location.reload(true);
        }
    });
}

এইচটিএমএল যেখানে রয়েছে সেখানে আমি একটি ছোট্ট ফাইল রেখেছি:

"Versio.txt":

v00.5.0014

এই ফাংশনটি আমার সমস্ত পৃষ্ঠায় ডাকা হয়, সুতরাং এটি লোড করার সময় লোকালস্টোরের সংস্করণটির মানটি বর্তমান সংস্করণের তুলনায় কম এবং কোনওটি করে কিনা তা পরীক্ষা করে

location.reload(true);

... ক্যাশে পরিবর্তে সার্ভার থেকে পুনরায় লোড করার জন্য।

(স্পষ্টতই, লোকাল স্টোরেজের পরিবর্তে আপনি কুকিজ বা অন্যান্য ক্রমাগত ক্লায়েন্ট স্টোরেজ ব্যবহার করতে পারেন)

আমি এই সমাধানটির সরলতার জন্য বেছে নিয়েছি, কারণ কেবলমাত্র একটি ভার্সন ফাইল "ভার্সিও টেক্সট" পুরোপুরি পুনরায় লোড করতে বাধ্য করবে।

ক্যোরিস্ট্রিং পদ্ধতিটি প্রয়োগ করা শক্ত এবং এটিও ক্যাশে করা হয়েছে (যদি আপনি ভি 1.1 থেকে কোনও পূর্ববর্তী সংস্করণে পরিবর্তন করেন তবে ক্যাশে থেকে লোড হবে, তার মানে এর অর্থ হ'ল আগের সমস্ত সংস্করণ ক্যাশে রেখে ক্যাশে ফ্লাশ করা হয়নি)।

আমি একটু নবাগত এবং আমার পদ্ধতিটি একটি ভাল পদ্ধতির বিষয়টি নিশ্চিত করার জন্য আমি আপনার পেশাদার চেক এবং পর্যালোচনাটির প্রশংসা করব।

আশা করি এটা সাহায্য করবে.


0

ক্যাশে-নিয়ন্ত্রণ: নো-ক্যাশে সেট করা ছাড়াও, যদি আপনি প্রতিবার লোকাল কপি রিফ্রেশ করতে চান (আই-র কিছু সংস্করণ এটির প্রয়োজন বলে মনে হয়) আপনারও এক্সপায়ার শিরোনাম -1 এ সেট করা উচিত।

এইচটিটিপি ক্যাশে দেখুন - সার্ভারের সাথে চেক করুন, সর্বদা যদি-সংশোধিত-প্রেরণ করা হয়


0

একটি কৌশল আছে যা ব্যবহার করা যেতে পারে trick কৌশলটি হ'ল স্ক্রিপ্ট ট্যাগের ফাইলের নামের সাথে একটি পরামিতি / স্ট্রিং যুক্ত করা এবং আপনি পরিবর্তনগুলি ফাইল করার সময় এটি পরিবর্তন করা।

<script src="myfile.js?version=1.0.0"></script>

ব্রাউজারটি পুরো স্ট্রিংটিকে ফাইল পথ হিসাবে ব্যাখ্যা করে যদিও "এর পরে কী আসে?" পরামিতি হয়। তাই এখন ঘটছে যখন আপনি নিজের ফাইল আপডেট করবেন তখন আপনার ওয়েবসাইটের স্ক্রিপ্ট ট্যাগের নম্বরটি পরিবর্তন করুন (উদাহরণ <script src="myfile.js?version=1.0.1"></script>) এবং প্রতিটি ব্যবহারকারী ব্রাউজার দেখতে পাবেন যে ফাইলটি পরিবর্তিত হয়েছে এবং একটি নতুন অনুলিপি দখল করেছে।


0

ব্রাউজারগুলিকে ক্যাশে সাফ করতে বাধ্য করুন বা সঠিক ডেটা পুনরায় লোড করুন? স্ট্যাকওভারফ্লোতে বর্ণিত বেশিরভাগ সমাধান চেষ্টা করেছি, কিছু কাজ, তবে কিছুক্ষণ পরে, এটি শেষ পর্যন্ত ক্যাশে করে এবং পূর্ববর্তী লোড হওয়া স্ক্রিপ্ট বা ফাইলটি প্রদর্শন করে। এর অন্য কোনও উপায় আছে যা ক্যাশে (সিএসএস, জেএস, ইত্যাদি) সাফ করবে এবং সমস্ত ব্রাউজারে আসলে কাজ করবে?

আমি এখনও অবধি খুঁজে পেয়েছি যে আপনি যদি সার্ভারে আপনার ফাইলে তারিখ এবং সময় পরিবর্তন করেন তবে নির্দিষ্ট সংস্থান পৃথকভাবে পুনরায় লোড করা যায়। "ক্যাশে ক্লিয়ারিং" যতটা সহজ হওয়া উচিত তত সহজ নয়। আমার ব্রাউজারগুলিতে ক্যাশে সাফ করার পরিবর্তে, আমি বুঝতে পেরেছি যে "স্পর্শ" করা সার্ভার ফাইলগুলি ক্যাশে করা প্রকৃতপক্ষে সার্ভারে ক্যাশেড সোর্স ফাইলের তারিখ এবং সময় পরিবর্তন করবে (এজড, ক্রোম এবং ফায়ারফক্সে পরীক্ষিত) এবং বেশিরভাগ ব্রাউজার স্বয়ংক্রিয়ভাবে সর্বাধিক ডাউনলোড করবে আপনার সার্ভারে কী আছে তার বর্তমান তাজা অনুলিপি (কোড, গ্রাফিক্স কোনও মাল্টিমিডিয়াও)। আমি আপনাকে সার্ভারের সর্বাধিক বর্তমান স্ক্রিপ্টগুলি অনুলিপি করার পরামর্শ দিচ্ছি এবং আপনার প্রোগ্রামটি চালানোর আগে " ডায়া টাচ জিনিস" সমাধানটি সমাধান করুন, সুতরাং এটি আপনার সমস্ত সমস্যার ফাইলগুলির তারিখকে সর্বাধিক বর্তমান তারিখ এবং সময় পরিবর্তন করবে, তারপরে এটি একটি নতুন কপি ডাউনলোড করবে আপনার ব্রাউজারে:

<?php
   touch('/www/sample/file1.css');
   touch('/www/sample/file2.js');
?>

তারপরে ... আপনার বাকি প্রোগ্রাম ...

এই সমস্যাটি সমাধান করতে আমার কিছুটা সময় লেগেছে (যতগুলি ব্রাউজার বিভিন্ন কমান্ডের সাথে আলাদাভাবে কাজ করে তবে তারা সমস্ত ফাইলের সময় পরীক্ষা করে এবং আপনার ব্রাউজারে ডাউনলোড করা অনুলিপিটির সাথে তুলনা করে, যদি আলাদা তারিখ এবং সময় থাকে তবে তা রিফ্রেশ করবে), আপনি যদি অনুমিত সঠিক পথে যেতে পারে না, এর জন্য আরও একটি ব্যবহারযোগ্য এবং আরও ভাল সমাধান সর্বদা রয়েছে। শুভেচ্ছা এবং শুভ শিবির। উপায় দ্বারা স্পর্শ (); বা বিকল্পগুলি জাভাস্ক্রিপ্ট বাশ sh পিএইচপি সহ অন্তর্ভুক্ত অনেক প্রোগ্রামিং ভাষায় কাজ করে এবং আপনি এইচটিএমএলে তাদের অন্তর্ভুক্ত বা কল করতে পারেন।


1
যদি ফাইলটি সংশোধন করা হয় তবে টাইমস্ট্যাম্পটি ইতিমধ্যে যেভাবেই পরিবর্তিত হয়ে গেছে, তাই এটি আবার জোর করার কোনও সুবিধা নেই।
ফুসকা সফটওয়্যার

টাচ কমান্ড ফাইলটি মোটেই পরিবর্তন করে না। এটি তারিখ এবং সময়ের বৈশিষ্ট্য পরিবর্তন করে ব্রাউজারটিকে এটি নতুন অনুলিপি হিসাবে ডাউনলোড করতে বোকা বানিয়ে নতুন সংস্করণে রূপান্তরিত করে।
লুইস এইচ ক্যাব্রেজো

-1

আপনি কি ক্যাশেটি সাফ করতে চান, বা কেবল আপনার বর্তমান (পরিবর্তিত?) পৃষ্ঠা ক্যাশে না হয়েছে তা নিশ্চিত করে নিন?

যদি দ্বিতীয়টি হয় তবে এটি হিসাবে সহজ হওয়া উচিত

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

আমি সম্প্রতি একটি ক্রোম পোস্টে এই পদ্ধতির বিষয়ে পড়েছি এবং ফায়ারফক্স ৩.6 সহ আমি কেবলমাত্র কয়েকটি মুভি লাইভ সার্ভার, লোকালহোস্ট এবং উইন্ডোজ ফাইলশেয়ারের উপর ধারাবাহিক ফলাফল পেয়েছি।
ডানজাহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.