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


595

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

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

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


উত্তর:


529

আমি যতদূর জানি একটি সাধারণ সমাধান হ'ল ?<version>স্ক্রিপ্টের src লিঙ্কে একটি যুক্ত করা।

এই ক্ষেত্রে:

<script type="text/javascript" src="myfile.js?1500"></script>

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

আপনার কাছে কোনও সংস্করণ নিয়ন্ত্রণ ব্যবস্থা থাকতে পারে? বেশিরভাগ সংস্করণ নিয়ন্ত্রণ সিস্টেমে উদাহরণস্বরূপ চেক-ইন-এ সংশোধন নম্বরটি স্বয়ংক্রিয়ভাবে ইনজেক্ট করার একটি উপায় রয়েছে।

এটি দেখতে এমন কিছু লাগবে:

<script type="text/javascript" src="myfile.js?$$REVISION$$"></script>

অবশ্যই, সবসময় মত ভালো সমাধান হয় এই এক


5
আইআই 7 এটিকে অগ্রাহ্য করে কিনা তা কি কেউ জানেন? আইই 8 এর তুলনামূলক দৃশ্যে পরীক্ষার সময় এটি যুক্ত করা ডেটা উপেক্ষা করে এবং ক্যাশেড ফাইলটি ব্যবহার করা মনে হচ্ছে।
শেন রিস্টল

4
আমি সবসময় জানতাম যে কোয়েরি স্ট্রিংগুলি মূল-মান জুটি? ভার = 123। ধন্যবাদ! :)
অঙ্কুর-এম

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

2
আমরা সম্প্রতি একই সমস্যাটির মুখোমুখি হয়েছি এবং সবচেয়ে ভাল যে বিষয়টি আমি সামনে আসতে পেরেছি তা হল একটি সহজ ফাংশন যা "? Mod = 123456" সংযুক্ত ছিল যেখানে 123456 ফাইলের পরিবর্তিত তারিখের ইউনিক্স টাইমস্ট্যাম্প ছিল। এটি এখনও উপযুক্ত যেখানে ক্যাশিংয়ের অনুমতি দেওয়ার সময় সমস্যাগুলি স্থির করে বলে মনে হচ্ছে। যাইহোক, আমি এখনও ব্রাউজারগুলিকে এই নির্দেশনা উপেক্ষা করে ফ্ল্যাট আউট দেখতে পেয়েছি এবং যাইহোক যাইহোক পুরাতন জেএস ব্যবহার করি, তবে আমি জানি না যে একটি মার্জিত "সম্পূর্ণ স্থিরতা" রয়েছে।
ভিপেল

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

88

ইউআরএল-এ বর্তমান সময় যুক্ত করা প্রকৃতপক্ষে একটি সাধারণ সমাধান। তবে আপনি চাইলে এটি ওয়েব সার্ভার স্তরেও পরিচালনা করতে পারেন। জাভাস্ক্রিপ্ট ফাইলগুলির জন্য বিভিন্ন HTTP শিরোনাম প্রেরণের জন্য সার্ভারটি কনফিগার করা যেতে পারে।

উদাহরণস্বরূপ, 1 দিনের বেশি সময় ধরে ফাইলকে ক্যাশে রাখতে বাধ্য করতে, আপনি প্রেরণ করবেন:

Cache-Control: max-age=86400, must-revalidate

বিটার জন্য, আপনি যদি সর্বদা সর্বশেষতমটি পেতে ব্যবহারকারীকে বাধ্য করতে চান তবে আপনি এটি ব্যবহার করবেন:

Cache-Control: no-cache, must-revalidate

3
আপনি কি আরও নির্দিষ্ট হতে পারেন?
ক্রেকার

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

1
আপনি কোথায় এটি কনফিগার করবেন?
দিয়েগো

2
বিকাশের ওয়েব অ্যাপ্লিকেশনটির জন্য এটি সম্ভবত একটি ভাল সমাধান। কোনও প্রোডাকশন সাইটের জন্য, যেখানে আপনি চিরকালের জন্য ক্যাশেটিকে অবৈধ করতে চান না, আপনি যদি না জানেন যে প্রতিটি টার্গেট ক্লায়েন্ট ব্রাউজার সাইটে আসে না তবে এটি কোনও ভাল সমাধান নয় । এটি আমাকে একটি সম্ভাব্য ওয়েব সার্ভার বৈশিষ্ট্য সম্পর্কে ভাবতে বাধ্য করে: একটি কনফিগার করা মোতায়েনের তারিখ অনুসারে সর্বাধিক বয়স প্যারামিটারটিকে অভিযোজিত করে। এইটা চমৎকার হবে.
ক্লোড ব্রিসন 13

