ব্রাউজারকে ক্যাশেড সিএসএস / জেএস ফাইলগুলি পুনরায় লোড করতে বাধ্য করবেন কীভাবে?


992

আমি লক্ষ্য করেছি যে কিছু ব্রাউজারগুলি (বিশেষত ফায়ারফক্স এবং অপেরা) .css এবং .js ফাইলগুলির ক্যাশেড অনুলিপিগুলি এমনকি ব্রাউজার সেশনের মধ্যেও ব্যবহার করতে খুব আগ্রহী । আপনি যখন এই ফাইলগুলির মধ্যে একটি আপডেট করেন তবে এটির সমস্যার সৃষ্টি হয় তবে ব্যবহারকারীর ব্রাউজার ক্যাশেড অনুলিপি ব্যবহার করে চলে।

প্রশ্নটি হল: ব্যবহারকারী পরিবর্তিত হয়ে ফাইলটি পুনরায় লোড করতে বাধ্য করার সবচেয়ে মার্জিত উপায় কী?

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

হালনাগাদ :

এখানে কিছুক্ষণ আলোচনার অনুমতি দেওয়ার পরে আমি জন মিলিকিন এবং দা 5 এর পরামর্শটি দরকারী বলে খুঁজে পেয়েছি । দেখা যাচ্ছে যে এর জন্য একটি শব্দ রয়েছে: অটো-সংস্করণ

আমি নীচে একটি নতুন উত্তর পোস্ট করেছি যা আমার মূল সমাধান এবং জন পরামর্শের সংমিশ্রণ।

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

যেহেতু এটি বগাস ক্যোয়ারী স্ট্রিংয়ের সাথে কী ঘটে তা পরিষ্কার নয়, তাই আমি এই উত্তরটি মানছি না।


আমি আমার .htaccess এই আছে, এবং ক্যাশে করা ফাইলগুলির সাথে কখনোই কোন সমস্যা: ExpiresActive On ExpiresDefault "modification"
ফ্রাঙ্ক কনিজন

2
আমি অবশ্যই একমত হই যে ফাইলটির ইউআরএলটিতে সংস্করণ তথ্য যুক্ত করা এখন পর্যন্ত সবচেয়ে ভাল উপায়। এটি সর্বদা, সবার জন্য কাজ করে। তবে, যদি আপনি এটি ব্যবহার না করে থাকেন এবং আপনার নিজের ব্রাউজারে মাঝে মাঝে সেই একটি সিএসএস বা জেএস ফাইলটি পুনরায় লোড করা দরকার ... কেবল এটির নিজের ট্যাবে খুলুন এবং শিফট-পুনরায় লোড করুন (বা সিটিআরএল-এফ 5)! আপনি (লুকানো) আইফ্রেমে কোনও ফাইল লোড করে, লোড হওয়া অবধি অপেক্ষা করে এবং তারপরে ফোন করে জেএস ব্যবহার করে একই জিনিস কার্যকরভাবে করতে পারেন iframe.contentWindow.location.reload(true)স্ট্যাকওভারফ্লো . com / a / 22429796 / 999120 এর পদ্ধতি (4) দেখুন - এটি চিত্রগুলির বিষয়ে, তবে একই প্রযোজ্য।
Doin থেকে

2
এই প্রশ্নটি যেভাবে জিজ্ঞাসা করা হয়েছিল এবং তখন থেকেই আপডেট করা হয়েছে তা আমি সত্যই প্রশংসা করি। উত্তরে আমার কী প্রত্যাশা করা উচিত তা সম্পূর্ণরূপে বর্ণনা করেছে। আমি এখন থেকে আমার প্রশ্নগুলিতে এই পদ্ধতির অনুসরণ করতে যাচ্ছি। চিয়ার্স!
rd22

উত্তর:


455

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

আপডেট 2: নিক জনসনের মন্তব্য অন্তর্ভুক্ত করা হয়েছে যে মূল .htaccessরেজেক্স ফাইলগুলির মতো সমস্যা তৈরি করতে পারে json-1.3.js। সমাধানটি কেবল আবার লিখতে হয় যদি শেষে 10 টি অঙ্ক থাকে। (কারণ 10 ডিজিট 9/9/2001 থেকে 11/20/2286 পর্যন্ত সমস্ত টাইমস্ট্যাম্পগুলি কভার করে))

প্রথমত, আমরা .htaccess এ নিম্নলিখিত পুনর্লিখনের নিয়মটি ব্যবহার করি:

RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css|js)$ $1.$2 [L]

এখন, আমরা নিম্নলিখিত পিএইচপি ফাংশন লিখি:

/**
 *  Given a file, i.e. /css/base.css, replaces it with a string containing the
 *  file's mtime, i.e. /css/base.1221534296.css.
 *  
 *  @param $file  The file to be loaded.  Must be an absolute path (i.e.
 *                starting with slash).
 */
function auto_version($file)
{
  if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
    return $file;

  $mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
  return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}

এখন, আপনি যেখানেই নিজের সিএসএস অন্তর্ভুক্ত করবেন, এখান থেকে এটি পরিবর্তন করুন:

<link rel="stylesheet" href="/css/base.css" type="text/css" />

এটি:

<link rel="stylesheet" href="<?php echo auto_version('/css/base.css'); ?>" type="text/css" />

এইভাবে, আপনাকে আর কখনও লিঙ্ক ট্যাগটি পরিবর্তন করতে হবে না এবং ব্যবহারকারী সর্বদা সর্বশেষতম সিএসএস দেখতে পাবেন। ব্রাউজারটি সিএসএস ফাইলটি ক্যাশে করতে সক্ষম হবে, তবে আপনি যখন নিজের সিএসএসে কোনও পরিবর্তন করবেন ব্রাউজারটি এটি একটি নতুন URL হিসাবে দেখবে, সুতরাং এটি ক্যাশেড অনুলিপিটি ব্যবহার করবে না।

এটি চিত্র, ফ্যাভিকন এবং জাভাস্ক্রিপ্ট নিয়েও কাজ করতে পারে। মূলত যে কোনও কিছুই গতিশীলভাবে উত্পন্ন হয় না।


16
আমার নিজের স্ট্যাটিক কনটেন্ট সার্ভারটি ঠিক একই কাজ করে, আমি ফাইলের পরিবর্তনের (বেস.1221534296.css) পরিবর্তে সংস্করণ (বেসকএসএস? V = 1221534296) জন্য একটি পরামিতি ব্যবহার করি। আমি সন্দেহ করি আপনার উপায় যদিও কিছুটা দক্ষ হতে পারে। খুব ঠান্ডা.
জেনস রোল্যান্ড

4
@ কিপ: খুব চটজলদি সমাধান। ইউআরএল পুনর্লিখনের স্পষ্টতই url গুলিকে সুন্দর করার চেয়ে আরও অনেক কিছু রয়েছে offer
জেমস পি।

