প্যারামের মাধ্যমে ক্যাশে বুস্টিং


122

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

<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>

দুটি প্রশ্ন: এটি কার্যকরভাবে ক্যাশে ভেঙে দেবে? পরম কি ব্রাউজারকে তখন আর ইউআরএলের প্রতিক্রিয়াটিকে কখনই ক্যাশে ফেলবে না কেন যে পরম ইঙ্গিত দেয় যে এটি গতিশীল সামগ্রী?

উত্তর:


115

প্যারাম ?v=1.123একটি কোয়েরি স্ট্রিং নির্দেশ করে এবং ব্রাউজারটি তাই বলে, এটি থেকে একটি নতুন পথ বলে মনে করবে ?v=1.0। সুতরাং এটি ফাইল থেকে লোড করার কারণ, ক্যাশে থেকে নয়। আপনি যেমন চান.

আর, ব্রাউজার অনুমান করবে উৎস একই পরের বার আপনি যখন কল থাকবো ?v=1.123এবং উচিত যে স্ট্রিং সঙ্গে এটি ক্যাশে। সুতরাং এটি ক্যাশে থাকবে, তবে আপনার সার্ভারটি সেট আপ না হওয়া অবধি আপনি যতক্ষণ না এগিয়ে যান ?v=1.124


4
স্টিভ সাউডার্সের উদ্ধৃতি দিয়ে: "জনপ্রিয় প্রক্সি দ্বারা ক্যাশিংয়ের সুবিধা অর্জনের জন্য, ক্যোয়ারিং স্ট্রিং দিয়ে পুনরুদ্ধার করা এবং পরিবর্তে ফাইলের নামটি পুনর্বিবেচনা এড়ান।" পুরো ব্যাখ্যাটি এখানে পাওয়া যাবে: stevesouders.com/blog/2008/08/23/…
লাও

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

1
হতে পারে এটি কাউকে সহায়তা করে: ব্যক্তিগতভাবে, আমি ফাইলটি সংশোধন টাইমস্ট্যাম্পটিকে 'স্বয়ংক্রিয়' সংস্করণ প্যারামিটার হিসাবে ব্যবহার করি, যেমন। <link rel="stylesheet" href="style.css?v=1487935578" />
oelna

কেন আমি ব্যক্তিগতভাবে বুঝতে পারি না তবে লারা হোগান (সোয়ানসন) (এটসিতে ইঞ্জিনিয়ারিং ম্যানেজার) ক্যাশে-বুস্টিংয়ের জন্য ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করার পরামর্শ দেয় না। আমি মনে করি এটি ব্যবহারকারীর এবং সার্ভারের মধ্যে ক্যাশে প্রক্সির সাথে সম্পর্কিত।
স্যাম রুয়েবি

36

দুটি প্রশ্ন: এটি কার্যকরভাবে ক্যাশে ভেঙে দেবে?

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

পরম কি ব্রাউজারকে তখন আর ইউআরএলের প্রতিক্রিয়াটিকে কখনই ক্যাশে ফেলবে না কেন যে পরম ইঙ্গিত দেয় যে এটি গতিশীল সামগ্রী?

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


1
@ স্পেন্ড আমি এখনই রেফারেন্সটি খুঁজে পাচ্ছি না আমি ভীত, এখানে একটি দীর্ঘ ব্লগ নিবন্ধ বা এসও উত্তর ছিল যেখানে জেফ আতউড এটি সম্পর্কে কথা বলেছেন (আইআইআরসি)
পেক্কা

2
@ স্পেন্ডার আমি পড়েছি যে কিছু প্রক্সি সার্ভারগুলি (পুরানো, বা কনফিগার করা যেতে পারে) ক্যাশে করার সময় ক্যোরি স্ট্রিংটিকে উপেক্ষা করে।
মিঃ হোয়াইট

2
@ স্পেন্ডার - আমিও এটি শুনেছি এবং আমি মনে করি ফাইলের নাম পরিবর্তন করা, বা পথটি সর্বোত্তম বিকল্প। কেবলমাত্র আপনার সমস্ত স্ট্যাটিক ফাইলকে কোনও সংস্করণযুক্ত ফোল্ডারের নামের অধীনে সরিয়ে দেওয়া সহজ হতে পারে, উদাহরণস্বরূপ /static/v22/file.css, যেমন আপনি একক ফোল্ডারের নাম পরিবর্তন করে একাধিক ফাইল করতে পারেন, যেমন /static/v23/file.cssএবং/static/v23/mystuff.js
ব্র্যাড পার্কগুলি

22

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

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