ক্রোম সঠিকভাবে ক্যাশে করার জন্য এই সেটিংসের প্রয়োজন। সেগুলি ছাড়াই, ক্রোম চিরতরে একটি ফাইল ক্যাশে করবে will মজিলা আরও অনেক যুক্তিসঙ্গত ডিফল্ট ব্যবহার করে। আরও দেখুন: agiletribe.wordpress.com/2018/01/29/casing-for-chrome
AgilePro

42

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

এই ক্ষেত্রে, আপনি ইউআরএল প্রাক্তন: http://abc.com/ v1.2 /script.js এ সংস্করণটি অন্তর্ভুক্ত করতে পারেন এবং লিঙ্কটি http://abc.com/script.js এ পুনঃনির্দেশ করতে অ্যাপাচি Mod_rewrite ব্যবহার করতে পারেন । আপনি যখন সংস্করণটি পরিবর্তন করবেন, ক্লায়েন্ট ব্রাউজারটি নতুন ফাইল আপডেট করবে।


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

@ হ্যাক হুইন মিন: তবে যখন স্ক্রিপ্টটি পুনরায় লোড করা হবে, তখন এটি প্রক্সি ক্যাশে থেকে পুনরায় লোড করা উচিত নয় ...
স্টিফান স্টেইগার

34

এই ব্যবহারটি হ্রাস করা হয়েছে: https://developer.mozilla.org/en-US/docs/Web/HTML/ ব্যবহার_ত_অ্যাপ্লিকেশন_ক্যাচ

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

CACHE MANIFEST
# Aug 14, 2014
/mycode.js

NETWORK:
*

আপনি যখনই ব্যবহারকারীদের ক্যাশে আপডেট করতে চান প্রতিবারই নতুন ফাইল স্ট্যাম্প সহ এই ফাইলটি তৈরি করুন। পার্শ্ব নোট হিসাবে, আপনি যদি এটি যুক্ত করেন তবে ব্রাউজারটি ম্যানিফেস্টটি না বলা পর্যন্ত ব্রাউজারটি পুনরায় লোড করবে না (কোনও ব্যবহারকারী পৃষ্ঠাটি রিফ্রেশ করলেও)।


এই সমাধানটি সত্যিই দুর্দান্ত, যতক্ষণ না আপনি ম্যানিফেস্ট ফাইলটি আপডেট করার কথা মনে রাখবেন :)
ম্যাটিস


1
FWIW, আমি এই সমাধানটি ব্যবহার না করে শেষ করেছি। ?<version> পদ্ধতির ব্যবহার / বজায় রাখা এটি অনেক সহজ ছিল ।
amos

28

লোড প্যারামিটার হিসাবে ফাইলাইজ যুক্ত করার বিষয়ে কীভাবে?

<script type='text/javascript' src='path/to/file/mylibrary.js?filever=<?=filesize('path/to/file/mylibrary.js')?>'></script>

সুতরাং প্রতিবার আপনি ফাইলটি "ফাইলভার" প্যারামিটার পরিবর্তন করেন।

আপনি যখন ফাইলটি আপডেট করবেন এবং একই ফাইলের আকারে আপনার আপডেটের ফলাফল কী হবে? মতভেদ কি?


4
এটি পিএইচপি ট্যাগ ব্যবহার করে এবং যদি কেউ পিএইচপি ব্যবহার করে তবে এটি অবশ্যই একটি ভাল ধারণা।
জেরেথার

1
আমি মনে করি changedate যোগ FILESIZE চেয়ে :) ভাল হবে
গান The Mazz

2
আমার প্রাথমিক চিন্তাটি সংস্করণের পরিবর্তে ফাইলের একটি হ্যাশ যুক্ত করা।
মাইক চিল

আমি ধরে নিলাম যে এটি যদি টাইম স্ট্যাম্প ইউনিক্স যুক্ত করে তবে এটিও কাজ করে? উদাহরণস্বরূপ '... file.js? ফাইলভার = <? = সময় ()?>
গ্যারান্দা

