একক পৃষ্ঠাগুলির অ্যাপ্লিকেশনগুলিতে ব্রাউজারের ক্যাশে নিয়ে কাজ করা


27

আমি কীভাবে একক পৃষ্ঠাগুলির অ্যাপ্লিকেশনগুলির জন্য ওয়েব ব্রাউজার ক্যাশে সঠিকভাবে পরিচালনা করতে হবে তা জানার চেষ্টা করছি।

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

এটি পরিচালনা করার সর্বোত্তম উপায় কী?

  1. আমার JSON পরিবর্তনগুলি পিছনের দিকে সামঞ্জস্যপূর্ণ হয়েছে তা নিশ্চিত করুন এবং ধরুন ব্রাউজারের ক্যাচগুলি যুক্তিসঙ্গত সময়সীমার মধ্যেই শেষ হয়ে যাবে।
  2. স্থির জেএস এবং জেএসওএন উভয় ক্ষেত্রেই কিছু সংখ্যক সংস্করণ নম্বর এম্বেড করুন, তারপরে window.location.reload(true);তারা মেলে না তবে কার্যকর করুন ।
  3. ব্রাউজারগুলি সর্বদা প্রতিটি লোডের সমস্ত সংস্থান পুনরূদ্ধার করে তা নিশ্চিত করার জন্য শিরোনামগুলির উপযুক্ত সংমিশ্রণটি ( must-revalidateবা no-cacheযা কিছু হোক; উত্সগুলি কীভাবে এটি করতে পারে তা আলাদা করে নিন) এমনকি সাইটটি লোড করার জন্য কয়েকটি অতিরিক্ত রাউন্ড ট্রিপস বোঝায়।
  4. আমার ক্যাশে-নিয়ন্ত্রণকে মাইক্রো-পরিচালনা করে এবং শিরোনামের মেয়াদ শেষ হয় যাতে আমি কোনও আপডেট ধাক্কা দিতে চাইলে স্থির সামগ্রীর মেয়াদ শেষ হয়।
  5. অন্যকিছু?

1
যদি আপনার পরিবেশ সহকর্মীদের কাছ থেকে খারাপ ( কাশি আইওএস) খারাপ থাকে তবে এম্বেড থাকা ওয়েব ব্রাউজার নিয়ন্ত্রণগুলিতে # 3 এবং # 4 অপ্রত্যাশিতভাবে ব্যর্থ হয়ে গেছে heard # 1 এবং # 2 অ্যাপ্লিকেশন স্তরের পছন্দ হতে পারে তবে এখনও (?) অন্যান্য সংস্থানগুলির জন্য বা আংশিক সংস্থান লোডের জন্য ক্যাশে সমস্যার কারণ হতে পারে। উত্পাদনের জন্য প্রস্তুত কোডটিতে নির্ভরযোগ্যভাবে কাজ করা একমাত্র জিনিসটি আপনার ইউরএল এইচটিএমএল আনছে? <সোমটাইমস্ট্যাম্প> কারণ এটি বেশিরভাগ ক্যাশেিং প্রক্রিয়া জাল করবে। বোনাস: আপনার পুরো ওয়েব অ্যাপ্লিকেশনটিকে একটি ফাইলে রোল করুন যাতে পারমাণবিকভাবে সফল হয় বা ব্যর্থ হয় load ডাউনসাইড: স্থানীয় লিঙ্কে সেরা কাজ করে। আপনার মাইলেজ পরিবর্তিত হতে পারে. শুভকামনা!
জে

2
সংস্থানসমূহের URL প্যারামিটার হিসাবে সংস্করণ নম্বর বা একটি টাইমস্ট্যাম্প ব্যবহার করতে +1।
9000

উত্তর:


14

আপনার ক্যাশে বস্টিং সমাধান দরকার। ক্যাশে বুস্টিংয়ের ভূমিকাটি হ'ল:

  1. সংস্থানগুলি তাদের সামগ্রীর উপর নির্ভর করে একটি অনন্য নামে পুনরায় নামকরণ করুন।
  2. এই সংস্থানগুলিতে সমস্ত উল্লেখ আপডেট করুন।