37
আমি এটির সাথে একটি সমস্যা দেখতে পাচ্ছি যে এটি ফাইল সিস্টেমটি বহুবার অ্যাক্সেস করে - ঠিক - লিঙ্কের সংখ্যা * অনুরোধের সংখ্যা / সেকেন্ড ... যা আপনার পক্ষে সমস্যা হতে পারে বা নাও হতে পারে।
টমু ফেজফার

3
@ অ্যালেক্সএক্সেল: না, প্যারামিটার পরিবর্তিত হলে ব্রাউজারগুলি এটি পুনরায় আনবে, তবে কিছু সার্বজনীন প্রক্সিগুলি ইউআরএল প্যারামিটারগুলির সাহায্যে ফাইলগুলিকে ক্যাশে করবে না, তাই সংস্করণটিকে পথের মধ্যে অন্তর্ভুক্ত করা সেরা অভ্যাস। এবং ডাব্লুপিও-তে প্রতিটি অন্যান্য পারফরম্যান্স বাধার সাথে তুলনা করে মোড_ব্রাইট ওভারহেড হ'ল
জেনস রোল্যান্ড

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

184

সাধারণ ক্লায়েন্ট-সাইড টেকনিক

সাধারণভাবে, ক্যাশিং ভাল .. সুতরাং ওয়েবসাইট তৈরির সময় আপনি নিজের সমস্যাটি ঠিক করছেন কিনা বা আপনি কোনও পরিবেশের পরিবেশে ক্যাশে নিয়ন্ত্রণ করার চেষ্টা করছেন কিনা তার উপর নির্ভর করে বেশ কয়েকটি কৌশল রয়েছে।

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

<script src="/myJavascript.js?version=4"></script>

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

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

সুতরাং আপনি যখন নিজের সাইটটি বিকাশ করছেন, তখন একটি ভাল কৌশল হ'ল স্বয়ংক্রিয়ভাবে ক্যোয়ারিং স্ট্রিং প্যারামিটার তৈরি করা:

<!-- Development version: -->
<script>document.write('<script src="/myJavascript.js?dev=' + Math.floor(Math.random() * 100) + '"\><\/script>');</script>

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

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

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

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


3
জাভাস্ক্রিপ্টের সাথে ক্যোয়ারী স্ট্রিং তৈরি করার দ্রুত কৌশল সক্রিয় বিকাশের সময় দুর্দান্ত কাজ করে। আমি পিএইচপি দিয়েও একই কাজ করেছি।
অ্যালান টুরিং

2
মূল পোস্টারের পছন্দসই ফলাফলটি অর্জনের এটি সহজতম উপায়। আপনি যখন পৃষ্ঠাটি লোড করেন প্রতিটি সময় আপনি .css বা .js ফাইলটির পুনরায় লোড করতে বাধ্য হন তবে মোড_আরাইটের পদ্ধতিটি ভালভাবে কাজ করে। আপনি প্রকৃতপক্ষে ফাইলটি পরিবর্তন না করা এবং এটি পুনরায় লোড করার জন্য সত্যিই না চান না হওয়া অবধি এই পদ্ধতিটি এখনও ক্যাচিংয়ের অনুমতি দেয়।
স্কট 80109

@ কেপারো, আমি সমস্ত পৃষ্ঠায় jquery এর প্রচুর সংখ্যা পেয়েছি যদি আমি নিজে নিজে এটি পরিবর্তন করতে যাই তবে এটি এক মাস সময় নিতে পারে। আপনি যদি প্রতিটি পৃষ্ঠায় কোড না করে আমাকে সমাধান করতে সহায়তা করতে পারেন।
ক্র্যাকার

1
আমি যখন ব্যবহার করি তখন এটি আমার সিএসএসের জন্য কাজ করে না বলে মনে হয়:<link href='myCss.css?dev=14141'...>
নুমেনন

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

113

অ্যাপাচের জন্য গুগলের মোড_পেজস্পিড প্লাগইনটি আপনার জন্য অটো-সংস্করণ করবে। এটা সত্যিই চতুর।

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


1
এটি দুর্দান্ত, তবে এখনও বিটাতে। এটি এন্টারপ্রাইজ পরিষেবার জন্য ব্যবহার করা যেতে পারে?
সংঘুন লী

26
যখন এটি স্পষ্টত ব্রাউজার-ইস্যু হয়ে থাকে তখন এটি ভুল (উত্সের সাথে স্বয়ংক্রিয়ভাবে ফিডিং) হয়। আমাদের (বিকাশকারীদের) একটি আসল মস্তিষ্ক-মোছা-রিফ্রেশ দিন: <ctrl> + F5
T4NK3R

25
মোড_পেজস্পিডটি আপনার এইচটিএমএল / সিএসএস / জেএসের জন্য সম্পূর্ণ স্বয়ংক্রিয় বিল্ড / সংকলন পদক্ষেপের সাথে কার্যত সমান। আমি মনে করি যে কোনও গুরুতর বিকাশকারীকে যারা বিল্ড সিস্টেমগুলি অভ্যন্তরীণভাবে ভুল বলে মনে করে, বা এটি সম্পূর্ণরূপে স্বয়ংক্রিয় হওয়ায় এতে কোনও ভুল আছে তা খুঁজে পেতে আপনাকে কঠোর চাপ দেওয়া হবে। একটি পরিষ্কার বিল্ডের উপমাটি মোড_পেজস্পিডের ক্যাশে সাফ করার জন্য: কোড . google.com/p/modpagespeed/wiki/… ?
লিওপড

3
@ T4NK3R মোড_পেজস্পিডে ক্যাশে পরিচালনা করার জন্য আপনার উত্সটির সাথে কিছু করার দরকার নেই, এটি কেবল উল্লেখ করা হয়েছিল যে এটি সংশোধনের মতো জিনিসগুলিতে সহায়তা করতে পারে। এটি "WRONG", সম্পূর্ণরূপে বিষয়ভিত্তিক whether এটি আপনার পক্ষে ভুল হতে পারে, তবে এর অর্থ এটি অভ্যন্তরীণভাবে খারাপ
ম্যাডব্র্যাকস

2
এটি nginx এর সাথেও কাজ করে যদিও আপনাকে এটিকে উত্স থেকে বানাতে হবে: developers.google.com/speed/pagespeed/module/…
রোহিত

93

ম্যানুয়ালি সংস্করণ পরিবর্তন করার পরিবর্তে, আমি আপনাকে আসল সিএসএস ফাইলের একটি এমডি 5 হ্যাশ ব্যবহার করার পরামর্শ দিচ্ছি।

সুতরাং আপনার ইউআরএল কিছু হবে

http://mysite.com/css/[md5_hash_here]/style.css