3
ফাইলমটাইম ($ ফাইল) ব্যবহার করুন এটি ফাইলের টাইমস্ট্যাম্পটিকে আউটপুট দেয়, সময়ের সাথে () সময় প্রতি সেকেন্ডে পরিবর্তিত হওয়ার সাথে সাথে আপনি ক্যাশে ব্যবহার করতে পারবেন না।
নিউটেকনিক

19

সব ব্রাউজারই '' দিয়ে ফাইল ক্যাশে করে না ? এটা. এটি যথাসম্ভব ক্যাশে করা হয়েছিল তা নিশ্চিত করার জন্য আমি যা করেছি, আমি ফাইলের নামটিতে সংস্করণটি অন্তর্ভুক্ত করেছি।

পরিবর্তে stuff.js?123, আমি নাstuff_123.js

আমি যাবার mod_redirectজন্য অ্যাপাচে ব্যবহার করেছি (আমি মনে করি)have stuff_*.jsstuff.js


আপনি মোড_রেডরেক্টের সাহায্যে কি করেছেন। Htaccess এ কী ব্যাখ্যা করতে পারেন?
ভেঙ্কট ডি

3
এই পদ্ধতির বিশদ বিবরণটি particletree.com/notebook/…
কার্ল বার্টেল

3
.htaccessভবিষ্যতের রেফারেন্সের জন্য যদি আপনি নিজের উত্তরটি নিজের কোডের মধ্যে অন্তর্ভুক্ত করতে পারেন তবে দুর্দান্ত হবে ।
ফিজিক্স

1
কোন ব্রাউজারগুলি "" দিয়ে ফাইলগুলি ক্যাশে করে না? এটা?
rosell.dk

13

এএসপি.নেট পৃষ্ঠাগুলির জন্য আমি নিম্নলিখিতগুলি ব্যবহার করছি

আগে

<script src="/Scripts/pages/common.js" type="text/javascript"></script>

পরে (বল পুনরায় লোড)

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

ডেটটাইম.নাউ.টিক্স যুক্ত করা খুব ভাল কাজ করে।


31
এই এক ক্লায়েন্ট পক্ষের সমস্ত ক্যাচিং ব্যবস্থা বিরুদ্ধে। । ডামি পরামিতি "{প্রধান সংস্করণ}: _ {minor_version}: _ {BUILD_NUMBER}: _ {পরিবর্ধন ও পরিবর্তন} যা প্রতিটি মুক্তির জন্য অনন্য হবে ভালো কিছু দিয়ে প্রতিস্থাপিত করা উচিত
Tohid

14
যদিও এটি সম্ভবত বিকাশের পরিবেশে godশ্বরের সমাধান, এটি উত্পাদনের পক্ষে উপযুক্ত নয়। পৃষ্ঠাটি ফাইলের জন্য লোড হওয়ার পরে এটি সম্পূর্ণরূপে ক্যাশে অক্ষম করবে । একটি 50 কেবি ফাইল দিয়ে প্রতিদিন 10 কে পৃষ্ঠার বোঝা কল্পনা করুন, এটি দৈনিক ভিত্তিতে জাভাস্ক্রিপ্ট ফাইলের 500Mb উপস্থাপন করে।
ফিলডুলাক

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

3
@ আলেক্স প্রকৃতপক্ষে। আমি কেবল সতর্ক করতে চেয়েছিলাম যে উত্তরে প্রদর্শিত প্রতিক্রিয়ার ব্যবহার যদি উত্পাদনের দিকে এগিয়ে যায় তবে এর প্রভাবগুলি হতে পারে যা বিকাশে দেখায় না।
ফিলডুলাক

2
প্রতিদিন একবারে নতুন কপিগুলি লোড হয়ে যায় তা নিশ্চিত করার একটি সম্ভাব্য উপায় হ'ল '<স্ক্রিপ্ট src = "/ স্ক্রিপ্টস / পৃষ্ঠাগুলি / সাধারণ.জেএস? ভার <% = ডেটটাইম.নো। টুস্ট্রিং (" yyyyMMdd ")%>" টাইপ = "টেক্সট / JavaScript"> </ স্ক্রিপ্ট> '। সুতরাং এটি দিনের শুরুতে একবার লোড, তারপরে ক্যাশে।
রব স্যাডলার

7

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

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

<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();
    }
    ...
}

আমি ব্যবহার করছি। টিকস (এই পৃষ্ঠায় আমার উত্তর দেখুন)
রবি রাম