আপনি নতুন পৃষ্ঠাগুলি এবং নতুন সংযুক্ত ফাইলগুলি (যা আপনি চান তা) স্থাপন করার পরে এই ক্যাশেটি একবারে আবদ্ধ হয় এবং তখন থেকে সেই সংস্করণগুলিতে কার্যকরভাবে ক্যাশে যায় (যা আপনিও চান)।


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

1
আমি সম্মত হয়েছি যে আপনি যদি 10000% নিশ্চিত করতে চান তবে ফাইলের নামের সংস্করণ নম্বরটি চূড়ান্ত নিরাপদ সমাধান, তবে আমি "একযোগে একাধিক সংস্করণ বিদ্যমান" যুক্তিটি অনুসরণ করি না। ক্যোয়ারী প্যারামিটার সহ একটি URL আলাদা ক্যোয়ারী প্যারামিটার সহ একই URL থেকে পৃথক। তাদের ক্লায়েন্ট দ্বারা দুটি পৃথক সংস্থান হিসাবে বিবেচনা করা উচিত; যদি তারা না হয় তবে ক্লায়েন্টটি নষ্ট হয়ে গেছে।
পেক্কা

2
@ পেক্কা - সংস্করণ নম্বর জিনিসটি একসাথে একাধিক সংস্করণ উপস্থিত হতে পারে, তবে কোয়েরি প্যারামিটারটিকে সঠিক প্রকৃত ফাইলটিতে মানচিত্রের জন্য সার্ভারের সহযোগিতা প্রয়োজন cooperation আমি মনে করি না যে ওপি এখানে এখানে যা করছে এবং ফাইল নাম পরিবর্তন করার সময় সেই জটিলতার প্রয়োজন হওয়ার খুব কম কারণ আছে এবং এর জন্য কোনও সার্ভার সহযোগিতা প্রয়োজন নেই। স্পষ্টতই দু'জনেই কাজ করতে পারে।
jਫਰ00

11

যেমনটি অন্যেরা বলেছেন, ক্যোয়ারী প্যারামের সাহায্যে ক্যাশে বুস্টিং সাধারণত একটি খারাপ ধারণা (টিএম) হিসাবে বিবেচিত হয় এবং এটি দীর্ঘকাল ধরে রয়েছে। ফাইলের নামের সংস্করণটি প্রতিবিম্বিত করা ভাল। এইচটিএমএল 5 বয়লারপ্লেট অন্যদের মধ্যে কোয়েরি স্ট্রিংটি ব্যবহার করার বিরুদ্ধে সুপারিশ করে।

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


9

এটি একবারে ক্যাশে আবদ্ধ হবে, ক্লায়েন্টটি সংস্থানটি ডাউনলোড করার পরে অন্য সমস্ত প্রতিক্রিয়া ক্লায়েন্ট ক্যাশে থেকে দেওয়া হবে যদি না:

  1. ভি প্যারামিটার আপডেট করা হয়েছে।
  2. ক্লায়েন্ট তাদের ক্যাশে সাফ করে

6

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

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


5

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


5
স্টিভ সৌডার্স নিবন্ধে উদ্ধৃত স্কুইড প্রক্সিটি তাদের ডিফল্ট ক্যাশে নীতি পরিবর্তন করেছে। সংস্করণ ২.7 (মে ২০০৮) এবং সংস্করণ ৩.১ (মার্চ ২০১০), গতিশীল বিষয়বস্তু ক্যাশে করা ডিফল্ট আচরণ।
জোশ রাক

5

এখানে 2 টি কৌশল (ক্যুরিয়ার স্ট্রিং বনাম ফাইলের নাম) এর একটি তুলনা পাওয়া গেছে :

ক্যোরিস্ট্রিং হিসাবে সংস্করণে দুটি সমস্যা রয়েছে।

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

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


4

অন্য অনুরূপ পদ্ধতির ফাইলগুলি পরিবেশন করার সময় পথের কিছু অংশ উপেক্ষা করার জন্য htaccess mod_rewrite ব্যবহার করা। আপনার কখনই ক্যাশেড ইনডেক্স পৃষ্ঠা ফাইলগুলির সর্বশেষতম পন্থার উল্লেখ করে।

বিকাশের দৃষ্টিকোণ থেকে এটি সংস্করণ সংখ্যার জন্য প্যারাম ব্যবহার করার মতোই সহজ, তবে এটি ফাইল নাম পদ্ধতির মতই শক্ত।

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

1.2.3/css/styles.csscss/styles.cssযেহেতু প্রথম ডিরেক্টরিটি htaccess ফাইল দ্বারা মুছে ফেলা এবং উপেক্ষা করা হয় তেমন একই ফাইলটি সরবরাহ করে