গ্রান্টভিত্তিক প্রকল্পে গ্রন্ট-রেভ ব্যবহার করা সাধারণ বিষয় নিশ্চিত করে তা নিশ্চিত করার জন্য যে সমস্ত ফাইলকে রিফ্রেশ করা দরকার তাদের সামগ্রীর উপর ভিত্তি করে অনন্য নাম দেওয়া হয়েছে।

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

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

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


2
ইতালিযুক্ত "ক্যাশে বুস্টিং" বিটের জন্য +1, যা এই জিনিসটিকে উত্পাদনশীলভাবে গুগল করার দরজা খুলে দেয়।
জাক কুস

@ টেড পার্সিভাল - ইয়েমেন ফ্রেমওয়ার্ক এটি করে, যা আমি ব্যবহার করি তবে আমি সমস্যা দেখছি। যখন আমি একটি নতুন বিল্ড প্রকাশ করি, তখন ব্রাউজারটিতে সূচিপত্র HTML টি পুরানো ফাইলগুলির রেফারেন্স সহ ক্যাশে থাকে ... এবং ব্রাউজারটি ত্রুটি পায়। আমি এটি কিভাবে ঠিক করব? (এ।) সমস্ত পুরানো ফাইলের নাম নতুন করে সিমিলিং করুন (এটি কাজ করে) (বি) সূচিপত্রের নো-ক্যাশে শিরোনাম যুক্ত করুন (তবে এটি সর্বদা শ্রদ্ধাজনক) (সি) পুনর্বিবেচিত ফাইলটি সনাক্ত করতে htaccess যোগ করুন এবং বেসটি অনুসন্ধান করুন (উদাঃ 12345.main.js -> main.js)
তিমাহ

5

সঠিক হেডার সহ আপনি ব্যবহার করতে পারেন if-modified-since + last-modifiedবা if-none-match + etagশিরোলেখ ব্যবহার করতে পারেন cache-control। ( ব্রাউজার বাগ থাকতে পারে , তবে সাম্প্রতিক ব্রাউজারগুলিতে আপনি পরিচালনা করতে পারবেন না এমন কিছুই))

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

আপনার # 1 এবং # 2 দীর্ঘমেয়াদে কাজ করবে বলে আমি মনে করি না। # 3 বা # 4 কাজ করতে পারে। # 3টি সহজ, তবে আপনাকে কীভাবে এই সমস্যাটি একবারেই মোকাবেলা করতে হবে তা শিখতে হবে। সুতরাং আমি যদি আপনি হয় আমি # 4 চেষ্টা করে দেখি তবে সমাধানটি আপনার গ্রাহকদের কী ব্রাউজারগুলি ব্যবহার করে তার উপর নির্ভর করে ... উদাহরণস্বরূপ আই 88 এজ্যাক্স ক্যাশে আপডেট করে সমস্যা আছে ...


2

যদি আপনি নিজের এসপিএতে জাভা সার্লেট ফিল্টার অন্তর্ভুক্ত করতে পারেন তবে এখানে একটি কার্যক্ষম সমাধান রয়েছে: CorrectBrowserCacheHandlerFilter.java

মূলত, যখন আপনার ব্রাউজারটি স্থিতিশীল ফাইলগুলির জন্য অনুরোধ করে, সার্ভার প্রতিটি অনুরোধকে একই অনুরূপে পুনঃনির্দেশিত করবে তবে একটি হ্যাশ ক্যোয়ারী প্যারামিটার দিয়ে ( ?v=azErTউদাহরণস্বরূপ) যা লক্ষ্য স্থিতিশীল ফাইলের সামগ্রীর উপর নির্ভর করে।

এটি করার ফলে, ব্রাউজারটি কখনই আপনার index.htmlউদাহরণ হিসাবে ঘোষিত স্থির ফাইলগুলিকে ক্যাশে করবে না (কারণ সর্বদা এটি প্রাপ্ত হবে 302 Moved Temporarily), তবে কেবল হ্যাশ সংস্করণযুক্ত লোকেদের ক্যাশে করবে (সার্ভার 200তাদের জন্য উত্তর দেবে)। সুতরাং হ্যাশ সংস্করণযুক্ত স্ট্যাটিক ফাইলগুলির জন্য ব্রাউজারের ক্যাশে দক্ষতার সাথে ব্যবহৃত হবে।

দাবি অস্বীকার: আমি এর লেখক CorrectBrowserCacheHandlerFilter.java

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