5

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

উদাহরণ স্বরূপ,

বিক্রেতা। a7561fb0e9a071baadb9 .js
মূল। b746e3eb72875af2caa9 .js

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


4

আপনি যদি জেএস ফাইলগুলির সাথে লিঙ্ক করে এমন পৃষ্ঠাটি উত্পন্ন করছেন তবে সাধারণ সমাধানটি উত্পন্ন লিঙ্কগুলিতে ফাইলটির শেষ পরিবর্তন সংশোধন টাইমস্ট্যাম্প যুক্ত করা is

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


আমি এই সমাধানটি পছন্দ করি, কারণ এটি বজায় রাখা সবচেয়ে সহজ eas আপনি যদি একটি .js ফাইল আপডেট করেন তবে আপনাকে যা করতে হবে তা করতে হবে। আপনার কোডটি সর্বশেষ আপডেট হওয়া টাইমস্ট্যাম্পটি স্বয়ংক্রিয়ভাবে যুক্ত করবে বলে ফাইলটিতে কোনও রেফারেন্সও আপডেট করার দরকার নেই।
NL3294

3

JQuery ফাংশন getScript এছাড়াও নিশ্চিত করা যায় যে প্রতিটি বার পৃষ্ঠাটি লোড হওয়ার পরে একটি জেএস ফাইলটি সত্যই লোড হয়।

এটি আমি এটি করেছিলাম:

$(document).ready(function(){
    $.getScript("../data/playlist.js", function(data, textStatus, jqxhr){
         startProgram();
    });
});

Http://api.jquery.com/jQuery.getScript/ এ ফাংশনটি পরীক্ষা করুন

ডিফল্টরূপে $ .getScript () ক্যাশে সেটিংসটিকে মিথ্যাতে সেট করে। ব্রাউজারটি যতবার অনুরোধ করা হবে ততবার স্ক্রিপ্ট ডাউনলোড করে তা নিশ্চিত করার জন্য এটি অনুরোধ URL টিতে একটি টাইমস্ট্যাম্পেড ক্যোয়ারী প্যারামিটার যুক্ত করে।


8
কোনও পরিবর্তন না হলে আমাদের ফাইলগুলি ক্যাশে করা দরকার।
লিও লি

3

ইন পিএইচপি :

function latest_version($file_name){
    echo $file_name."?".filemtime($_SERVER['DOCUMENT_ROOT'] .$file_name);
}

ইন এইচটিএমএল :

<script type="text/javascript" src="<?php latest_version('/a-o/javascript/almanacka.js'); ?>">< /script>

কিভাবে এটা কাজ করে:

এইচটিএমএল এ, filepathনামটি আপনার পছন্দ মতো লিখুন তবে কেবল ফাংশনে। পিএইচপি filetimeফাইলটি পায় এবং filepath+name+"?"+timeসর্বশেষ পরিবর্তনের ফিরিয়ে দেয়


3

আমরা ব্যবহারকারীদের জন্য একটি SAAS তৈরি করেছি এবং তাদের ওয়েবসাইট পৃষ্ঠায় সংযুক্ত করার জন্য একটি স্ক্রিপ্ট সরবরাহ করছি, এবং স্ক্রিপ্টের সাথে কোনও সংস্করণ সংযুক্ত করা সম্ভব ছিল না কারণ ব্যবহারকারীরা কার্যকারিতার জন্য তাদের ওয়েবসাইটে স্ক্রিপ্টটি সংযুক্ত করবে এবং আমি তাদের জোর করতে পারি না প্রতিবার আমরা স্ক্রিপ্ট আপডেট করি সংস্করণটি পরিবর্তন করতে

সুতরাং, আমরা স্ক্রিপ্টটির নতুন সংস্করণটি লোড করার একটি উপায় পেয়েছি যখনই প্রত্যেকবার ব্যবহারকারীরা মূল স্ক্রিপ্টটি কল করে

স্ক্রিপ্ট লিঙ্কটি ব্যবহারকারীকে সরবরাহ করা হয়েছে

<script src="https://thesaasdomain.com/somejsfile.js" data-ut="user_token"></script>

স্ক্রিপ্ট ফাইল

if($('script[src^="https://thesaasdomain.com/somejsfile.js?"]').length !== 0) {
   init();
} else {
   loadScript("https://thesaasdomain.com/somejsfile.js?" + guid());
}