আপনি এখনও হ্যাশটি সরিয়ে ফেলার জন্য পুনর্লিখনের নিয়মটি ব্যবহার করতে পারেন তবে সুবিধাটি হ'ল এখন আপনি আপনার ক্যাশে নীতিটিকে "চিরতরে ক্যাশে" সেট করতে পারবেন, যেহেতু ইউআরএলটি একই, এর অর্থ এই যে ফাইলটি অপরিবর্তিত রয়েছে।

তারপরে আপনি একটি সাধারণ শেল স্ক্রিপ্ট লিখতে পারেন যা ফাইলটির হ্যাশ গণনা করবে এবং আপনার ট্যাগ আপডেট করবে (আপনি সম্ভবত এটি অন্তর্ভুক্তির জন্য একটি পৃথক ফাইলে স্থানান্তর করতে চান)।

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


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

শেল, রুবি ইত্যাদিতে একটি বাস্তবায়ন দুর্দান্ত হবে
পিটার

3
খুব সুন্দর সমাধান .. তবে আমি মনে করি এটি প্রতিটি পৃষ্ঠার জন্য প্রতিটি ফাইলের অনুরোধে (সিএসএস, জেএস, চিত্র, এইচটিএমএল..এইচটিএল) ফাইলের হ্যাশ গণনা করা সম্পদগুলি গ্রহন করে।
ডিপ ব্লু

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

@ ডিপব্লিউ - উত্তর বলছে "প্রতিবার সিএসএস বদলে সেই স্ক্রিপ্টটি চালান" । এটি প্রতিটি পৃষ্ঠার দর্শনে নেই। ওটিওএইচ উত্তরটি বিশদগুলি ছাড়ায় - পরিবর্তিত হ্যাশ কীভাবে ইউআরএল এর অংশ হয়ে যায়? আমি জানি না ...
টুলমেকারস্টেভ

70

আপনি কেন এই সমাধানটি প্রয়োগ করতে এত ব্যথা নিচ্ছেন তা নিশ্চিত নন।

আপনার ফাইলটি পরিবর্তিত টাইমস্ট্যাম্প পেতে এবং ফাইলটিতে ক্যোরিস্ট্রিং হিসাবে যুক্ত করার জন্য আপনাকে যা করতে হবে তা সমস্তই

পিএইচপি-তে আমি এটি করতাম:

<link href="mycss.css?v=<?= filemtime('mycss.css') ?>" rel="stylesheet">

ফাইলমটাইম একটি পিএইচপি ফাংশন যা ফাইলটি পরিবর্তিত টাইমস্ট্যাম্পটি দেয়।


আপনি শুধু ব্যবহার করতে পারেন mycss.css?1234567890
গ্যাভিন

3
খুব মার্জিত, যদিও আমি এটিতে কিছুটা সংশোধন করেছি <link rel="stylesheet" href="mycss.css?<?php echo filemtime('mycss.css') ?>"/>, ঠিক তেমন ক্ষেত্রে জিইটি ভেরিয়েবলগুলি (প্রস্তাবিত ফর্ম্যাটে) ইউআরএল ক্যাশে করা সম্পর্কে এই থ্রেডে কিছু যুক্তি সঠিক
luke_mclachlan

আমার শেষ মন্তব্যটি আরও, আমি দেখেছি যে ওয়ার্ডপ্রেস ব্যবহার করে ?ver=তাই কে জানে!
luke_mclachlan

দুর্দান্ত সমাধান। আমার জন্য আমি আরও দেখতে পেলাম যে ফাইলমটাইম পুরোপুরি যোগ্যতাসম্পন্ন ডোমেন নেম (এফকিউডিএন) এর জন্য কাজ করে না তাই আমি ফাইলের সময় অংশের জন্য এফকিউডিএন এবং ফাইলটাইম অংশের জন্য $ _SERVER ["ডকুমআরআইআরওটি"] ব্যবহার করি। উদাহরণ: <লিঙ্ক rel = "স্টাইলশিট" href = "http: //theurl/mycss.css? V = <? পিএইচপি প্রতিধ্বনি ফাইলমাইম ($ _ সার্ভার [" ডকুমিনআরওট "]। '/mycss.css')?>" />
rrtx2000

দুর্দান্ত ধন্যবাদ সহজ এবং ভাল। এটি পাইথনে রয়েছে: প্রগপথ = os.path.dirname (sys.argv [0]) Def সংস্করণ (ফাইল): টাইমস্ট্যাম্প = os.path.getmtime ('% s /../ ওয়েব /% s'% (অগ্রগথ , ফাইল)) '% s? v =% s'% (ফাইল, টাইমস্ট্যাম্প) প্রিন্ট করুন <লিঙ্ক href = "% s" rel = "স্টাইলশিট" "টাইপ =" পাঠ্য / সিএসএস "/> '\% সংস্করণ ( 'সিএসএস / মেইন সিএসএস')
ডিসিঙ্ক

52

আপনি ?foo=1234নিজের সিএসএস / জেএস আমদানির শেষে রেখে দিতে পারেন , আপনার পছন্দ অনুযায়ী যা করতে 1234 পরিবর্তন করুন। উদাহরণের জন্য এসও এইচটিএমএল উত্সটি দেখুন।

সেখানে ধারণাটি কি? অনুরোধটি যেভাবেই হোক প্যারামিটারগুলি বাতিল / উপেক্ষা করা হয় এবং আপনি কোনও নতুন সংস্করণ রোল আউট করার সময় আপনি সেই নম্বরটি পরিবর্তন করতে পারেন।


দ্রষ্টব্য: এটি কীভাবে ক্যাশেটিকে প্রভাবিত করে সে সম্পর্কে কিছু যুক্তি রয়েছে। আমি বিশ্বাস করি এর সাধারণ বক্তব্যটি হ'ল প্যারামিটারগুলি সহ বা ছাড়াই GET অনুরোধ করা উচিত , সুতরাং উপরের সমাধানটি কাজ করা উচিত।

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


ছাইপাঁশ. ক্যোয়ারী-স্ট্রিং (যেমন GET পরামিতি) URL এর অংশ URL তারা পারে, এবং ক্যাশে করা হবে। এটি একটি ভাল সমাধান।
Troelskn

9
@ ট্রয়েলস্কন: এইচটিটিপি ১.১ স্পেক অন্যথায় বলেছে (জিওটি এবং হেডের অনুরোধগুলির সাথে ক্যোয়ারী প্যারামগুলির সাথে সম্মতি জানানো হয়েছে): ক্যাশে যেমন ইউআরআইয়ের প্রতিক্রিয়াগুলিকে তাজা হিসাবে চিকিত্সা না করা উচিত যদি না সার্ভার একটি সুস্পষ্ট মেয়াদোত্তীর্ণ সময় সরবরাহ করে। W3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.9
মাইকেল জনসন

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

