... বা কীভাবে আমি দুশ্চিন্তা বন্ধ করতে এবং মাইক্রোসফ্ট থেকে সম্পূর্ণ অননুমোদিত APIs এর বিরুদ্ধে কোড লিখতে শিখেছি । অফিসিয়াল System.Web.Optimizationরিলিজের কোন আসল দলিল আছে ? 'কিউজ আমি নিশ্চিত যে কোনও খুঁজে পাচ্ছে না, কোনও এক্সএমএল ডক্স নেই, এবং সমস্ত ব্লগ পোস্ট আরসি এপিআই-কে উল্লেখ করে যা যথেষ্ট আলাদা। যাইহোক ..
আমি জাভাস্ক্রিপ্ট নির্ভরতা সমাধানের জন্য কিছু কোড লিখছি এবং সেই নির্ভরতাগুলি থেকে ফ্লাইগুলিতে বান্ডিল তৈরি করছি। সমস্ত কিছু দুর্দান্ত কাজ করে আপনি যদি স্ক্রিপ্টগুলি সম্পাদনা করেন বা অন্যথায় অ্যাপ্লিকেশনটি পুনরায় আরম্ভ না করে কোনও বান্ডিলকে প্রভাবিত করে এমন পরিবর্তন করেন তবে পরিবর্তনগুলি প্রতিফলিত হবে না। সুতরাং আমি বিকাশে ব্যবহারের জন্য নির্ভরতাগুলির ক্যাচিং অক্ষম করার একটি বিকল্প যুক্ত করেছি।
তবে, বান্ডিল সংগ্রহ পরিবর্তিত হয়ে থাকলেও দৃশ্যত BundleTablesইউআরএলকে ক্যাশে করে । উদাহরণস্বরূপ, আমার নিজের কোডে যখন আমি একটি বান্ডিলটি আবার তৈরি করতে চাই তখন আমি এই জাতীয় কিছু করি:
// remove an existing bundle
BundleTable.Bundles.Remove(BundleTable.Bundles.GetBundleFor(bundleAlias));
// recreate it.
var bundle = new ScriptBundle(bundleAlias);
// dependencies is a collection of objects representing scripts,
// this creates a new bundle from that list.
foreach (var item in dependencies)
{
bundle.Include(item.Path);
}
// add the new bundle to the collection
BundleTable.Bundles.Add(bundle);
// bundleAlias is the same alias used previously to create the bundle,
// like "~/mybundle1"
var bundleUrl = BundleTable.Bundles.ResolveBundleUrl(bundleAlias);
// returns something like "/mybundle1?v=hzBkDmqVAC8R_Nme4OYZ5qoq5fLBIhAGguKa28lYLfQ1"
আমি যখনই একই উরফ দিয়ে কোনও বান্ডিল সরিয়ে ও পুনরায় তৈরি করি তখন একেবারেই কিছুই ঘটে না: আমি বান্ডেলটি সরিয়ে ও পুনরায় তৈরি করার আগে bundleUrlথেকে ফিরে ResolveBundleUrlআসাটি একই। "একই" দ্বারা আমি বোঝাতে চাইছি যে বান্ডেলের নতুন সামগ্রীগুলি প্রতিফলিত করতে সামগ্রীর হ্যাশ অপরিবর্তিত।
সম্পাদনা করুন ... আসলে এর চেয়েও খারাপ। বান্ডিল নিজেই একরকম বাইরে ক্যাসে নিয়ে যাওয়া হয় Bundlesসংগ্রহ। ব্রাউজারটিকে স্ক্রিপ্টটি ক্যাশে করা থেকে বিরত রাখতে আমি যদি কেবল নিজের নিজস্ব এলোমেলো হ্যাশ তৈরি করি তবে এএসপি.নেট পুরানো স্ক্রিপ্টটি ফিরিয়ে দেয় । সুতরাং, স্পষ্টতই, এর থেকে একটি বান্ডিল সরানো BundleTable.Bundlesআসলে কিছুই করে না।
এই সমস্যাটি ঘুরে দেখার জন্য আমি কেবলমাত্র নামটি পরিবর্তন করতে পারি, এবং এটি বিকাশের জন্য ঠিক আছে, তবে আমি এই ধারণাটি পছন্দ করি না কারণ এর অর্থ হ'ল প্রতিটি পৃষ্ঠার লোডের পরে আমাকে এলিয়াসগুলি হ্রাস করতে হবে, বা একটি বান্ডিল সংগ্রহ রয়েছে যা আকারে বৃদ্ধি পাবে প্রতিটি পৃষ্ঠা লোড। যদি আপনি এটি একটি উত্পাদন পরিবেশে ছেড়ে দিয়ে থাকেন তবে এটি একটি বিপর্যয় হবে।
সুতরাং মনে হচ্ছে কোনও স্ক্রিপ্ট পরিবেশন করা হলে এটি আসল BundleTables.Bundlesবস্তুর থেকে পৃথক হয়ে যায় । সুতরাং আপনি যদি কোনও ইউআরএল পুনরায় ব্যবহার করেন, এমনকি যদি আপনি এটি পুনরায় ব্যবহারের আগে উল্লেখযোগ্য বান্ডিলটি সরিয়ে ফেলে থাকেন তবে তা তার ক্যাশে যা আছে তার সাথে প্রতিক্রিয়া জানায় এবং Bundlesঅবজেক্ট পরিবর্তন করে ক্যাশে ফ্লাশ হয় না - তাই কেবলমাত্র নতুন আইটেম (বা বরং, আলাদা নামের নতুন আইটেমগুলি) ব্যবহৃত হবে।
আচরণটি অদ্ভুত বলে মনে হচ্ছে ... সংগ্রহ থেকে কোনও কিছু সরিয়ে ফেলা উচিত তা ক্যাশে থেকে সরানো উচিত। তবে তা হয় না। এই ক্যাশেটি ফ্লাশ করার জন্য অবশ্যই একটি উপায় থাকতে হবে এবং BundleCollectionযখন সেই বান্ডিলটি প্রথম অ্যাক্সেস করা হয়েছিল তখন এটি ক্যাশে হওয়ার পরিবর্তে এটির বর্তমান সামগ্রীগুলি ব্যবহার করতে পারে।
কোন ধারণা আমি এই কিভাবে করব?
এই ResetAllপদ্ধতিটির একটি অজানা উদ্দেশ্য রয়েছে তবে এটি কেবল যাইহোক জিনিসগুলি ভেঙে দেয় তাই এটি নয়।