var loadscript = function(scriptURL) {
   var head = document.getElementsByTagName('head')[0];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = scriptURL;
   head.appendChild(script);
}

var guid = function() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

var init = function() {
    // our main code
}

ব্যাখ্যা:

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

এটি একই স্ক্রিপ্টকে দু'বার কল করা হবে যা পারফরম্যান্সের সমস্যা হতে পারে, তবে ব্যবহারকারী বা ক্লায়েন্টকে দেওয়া প্রকৃত স্ক্রিপ্ট লিঙ্কে সংস্করণটি না রেখে স্ক্রিপ্টটিকে ক্যাশে থেকে লোড না করার সমস্যাটি সমাধান করে really

দাবি অস্বীকার: যদি আপনার ক্ষেত্রে পারফরম্যান্স বড় সমস্যা হয় তবে তা ব্যবহার করবেন না।


2

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

<script src="~/JsFilePath/JsFile.js?v=@DateTime.UtcNow.ToString()"></script>

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

আপনি আপনার কারণে নীচের কোডটি ব্যবহার করতে পারেন, <স্ক্রিপ্ট src = "~/JsFilePath/JsFile.js?v=@GetappVersionNumber ()"> </script>
ড্রাগনাল

2

location.reload (সত্য);

দেখতে https://www.w3schools.com/jsref/met_loc_reload.asp

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


যোগ করার পদ্ধতি onload="location.reload();"আমার ফর্ম আমাকে একটি রিফ্রেশ পরিবর্তে আমার পাতা পুনঃলঞ্চ পর নতুন জাতীয় পেতে পারেন। এটি অনেক বেশি মার্জিত সমাধান। ধন্যবাদ!
জেডএক্স

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

লোড থাকলে = "location.reload (সত্য);" উপরেরগুলি আমার জন্য (ক্রোমের ফ্লাস্ক এবং বর্তমান সংস্করণ ব্যবহার করে) কাজ করে নি: w3schools.com/jsref/met_loc_reload.asp
উচ্চাভিলাষী

1

একটি সমাধান হ'ল সংস্থানটি আনার সময় URL এ টাইমস্ট্যাম্প সহ একটি ক্যোরি স্ট্রিং যুক্ত করা। এটি এই সত্যটির সুবিধা গ্রহণ করে যে কোনও ব্রাউজার তাদের মধ্যে কোয়েরি স্ট্রিং সহ ইউআরএল থেকে প্রাপ্ত সংস্থানগুলিকে ক্যাশে করবে না।

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

সর্বাধিক সাধারণ সমাধানটি মনে হয় ফাইলের নিজের মধ্যে টাইমস্ট্যাম্প বা সংশোধন নম্বর এম্বেড করা। এটি কিছুটা বেশি কাজ, কারণ আপনার ফাইলটি সঠিক ফাইলগুলির জন্য অনুরোধ করার জন্য সংশোধন করা দরকার, তবে এর অর্থ হ'ল উদাহরণস্বরূপ আপনার snazzy_javascript_file.js( সংস্করণ) এর 7 সংস্করণ snazzy_javascript_file_7.jsব্রাউজারে ক্যাশ করা থাকবে যতক্ষণ না আপনি সংস্করণ 8 প্রকাশ করেন এবং তারপরে আপনার কোডটি পরিবর্তিত হয় snazzy_javascript_file_8.jsপরিবর্তে আনুন ।


1

file.js?V=1ওভার এ ব্যবহার করার সুবিধাটি fileV1.jsহ'ল সার্ভারে আপনার জাভাস্ক্রিপ্ট ফাইলের একাধিক সংস্করণ সংরক্ষণ করার দরকার নেই।

আমি যে সমস্যাটি দেখতে পাচ্ছি file.js?V=1তা হ'ল লাইব্রেরি ইউটিলিটিগুলির নতুন সংস্করণটি ব্যবহার করার সময় আপনার অন্য জাভাস্ক্রিপ্ট ফাইলে নির্ভরশীল কোড থাকতে পারে।

পিছনের সামঞ্জস্যের স্বার্থে, আমি মনে করি jQuery.1.3.jsআপনার নতুন পৃষ্ঠাগুলির জন্য ব্যবহার করা এবং বিদ্যমান পৃষ্ঠাগুলি ব্যবহার করা আরও ভাল jQuery.1.1.js


1

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