34
লক্ষণীয়, যে কারণেই হোক না কেন, স্ট্যাকওভারফ্লো নিজেই ক্যোরি স্ট্রিং পদ্ধতিটি ব্যবহার করে।
জেসন

2
যাচাই করেছেন যে? = পরামিতি ব্যবহার করে প্যারামিটারগুলি পরিবর্তিত হলে ব্রাউজারগুলি ক্যাশেড ফাইল পুনরায় আনবে না। একমাত্র উপায় হ'ল সার্ভারের শেষে ফাইলের নাম নিজেই প্রোগ্রামক্রমে পরিবর্তন করা যায় যা কিপ উত্তর দিয়েছিল
অরুনস্ক্রিশ

41

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

আরো দেখুন:


3
ধন্যবাদ, আমি অনুমান করি এটি অন্য একটি ক্ষেত্রে যেখানে আমার ধারণাটি নিয়ে আলোচনা করা হয়েছে, আমি কেবল এটি কী বলা হয়েছিল তা জানতাম না তাই গুগল অনুসন্ধানে আমি এটি কখনই পাইনি।
কিপ করুন

27

30 বা তত্সহ বিদ্যমান উত্তরগুলি একটি সার্কা ২০০৮ ওয়েবসাইটের জন্য দুর্দান্ত পরামর্শ। যাইহোক, যখন এটি একটি আধুনিক, একক পৃষ্ঠার অ্যাপ্লিকেশন (এসপিএ) এর কথা আসে, তখন এটি কিছু মৌলিক অনুমানগুলি পুনরায় চিন্তা করার সময় হতে পারে ... বিশেষত এই ধারণাটি যে ওয়েব সার্ভারের কেবলমাত্র একক, সাম্প্রতিক সংস্করণটি পরিবেশন করা বাঞ্ছনীয় idea ফাইল।

কল্পনা করুন যে আপনি এমন একজন ব্যবহারকারী যা আপনার ব্রাউজারে একটি স্পা ভার্সন ভার্শন এম করেছেন :

  1. তোমার সিডি পাইপলাইন স্থাপন নতুন সংস্করণ এন সার্ভার সম্মুখের আবেদন
  2. আপনি এসপিএ-র মধ্যে নেভিগেট করুন, এটি পেতে সার্ভারে একটি এক্সএইচআর প্রেরণ করে /some.template
    • (আপনার ব্রাউজারটি পৃষ্ঠাটি রিফ্রেশ করেনি, সুতরাং আপনি এখনও সংস্করণ এম চালিয়ে যাচ্ছেন )
  3. সার্ভারটি এর বিষয়বস্তুগুলির সাথে প্রতিক্রিয়া জানিয়েছে /some.template- আপনি কি এটি টেমপ্লেটের এম বা এন সংস্করণটি ফিরিয়ে দিতে চান ?

/some.templateসংস্করণ এম এবং এন এর মধ্যে পরিবর্তিত ফর্ম্যাটটি (বা ফাইলটির নাম পরিবর্তন করা হয়েছে বা যাই হোক না কেন) আপনি সম্ভবত ব্রাউজারে পাঠানো টেম্পলেটটির সংস্করণ এন চান না যা পার্সারের পুরানো সংস্করণ এম চালিয়ে যাচ্ছে

দুটি শর্ত পূরণ হলে ওয়েব অ্যাপসটি এই সমস্যাটিতে চলে:

  • প্রাথমিক পৃষ্ঠা লোডের কিছু পরে সংস্থানসমূহকে সংস্থান হিসাবে অনুরোধ করা হয়েছে
  • অ্যাপ্লিকেশন যুক্তি সংস্থানীয় সামগ্রীর বিষয়গুলি (ভবিষ্যতের সংস্করণগুলিতে পরিবর্তিত হতে পারে) ধরে নেয় umes

আপনার অ্যাপ্লিকেশনটিকে একবারে সমান্তরালে একাধিক সংস্করণ পরিবেশন করার পরে, ক্যাচিং সমাধান করা এবং "পুনরায় লোডিং" তুচ্ছ হয়ে ওঠে:

  1. Versioned dirs সব সাইটে ফাইল ইনস্টল করুন: /v<release_tag_1>/…files…,/v<release_tag_2>/…files…
  2. ব্রাউজারগুলিকে চিরতরে ক্যাশে ফাইলগুলি দিতে HTTP শিরোনাম সেট করুন
    • (বা আরও ভাল, সবকিছু সিডিএন-এ রাখুন)
  3. সংস্করণযুক্ত ডায়রের মধ্যে একটিতে সেই ফাইলটির দিকে নির্দেশ করতে সমস্ত <script>এবং <link>ট্যাগগুলি আপডেট করুন

এই শেষ পদক্ষেপটি জটিল বলে মনে হচ্ছে, কারণ এটিতে আপনার সার্ভার-পাশ বা ক্লায়েন্ট-সাইড কোডের প্রতিটি URL- এর জন্য URL বিল্ডারকে কল করা দরকার require অথবা আপনি কেবল <base>ট্যাগটির চতুর ব্যবহার করতে পারেন এবং বর্তমান সংস্করণটিকে এক জায়গায় পরিবর্তন করতে পারেন।

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


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

দুর্দান্ত মন্তব্য। আমি বুঝতে পারি না যখন লোকেরা এসপিএ'র নতুন সমস্যা না নিয়েই ক্যাশ সমস্যাগুলিকে আসল সমাধান হিসাবে ক্যাশে বস্টিং এবং এইচটিটিপি ক্যাশে নিয়ে কথা বলছে, যেন এটি প্রান্তিক ঘটনা।
ডেভিড ক্যাসিলাস

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

একক পৃষ্ঠাগুলির অ্যাপ্লিকেশনগুলির ক্ষেত্রে একটি সুচিন্তিত উত্তরটি দেখে ভাল লাগছে।
নাট আমি

আপনি যদি আরও তথ্যের জন্য অনুসন্ধান করতে চান তবে এটি "নীল-সবুজ স্থাপনা"।
ফিলিপ

15

Foo.css ব্যবহার করবেন না? সংস্করণ = 1! ব্রাউজারগুলি জিইটি ভেরিয়েবলগুলির সাথে ইউআরএলগুলি ক্যাশে করার কথা নয়। মতে http://www.thinkvitamin.com/features/webapps/serving-javascript-fast , যদিও ইন্টারনেট এবং Firefox এই উপেক্ষা, অপেরা এবং সাফারি না! পরিবর্তে, foo.v1234.css ব্যবহার করুন এবং সংস্করণ নম্বরটি ছড়িয়ে দিতে পুনর্লিখনের নিয়ম ব্যবহার করুন।


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

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

13

লারাভেল (পিএইচপি) এ আমরা নিম্নলিখিতটি পরিষ্কার এবং মার্জিত উপায়ে (ফাইল সংশোধন টাইমস্ট্যাম্প ব্যবহার করে) করতে পারি:

<script src="{{ asset('/js/your.js?v='.filemtime('js/your.js')) }}"></script>

এবং সিএসএস জন্য অনুরূপ

<link rel="stylesheet" href="{{asset('css/your.css?v='.filemtime('css/your.css'))}}">

এইচটিএমএল আউটপুট উদাহরণ ( ইউনিক্স টাইমস্ট্যাম্পfilemtime হিসাবে ফেরত সময় )

<link rel="stylesheet" href="assets/css/your.css?v=1577772366">

এইচটিএমএলে এই কমান্ডের আউটপুট কি? এবং যদি আমার কেবলমাত্র v v3 3,? V = 4 এবং ইত্যাদির মতো সংস্করণগুলি পুনর্নবীকরণের প্রয়োজন হয় - ব্রাউজারটি প্রত্যেকবার ব্যবহারকারীদের ওয়েবসাইটে সিএসএস লোড করতে বাধ্য করে না
Gediminas

ফাইলটাইম : "এই ফাংশনটি সেই সময়টি দেয় যখন কোনও ফাইলের ডেটা ব্লকগুলি লিখিত ছিল, অর্থাত্ সেই সময় যখন ফাইলের বিষয়বস্তু পরিবর্তন করা হয়েছিল।" src: php.net/manual/en/function.filemtime.php
কামিল কিয়েসজেউস্কি

11

পুনঃলিখনের জন্য জেএস বা সিএসএস ফাইলগুলির জন্য একটি ছোট আপডেট দরকার যা শেষে ডট নোটেশন সংস্করণ ধারণ করে। যেমন json-1.3.js।

আমি রেগেক্সে একটি ডট নেগ্রেশন ক্লাস [^।] যুক্ত করেছি তাই সংখ্যা। উপেক্ষা করা হয়।

RewriteRule ^(.*)\.[^.][\d]+\.(css|js)$ $1.$2 [L]

2
ইনপুট জন্য ধন্যবাদ! যেহেতু আমি এই পোস্টটি লিখেছি আমি এটি দ্বারা পোড়াও হয়েছি। আমার সমাধানটি কেবল তখনই আবার লিখতে হয়েছিল যদি ফাইলনামের শেষ অংশটিতে ঠিক দশটি অঙ্ক থাকে। (10 সংখ্যার 11/20/2286 থেকে 9/9/2001 থেকে সব টাইমস্ট্যাম্প জুড়ে।) আমি আমার উত্তর আপডেট করেছি এই Regex অন্তর্ভুক্ত করা:^(.*)\.[\d]{10}\.(css|js)$ $1.$2
কিপ

আমি রেজেক্স বুঝি, তবে আপনি [^.]এখানে কোন সমস্যার সমাধান করছেন তা আমি বুঝতে পারি না । এছাড়াও, \dএকটি অক্ষর শ্রেণীর ভিতরে লেখার কোনও লাভ নেই - \d+একই কাজ করবে। পোস্ট হিসাবে, আপনার প্যাটার্নটি কোনও অক্ষরের সাথে মিলবে (লোভের সাথে), তারপরে একটি আক্ষরিক বিন্দু, তারপরে একটি নন ডট, তারপরে এক বা একাধিক সংখ্যা, তারপরে একটি বিন্দু, তারপরে cssবা jsতারপরে ফাইলের নামের শেষ। আপনার নমুনা ইনপুটটির
মিকম্যাকুসা

10

ASP.NET 4.5 এবং এর চেয়ে বেশি আপনি স্ক্রিপ্ট বান্ডিলিং ব্যবহার করতে পারেন ।

অনুরোধটি http://localhost/MvcBM_time/bundles/AllMyScripts?v=r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81বান্ডিল অলমাইস্ক্রিপ্টগুলির জন্য এবং এতে একটি ক্যোয়ারী স্ট্রিং জুড়ি রয়েছে v = r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81। ক্যোরিয় স্ট্রিং ভিয়ের একটি মান টোকেন রয়েছে যা ক্যাশে যাওয়ার জন্য ব্যবহৃত একটি অনন্য শনাক্তকারী। যতক্ষণ না বান্ডিলটি পরিবর্তন হয় না ততক্ষণ এএসপি.এনইটি অ্যাপ্লিকেশন এই টোকেনটি ব্যবহার করে অলমাই স্ক্রিপ্টস বান্ডেলটির জন্য অনুরোধ করবে। যদি বান্ডেলের কোনও ফাইল পরিবর্তন হয় তবে এএসপি.এনইটি অপ্টিমাইজেশান ফ্রেমওয়ার্কটি একটি নতুন টোকেন উত্পন্ন করবে, গ্যারান্টি দিয়ে যে বান্ডেলের জন্য ব্রাউজারের অনুরোধগুলি সর্বশেষতম বান্ডেলটি পাবে।

বেনিফিটের অন্যান্য সুবিধাগুলি রয়েছে ম্যানিফিকেশন সহ প্রথম বারের পৃষ্ঠা লোডে বর্ধিত পারফরম্যান্স সহ।


দয়া করে আমাকে সহায়তা করুন আমি কেবল সিএসএস বা জেএস ফাইলগুলিতে পরিবর্তন করে bundle.config এ কোনও পরিবর্তন করছি না তবে আমি কীভাবে ক্যাশে সমস্যা সমাধান করতে পারি?
বেদঙ্কিতা কুম্ভর

10

এখানে একটি খাঁটি জাভাস্ক্রিপ্ট সমাধান রয়েছে

(function(){

    // Match this timestamp with the release of your code
    var lastVersioning = Date.UTC(2014, 11, 20, 2, 15, 10);

    var lastCacheDateTime = localStorage.getItem('lastCacheDatetime');

    if(lastCacheDateTime){
        if(lastVersioning > lastCacheDateTime){
            var reload = true;
        }
    }

    localStorage.setItem('lastCacheDatetime', Date.now());

    if(reload){
        location.reload(true);
    }

})();

উপরের ব্যবহারকারীরা সর্বশেষ আপনার সাইটটি পরিদর্শন করেছে for আপনি যদি নতুন কোড প্রকাশের আগে শেষ ভিজিটটি হয় তবে এটি location.reload(true)সার্ভার থেকে পৃষ্ঠা রিফ্রেশকে বাধ্য করার জন্য ব্যবহার করে।

আমার কাছে এটি সাধারণত প্রথম স্ক্রিপ্ট হিসাবে থাকে <head>তাই এটি অন্য কোনও সামগ্রী লোড হওয়ার আগে মূল্যায়ন করা হয়। যদি কোনও পুনরায় লোড হওয়ার প্রয়োজন হয় তবে এটি ব্যবহারকারীর পক্ষে খুব কমই লক্ষণীয়।