সংস্করণযুক্ত ফাইলগুলি সহ

<?php
  $version = "1.2.3";
?>

<html>
  <head>
    <meta http-equiv="cache-control" content="max-age=0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
    <meta http-equiv="pragma" content="no-cache" />
    <link rel="stylesheet" type="text/css" href="<?php echo $version ?>/css/styles.css">
  </head>
  <body>
    <script src="<?php echo $version ?>/js/main.js"></script>
  </body>
</html>

নোট করুন যে এই পদ্ধতির অর্থ হল আপনার সূচী পৃষ্ঠার ক্যাচিং অক্ষম করা দরকার - সমস্ত ব্রাউজারে ক্যাচিং বন্ধ করতে <meta> ট্যাগ ব্যবহার করে?

.htaccess ফাইল

RewriteEngine On

# if you're requesting a file that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-f 
# likewise if a directory that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise, rewrite foo/bar/baz to bar/baz - ignore the first directory
RewriteRule ^[^/]+/(.+)$ $1 [L] 

আপনি কোনও সার্ভার প্ল্যাটফর্মে একই পন্থা নিতে পারেন যা ইউআরএল পুনর্লিখনের অনুমতি দেয়

(মোড_উইরাইট থেকে পুনর্লিখন শর্ত - / #! / ব্যতীত ক্যোয়ারী স্ট্রিংয়ে পুনর্লিখন ডিরেক্টরিটি পুনর্লিখন করুন )

... এবং যদি আপনার সূচী পাতা / সাইট এন্ট্রি পয়েন্টের জন্য ক্যাশে বস্টিংয়ের প্রয়োজন হয় তবে আপনি তা রিফ্রেশ করার জন্য সর্বদা জাভাস্রিপ্ট ব্যবহার করতে পারেন।


2
<script type="text/javascript">
// front end cache bust

var cacheBust = ['js/StrUtil.js', 'js/protos.common.js', 'js/conf.js', 'bootstrap_ECP/js/init.js'];   
for (i=0; i < cacheBust.length; i++){
     var el = document.createElement('script');
     el.src = cacheBust[i]+"?v=" + Math.random();
     document.getElementsByTagName('head')[0].appendChild(el);
}
</script> 

নতুন প্রকাশের বিকাশ / পরীক্ষার সময়, ক্যাশে সমস্যা হতে পারে কারণ ব্রাউজার, সার্ভার এবং এমনকি কখনও কখনও 3 জি টেলকো (যদি আপনি মোবাইল স্থাপনা করেন) স্থির সামগ্রীটি (যেমন জেএস, সিএসএস, এইচটিএমএল, আইএমজি) ক্যাশে করবে। আপনি URL এ সংস্করণ নম্বর, এলোমেলো সংখ্যা বা টাইমস্ট্যাম্প যুক্ত করে এটিকে কাটিয়ে উঠতে পারেন যেমন: জেএসপি: <স্ক্রিপ্ট src = "জেএস ​​/ এক্সেল.জ? সময় = <% = নতুন জাভা.ইটিল.সামগ্রী ()%>"> </ স্ক্রিপ্ট> আপনি খাঁটি এইচটিএমএল চালিয়ে যাচ্ছেন (সার্ভার পৃষ্ঠাগুলি জেএসপি, এএসপি, পিএইচপি পরিবর্তে) সার্ভার আপনাকে সাহায্য করবে না। ব্রাউজারে, লিঙ্কগুলি জেএস
চালুর

আমি মনে করি না এটি সিএসক্রোনালিভাবে জেএস ফাইলগুলি লোড করবে।
স্টিলথ রাব্বি

0
 <script>
    var storedSrcElements = [
         "js/exampleFile.js",
         "js/sampleFile.js",
         "css/style.css"
          ];

    var head= document.getElementsByTagName('head')[0];
    var script;
    var link;
    var versionNumberNew = 4.6;

    for(i=0;i<storedSrcElements.length;i++){
     script= document.createElement('script');
     script.type= 'text/javascript';
     script.src= storedSrcElements[i] + "?" + versionNumberNew;
     head.appendChild(script);
    }     


     </script> 


       ### Change the version number  (versionNumberNew) when you want the new files to be loaded  ###

0

আশা করি এটি আপনাকে বাহ্যিক জেএস ফাইল ইনজেক্ট করতে সহায়তা করবে

<script type="text/javascript"> 
var cachebuster = Math.round(new Date().getTime() / 1000); 
document.write('<scr'+'ipt type="text/javascript" src="external.js?cb=' +cachebuster+'"></scr' + 'ipt>');
</script>

উত্স - জাভাস্ক্রিপ্টে ক্যাশেবাস্টার কোড

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