সংযোজন ?v=AUTO_INCREMENT_VERSIONআপনার URL প্রতিরোধ ব্রাউজার ক্যাশিং শেষে - যেকোন এবং সমস্ত ক্যাশে স্ক্রিপ্ট এড়ানো।


1

আমার সহকর্মী http://www.stefanhayden.com/blog/2006/04/03/css-caching-hack/ এ আমি পোস্ট করার পরে ঠিক (সিএসএসের রেফারেন্সে) ঠিক সেই পদ্ধতিটির একটি রেফারেন্স পেয়েছি । অন্যরা এটি ব্যবহার করছে এবং এটি কাজ করছে বলে মনে হচ্ছে ভাল। আমি এই মুহুর্তে ধরে নিয়েছি যে সমস্ত স্ক্রিপ্ট ট্যাগগুলিতে এই "সংস্করণ সংখ্যাগুলি" বাড়ানোর পরিবর্তে সন্ধান-প্রতিস্থাপনের চেয়ে ভাল আর কোনও উপায় নেই?



1

ASP.NET এ ক্যাশে বুস্টিং ট্যাগ হেল্পারের মাধ্যমে কোর এটি আপনার জন্য পরিচালনা করবে এবং ফাইলটি পরিবর্তন না হওয়া পর্যন্ত আপনার ব্রাউজারকে ক্যাশে স্ক্রিপ্ট / সিএসএস রাখতে দেবে। কেবল আপনার স্ক্রিপ্ট (জেএস) বা লিঙ্ক (সিএসএস) ট্যাগে ট্যাগ সহায়ক সাহায্যকারী-এপেন্ড-সংস্করণ = "সত্য" যুক্ত করুন:

<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true"/>

ডেভ পাউকেটের এখানে ক্যাশে বুস্টিংয়ের একটি ভাল উদাহরণ এবং ব্যাখ্যা রয়েছে (পৃষ্ঠার নীচে) ক্যাশে বুস্টিং


এটি কি নিয়মিত ASP.NET এ কাজ করে না? আমি আমার স্ক্রিপ্ট ট্যাগে এসপ-অ্যাপেন্ড-সংস্করণ যুক্ত করার চেষ্টা করেছি এবং সমস্ত ব্রাউজারটি স্ক্রিপ্ট ট্যাগ হ'ল আসপ-অ্যাপেন্ড-সংস্করণ বৈশিষ্ট্য সহ উত্স হিসাবে প্রদর্শিত হয়।
tolsen64

এটি ট্যাগ হেল্পারদের সাথে সম্পর্কিত একটি .NET কোর বৈশিষ্ট্য। যাতে সার্ভার / ব্রাউজার সবসময় সর্বশেষ সংস্করণ এবং ডাউনলোড দেখেন এটা একটা সংস্করণের সাথে স্ক্রিপ্ট নাম appends
ccherwin

0

সহজ সমাধান? ব্রাউজারটি একেবারে ক্যাশে হতে দেবেন না। বর্তমান সময় (এমএসে) একটি ক্যোয়ারী হিসাবে যুক্ত করুন।

(আপনি এখনও বিটাতে রয়েছেন, সুতরাং আপনি পারফরম্যান্সের জন্য অনুকূল না করার জন্য যুক্তিসঙ্গত মামলা করতে পারেন But তবে এখানে ওয়াইএমএমভি))


13
আইএমএইচও এটি একটি দুর্বল সমাধান। আপনি যদি বিটাতে না থাকেন এবং আপনি একটি গুরুত্বপূর্ণ আপডেটটি সরিয়ে দেন তবে কী হবে?
d -_- বি

0

একটি সহজ উপায়। Htaccess সম্পাদনা করুন

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.(jpe?g|bmp|png|gif|css|js|mp3|ogg)$ [NC]
RewriteCond %{QUERY_STRING} !^(.+?&v33|)v=33[^&]*(?:&(.*)|)$ [NC]
RewriteRule ^ %{REQUEST_URI}?v=33 [R=301,L]

এটি একটি পুনর্নির্দেশের কারণ যা কার্যক্ষমতা অনুসারে একটি সাবপটিমাল, তবে কার্যক্ষম সমাধান।
দু'বারjr

0

নীচে আমার জন্য কাজ করেছেন:

<head>
<meta charset="UTF-8">
<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0" />
<meta http-equiv="cache-control" content="max-age=0" />
<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" />
</head>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.