আমি ব্রাউজারে শেষ ভিজিট টাইমস্ট্যাম্প সংরক্ষণ করার জন্য স্থানীয় স্টোরেজটি ব্যবহার করছি, তবে আপনি যদি IE এর পুরানো সংস্করণগুলি সমর্থন করতে চান তবে আপনি মিশ্রণটিতে কুকিজ যুক্ত করতে পারেন।


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

9

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

এটি নিম্নলিখিত ফলাফল হতে পারে:

<link rel="stylesheet" href="/css/base.css?[hash-here]" type="text/css" />

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


8

আমার বিকাশের জন্য, আমি দেখতে পাচ্ছি যে ক্রোমের একটি দুর্দান্ত সমাধান রয়েছে।

https://developer.chrome.com/devtools/docs/tips-and-tricks#hard-reload

বিকাশকারী সরঞ্জাম খোলার সাথে সাথে রিফ্রেশ বোতামটি দীর্ঘ ক্লিক করুন এবং একবার আপনি "ক্যাশে খালি করুন এবং হার্ড পুনরায় লোড করুন" -এ ঘুরে দেখেন।

এটি আমার সেরা বন্ধু এবং আপনি যা চান তা পাওয়ার জন্য এটি হালকা ওজনের একটি দুর্দান্ত উপায়!


এবং যদি আপনি ক্রোমকে আপনার বিকাশের পরিবেশ হিসাবে ব্যবহার করেন তবে আর একটি অ আক্রমণাত্মক সমাধান হ'ল ক্যাশে অক্ষম করা: সেটিংস কগের অধীনে, আপনি 'ক্যাশে অক্ষম করুন' নির্বাচন করে ডিস্ক ক্যাশেটিকে অকার্যকর করতে পারেন (দ্রষ্টব্য: দেবটুলগুলি অবশ্যই দৃশ্যমান / খোলা থাকতে হবে) এটি কাজ করার জন্য)।
ভেলোজেট

7

কিপকে তার নিখুঁত সমাধানের জন্য ধন্যবাদ!

আমি এটিকে জেন্ড_ভিউ_হেল্পার হিসাবে ব্যবহার করতে প্রসারিত করেছি। কারণ আমার ক্লায়েন্ট তার পৃষ্ঠাটি ভার্চুয়াল হোস্টে চালায় আমি তার জন্য এটিও প্রসারিত করেছি।

আশা করি এটি অন্য কাউকেও সহায়তা করবে।

/**
 * Extend filepath with timestamp to force browser to
 * automatically refresh them if they are updated
 *
 * This is based on Kip's version, but now
 * also works on virtual hosts
 * @link http://stackoverflow.com/questions/118884/what-is-an-elegant-way-to-force-browsers-to-reload-cached-css-js-files
 *
 * Usage:
 * - extend your .htaccess file with
 * # Route for My_View_Helper_AutoRefreshRewriter
 * # which extends files with there timestamp so if these
 * # are updated a automatic refresh should occur
 * # RewriteRule ^(.*)\.[^.][\d]+\.(css|js)$ $1.$2 [L]
 * - then use it in your view script like
 * $this->headLink()->appendStylesheet( $this->autoRefreshRewriter($this->cssPath . 'default.css'));
 *
 */
class My_View_Helper_AutoRefreshRewriter extends Zend_View_Helper_Abstract {

    public function autoRefreshRewriter($filePath) {

        if (strpos($filePath, '/') !== 0) {

            // path has no leading '/'
            return $filePath;
        } elseif (file_exists($_SERVER['DOCUMENT_ROOT'] . $filePath)) {

            // file exists under normal path
            // so build path based on this
            $mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $filePath);
            return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $filePath);
        } else {

            // fetch directory of index.php file (file from all others are included)
            // and get only the directory
            $indexFilePath = dirname(current(get_included_files()));

            // check if file exist relativ to index file
            if (file_exists($indexFilePath . $filePath)) {

                // get timestamp based on this relativ path
                $mtime = filemtime($indexFilePath . $filePath);

                // write generated timestamp to path
                // but use old path not the relativ one
                return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $filePath);
            } else {

                return $filePath;
            }
        }
    }

}

চিয়ার্স এবং ধন্যবাদ।


7

স্ক্রিপ্ট নোড (বা সিএসএস) উপাদানটি গতিশীলভাবে তৈরি করে ক্লায়েন্ট পার্শ্বযুক্ত ডোম পদ্ধতির সন্ধান পান নি:

<script>
    var node = document.createElement("script"); 
    node.type = "text/javascript";
    node.src = 'test.js?'+Math.floor(Math.random()*999999999);
    document.getElementsByTagName("head")[0].appendChild(node);
</script>

6

গুগল ক্রোমে হার্ড রিলোডের পাশাপাশি খালি ক্যাশে এবং হার্ড পুনরায়লোড বিকল্প রয়েছে one একটি নির্বাচন করতে আপনি পুনরায় লোড বোতামটি (ইনস্পেক্ট মোডে) ক্লিক করে ধরে রাখতে পারেন।


দ্বারা "পরিদর্শন মোড", তারা F12 চেপে ওরফে "দেব সরঞ্জাম" উল্লেখ করা হয়, ওরফে Ctrl + Shift + I, ওরফে নির্মল করার জন্য, ant menu> More Tools> Developer Tools, ওরফে right click> Inspect Element। প্রতিটি পুনরায় লোডে হার্ড পুনরায় লোড করার জন্য দেব সরঞ্জামগুলিতে (আমি অবস্থানটি ভুলে যাচ্ছি) কোথাও কবর দেওয়া একটি সেটিংসও রয়েছে।
জনি আসমার

5

আপনি জেএস / সিএসএস ফাইলের একটি স্পিউরিয়াস প্যারামিটার হিসাবে সেশন-আইডি যুক্ত করলে আপনি "সেশন-ওয়াইড ক্যাচিং" জোর করতে পারেন:

<link rel="stylesheet" src="myStyles.css?ABCDEF12345sessionID" />
<script language="javascript" src="myCode.js?ABCDEF12345sessionID"></script>

আপনি যদি সংস্করণ-বিস্তৃত ক্যাচিং চান তবে আপনি ফাইলের তারিখ বা অনুরূপ প্রিন্ট করতে কিছু কোড যুক্ত করতে পারেন। আপনি যদি জাভা ব্যবহার করছেন তবে আপনি লিঙ্কটি মার্জিত উপায়ে তৈরি করতে একটি কাস্টম-ট্যাগ ব্যবহার করতে পারেন।

<link rel="stylesheet" src="myStyles.css?20080922_1020" />
<script language="javascript" src="myCode.js?20080922_1120"></script>

5

বলুন আপনার কাছে এখানে একটি ফাইল উপলব্ধ রয়েছে:

/styles/screen.css

আপনি হয় ইউআরআই-তে সংস্করণ তথ্য সহ একটি ক্যোয়ারী প্যারামিটার যুক্ত করতে পারেন, যেমন:

/styles/screen.css?v=1234

অথবা আপনি সংস্করণ তথ্যটি পুনরায় সরবরাহ করতে পারেন, যেমন:

/v/1234/styles/screen.css

আইএমএইচও দ্বিতীয় পদ্ধতিটি সিএসএস ফাইলগুলির জন্য ভাল কারণ তারা আপেক্ষিক ইউআরএল ব্যবহার করে চিত্রগুলি উল্লেখ করতে পারে যার অর্থ আপনি যদি এর background-imageমতো নির্দিষ্ট করেন তবে :

body {
    background-image: url('images/happy.gif');
}

এর ইউআরএল কার্যকরভাবে হবে:

/v/1234/styles/images/happy.gif

এর অর্থ হ'ল আপনি যদি ব্যবহার করা সংস্করণ নম্বর আপডেট করেন তবে সার্ভার এটিকে একটি নতুন সংস্থান হিসাবে বিবেচনা করবে এবং ক্যাশেড সংস্করণ ব্যবহার করবে না। যদি আপনি আপনার সংস্করণ নম্বরটি সাবভারশন / সিভিএস / ইত্যাদি ভিত্তিতে ভিত্তি করে থাকেন। রিভিশনটির অর্থ এই যে সিএসএস ফাইলগুলিতে রেফারেন্স করা চিত্রগুলিতে পরিবর্তনগুলি লক্ষ্য করা যাবে। যে প্রথম স্কিমটি সহ URL নিশ্চিত করা হয় না, অর্থাত্ images/happy.gifআপেক্ষিক /styles/screen.css?v=1235হয়/styles/images/happy.gif যা কোনো সংস্করণ তথ্য ধারণ করে না।

আমি জাভা সার্লেলেটগুলির সাহায্যে এই কৌশলটি ব্যবহার করে একটি ক্যাচিং সলিউশন বাস্তবায়ন করেছি /v/*এবং অন্তর্নিহিত সংস্থান (যেমন /styles/screen.css) গুলিকে প্রতিনিধিত্ব করে এমন একটি সার্লেট দিয়ে অনুরোধগুলি হ্যান্ডেল করেছি । উন্নয়ন মোডে আমি হেডার যে সবসময় ক্লায়েন্ট বলতে ক্যাশে সেট সার্ভারের সাথে রিসোর্সের ঠাণ্ডাই পরীক্ষা করুন (এটি সাধারণত কোনো 304 ফলাফল যদি হুল বিড়াল এর প্রতিনিধি DefaultServletএবং .css, .jsইত্যাদি ফাইল পরিবর্তন হয়নি) যখন স্থাপনার মোডে আমি শিরোনামগুলি সেট করি যা "চিরতরে ক্যাশে" বলে।


কেবলমাত্র এমন কোনও ফোল্ডার যুক্ত করা যা আপনি যখন প্রয়োজন সম্পর্কিত ইউআরএলগুলি ব্যবহার করেন প্রয়োজনে যখন নামকরণ করতে পারেন তখন কাজ করবে। এবং তারপর আপনি বেস ফোল্ডার অর্থাত পিএইচপি থেকে সঠিক ফোল্ডারে পুনর্নির্দেশ করতে ভুলবেন না: <?php header( 'Location: folder1/login.phtml' ); ?>
গ্রুবার

1
দ্বিতীয় পদ্ধতিটি ব্যবহার করে, সিএসএসে পরিবর্তনটি সম্পর্কিত চিত্রগুলির সাথে সম্পর্কিত সমস্ত চিত্রের ক্যাশেড অনুলিপিগুলিকে অবৈধ করে দেবে, যা পছন্দসই বা নাও হতে পারে।
টমজি

5

আপনি কেবল সিএসএস / জেএস url এর মতো কিছু এলোমেলো নম্বর যুক্ত করতে পারেন

example.css?randomNo=Math.random()

5

এএসপি.এনইটি-র জন্য আমি ধারনা করেছি উন্নত বিকল্পগুলির সাথে পরবর্তী সমাধান (ডিবাগ / রিলিজ মোড, সংস্করণ):

জেএস বা সিএসএস ফাইলগুলি এর মাধ্যমে অন্তর্ভুক্ত রয়েছে:

<script type="text/javascript" src="Scripts/exampleScript<%=Global.JsPostfix%>" />
<link rel="stylesheet" type="text/css" href="Css/exampleCss<%=Global.CssPostfix%>" />

গ্লোবাল.জেএসপোস্টফিক্স এবং গ্লোবাল.সিএসপোস্টফিক্স গ্লোবাল.এক্সে নিম্নলিখিত পদ্ধতিতে গণনা করা হয়:

protected void Application_Start(object sender, EventArgs e)
{
    ...
    string jsVersion = ConfigurationManager.AppSettings["JsVersion"];
    bool updateEveryAppStart = Convert.ToBoolean(ConfigurationManager.AppSettings["UpdateJsEveryAppStart"]);
    int buildNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Revision;
    JsPostfix = "";
#if !DEBUG
    JsPostfix += ".min";
#endif      
    JsPostfix += ".js?" + jsVersion + "_" + buildNumber;
    if (updateEveryAppStart)
    {
        Random rand = new Random();
        JsPosfix += "_" + rand.Next();
    }
    ...
}

4

আমি সম্প্রতি পাইথন ব্যবহার করে এটি সমাধান করেছি। এখানে কোড (অন্যান্য ভাষায় অবলম্বন করা সহজ হওয়া উচিত):

def import_tag(pattern, name, **kw):
    if name[0] == "/":
        name = name[1:]
    # Additional HTML attributes
    attrs = ' '.join(['%s="%s"' % item for item in kw.items()])
    try:
        # Get the files modification time
        mtime = os.stat(os.path.join('/documentroot', name)).st_mtime
        include = "%s?%d" % (name, mtime)
        # this is the same as sprintf(pattern, attrs, include) in other
        # languages
        return pattern % (attrs, include)
    except:
        # In case of error return the include without the added query
        # parameter.
        return pattern % (attrs, name)

def script(name, **kw):
    return import_tag("""<script type="text/javascript" """ +\
        """ %s src="/%s"></script>""", name, **kw)

def stylesheet(name, **kw):
    return import_tag('<link rel="stylesheet" type="text/css" ' +\
        """%s href="/%s">', name, **kw) 

এই কোডটি মূলত ফাইলগুলিকে টাইম-স্ট্যাম্প যুক্ত করে URL এ ক্যোয়ারী প্যারামিটার হিসাবে যুক্ত করে। নিম্নলিখিত ফাংশনের কল

script("/main.css")

ফলাফল হবে

<link rel="stylesheet" type="text/css"  href="/main.css?1221842734">

অবশ্যই সুবিধাটি হ'ল আপনাকে আর কখনও এইচটিএমএল পরিবর্তন করতে হবে না, সিএসএস ফাইল স্পর্শ করলে স্বয়ংক্রিয়ভাবে একটি ক্যাশে অবৈধকরণ ঘটবে। খুব ভাল কাজ করে এবং ওভারহেড লক্ষণীয় নয়।


os.stat () একটি বাধা তৈরি করতে পারে?
হোজু

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

4

আপনি যদি গিট + পিএইচপি ব্যবহার করে থাকেন তবে নীচের কোডটি ব্যবহার করে প্রতিবার গিট রেপোতে পরিবর্তন আসার পরে আপনি স্ক্রিপ্টটি ক্যাশে থেকে পুনরায় লোড করতে পারেন:

exec('git rev-parse --verify HEAD 2> /dev/null', $gitLog);
echo '  <script src="/path/to/script.js"?v='.$gitLog[0].'></script>'.PHP_EOL;

4

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

<script type="text/javascript">
    document.write('<script type="text/javascript" src="myfile.js?q=' + Date.now() + '">
    // can't use myfile.js stuff yet
</script>')
<script type="text/javascript">
    // do something with myfile.js
</script>

3

এখানে সমস্ত উত্তর মনে হয় নামকরণের স্কিমের কিছু ধরণের সংস্করণ প্রস্তাব করে, যার ডাউনসাইড রয়েছে।

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

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

এটি কীভাবে কাজ করে তার আরও গভীরতর ব্যাখ্যা এখানে https://www.mnot.net/cache_docs/#WORK


3

এই কোডটি কেবল যুক্ত করুন, যেখানে আপনি হার্ড পুনরায় লোড করতে চান (ব্রাউজারকে ক্যাশেড সিএসএস / জেএস ফাইলগুলি পুনরায় লোড করতে বাধ্য করুন) । লোডের ভিতরে এটি করুন যাতে এটি কোনও লুপের মতো সতেজ হয় না does

 $( window ).load(function() {
   location.reload(true);
});

ক্রোমে কাজ করে না। এখনও ডিস্ক ক্যাশে থেকে সম্পদ লোড হচ্ছে
জেসন কিম

3

কেবলমাত্র ফাইলের তারিখ যুক্ত করতে সার্ভার সাইড কোডটি ব্যবহার করুন ... এইভাবে এটি ক্যাশে হবে এবং ফাইলটি পরিবর্তিত হলে কেবল পুনরায় লোড করা হবে

এএসপি.নেটে

<link rel="stylesheet" href="~/css/custom.css?d=@(System.Text.RegularExpressions.Regex.Replace(File.GetLastWriteTime(Server.MapPath("~/css/custom.css")).ToString(),"[^0-9]", ""))" />

<script type="text/javascript" src="~/js/custom.js?d=@(System.Text.RegularExpressions.Regex.Replace(File.GetLastWriteTime(Server.MapPath("~/js/custom.js")).ToString(),"[^0-9]", ""))"></script>    

এটি সরল করা যেতে পারে:

<script src="<%= Page.ResolveClientUrlUnique("~/js/custom.js") %>" type="text/javascript"></script>

পৃষ্ঠা প্রসারিত করতে আপনার প্রকল্পে একটি এক্সটেনশন পদ্ধতি যুক্ত করে:

public static class Extension_Methods
{
    public static string ResolveClientUrlUnique(this System.Web.UI.Page oPg, string sRelPath)
    {
        string sFilePath = oPg.Server.MapPath(sRelPath);
        string sLastDate = System.IO.File.GetLastWriteTime(sFilePath).ToString();
        string sDateHashed = System.Text.RegularExpressions.Regex.Replace(sLastDate, "[^0-9]", "");

        return oPg.ResolveClientUrl(sRelPath) + "?d=" + sDateHashed;
    }
}

3

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

অন্যান্য অনেকের মতো, আমি কেবল সংক্ষেপে ক্যাশে মুছে ফেলতে চেয়েছিলাম।

"keep caching consistent with the file" .. এর উপায় খুব ঝামেলা ..

সাধারণভাবে বলতে গেলে, আমি বেশি লোড করতে আপত্তি করি না - এমনকি এমন ফাইলগুলি আবারও লোড করা যায় যা বেশিরভাগ প্রকল্পে - পরিবর্তিত হয়নি - ব্যবহারিকভাবে অপ্রাসঙ্গিক। একটি অ্যাপ্লিকেশন বিকাশের সময় - আমরা বেশিরভাগ ডিস্ক থেকে লোড করছি, চালু localhost:port - তাই এই increase in network trafficসমস্যাটি কোনও চুক্তি ভাঙ্গার সমস্যা নয়

বেশিরভাগ ছোট প্রকল্পগুলি কেবল চারদিকে চলছে - এগুলি কখনও উত্পাদন শেষ হয় না। সুতরাং তাদের জন্য আপনার আর কিছু লাগবে না ..

আপনি যদি ক্রোম দেব সরঞ্জাম ব্যবহার করেন তবে নীচের চিত্রের মতো আপনি এই অক্ষম ক্যাচিং পদ্ধতির অনুসরণ করতে পারেন: ক্যাশেড ফাইলগুলি পুনরায় লোড করার জন্য কীভাবে ক্রোমকে জোর করবেন

এবং যদি আপনার ফায়ারফক্স ক্যাশে সম্পর্কিত সমস্যা থাকে: ফায়ারফক্সে কীভাবে সম্পদ পুনরায় লোড করা যায়

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

হ্যাঁ, এই তথ্যটি ইতিমধ্যে পূর্ববর্তী উত্তরে রয়েছে তবে এটি সন্ধানের জন্য আমার এখনও গুগল অনুসন্ধান করা দরকার।

আশা করি এই উত্তরটি খুব স্পষ্ট এবং এখন আপনার প্রয়োজন হবে না।


ওপি কিছু জিজ্ঞাসা করেছে এবং অন্য কিছু উত্তর দিয়েছে। এটি স্থানীয় বা উত্পাদনের উপর চাপ প্রয়োগের বিষয়ে নয় এবং আপনি শেষ ব্যবহারকারীদের ক্যাশে নিষ্ক্রিয় করতে উপরের অনুসরণ করতে বলতে পারবেন না
জিতেন্দ্র পাঁচোলি

2

আমি নিম্নলিখিত প্রক্রিয়াটি বাস্তবায়নের পরামর্শ দিচ্ছি:

  • আপনি যখনই স্থাপন করবেন তখনই আপনার সিএসএস / জেএস ফাইলগুলিকে সংস্করণ করুন: স্ক্রিন .১৩৩৩.এসএসএস (আপনি যদি ভার্শনিং সিস্টেম ব্যবহার করেন তবে নম্বরটি আপনার এসভিএন সংশোধন হতে পারে)

  • লোডিংয়ের সময়গুলি অনুকূল করে তুলতে এগুলি মিনিমাইজ করুন

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