উত্তর:
উন্নতির সম্ভাব্য উত্সগুলির একটি সংকলিত তালিকা নীচে রয়েছে:
সাধারণ
ক্যাশিং
CompiledQuery.Compile()
আপনার ক্যোয়ারী এক্সপ্রেশনগুলির পুনঃসংশোধন এড়ানো পুনরাবৃত্তভাবে ব্যবহার করুনOutputCacheAttribute
অযৌক্তিক এবং ক্রিয়াকলাপের সম্পাদনাগুলি সংরক্ষণ করে ব্যবহার করে প্রবণতা পরিবর্তন করে নাActionResult
প্রয়োজনে আপনার কাস্টম পদ্ধতিগুলি লিখুনRouteName
আপনার রুটগুলি সংগঠিত করতে ব্যবহার করার বিষয়টি বিবেচনা করুন এবং তারপরে আপনার লিঙ্কগুলি তৈরি করতে এটি ব্যবহার করুন এবং এক্সপ্রেশন ট্রি ভিত্তিক অ্যাকশনলিঙ্ক পদ্ধতিটি ব্যবহার না করার চেষ্টা করুন।PartialViews
, এটিকে XXXXX বারে রেন্ডার এড়ান : আপনি যদি একই দৃষ্টিভঙ্গিতে একই আংশিক 300 বার কল করে থাকেন তবে সম্ভবত এতে কোনও সমস্যা আছে। ব্যাখ্যা এবং বেঞ্চমার্করাউটিং
Url.RouteUrl("User", new { username = "joeuser" })
রুট নির্দিষ্ট করতে ব্যবহার করুন । রুপি বেনকোভিকের এএসপি.নেট এমভিসি পারফরম্যান্স
রুডি বেনকোভিক দ্বারা এই সহায়ক ASP.NET MVC পারফোমেন্স ব্যবহার করে সমাধানের ক্যাশে রুটUrlHelperCached
নিরাপত্তা
ডাল
ভারসাম্য লোড করুন
আপনার অ্যাপ্লিকেশন উদাহরণগুলিতে ক্লায়েন্ট লোড ছড়িয়ে দিতে, বিপরীত প্রক্সিগুলি ব্যবহার করুন। (স্ট্যাক ওভারফ্লো HAProxy ( MSDN ) ব্যবহার করে।
বাহ্যিক সংস্থান প্রক্রিয়াজাতকরণের উপর নির্ভরশীল ক্রিয়াগুলি প্রয়োগ করতে অ্যাসিক্রোনাস কন্ট্রোলার ব্যবহার করুন ।
মক্কেলের পক্ষে
গ্লোবাল কনফিগারেশন
আপনি যদি রেজার ব্যবহার করেন তবে ডিফল্টরূপে আপনার Global.asax.cs এ নিম্নলিখিত কোড যুক্ত করুন, Asp.Net MVC একটি এসপেক্স ইঞ্জিন এবং একটি রেজার ইঞ্জিন সহ রেন্ডার করে। এটি কেবল রেজারভিউইনগাইন ব্যবহার করে।
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
আপনার ওয়েবকনফাইগে জিজিপ (এইচটিটিপি সংক্ষেপণ) এবং স্ট্যাটিক ক্যাশে (চিত্রগুলি, সিএসএস, ...) যুক্ত করুন
<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
</system.webServer>
<pages buffer="true" enableViewState="false">
মূল পরামর্শটি হল REST নীতিগুলি অনুসরণ করা এবং নিম্নলিখিত বিষয়গুলি এএসপি.নেট এমভিসি কাঠামোর সাথে এই কয়েকটি প্রিন্সিপালকে যুক্ত করে:
কোড লতা এবং এই ব্লগ এন্ট্রি অ্যাপ্লিকেশনটির কার্যকারিতা বাড়ানোর বিশদ উপায় সরবরাহ করে।
সংকলিত ক্যোয়ারী আপনার অ্যাপ্লিকেশনটির কার্যকারিতা বাড়িয়ে তুলবে, তবে এটির সাথে এএসপি.নেট এমভিসির মিল নেই। এটি প্রতিটি ডিবি অ্যাপ্লিকেশনকে ত্বরান্বিত করবে, সুতরাং এটি এমভিসি সম্পর্কিত নয়।
এটি সুস্পষ্ট বলে মনে হতে পারে তবে আপনার সাইটটি রিলিজ মোডে চালান, ডিবাগ মোড নয়, উত্পাদনের সময় এবং পারফরম্যান্স প্রোফাইলিংয়ের সময়। রিলিজ মোডটি আরও দ্রুত। ডিবাগ মোড আপনার নিজের কোডে পারফরম্যান্সের সমস্যাগুলি আড়াল করতে পারে।
লিনকুইয়ের মাধ্যমে ডেটা অ্যাক্সেস করার সময় আইকিউয়ারেবলের উপর নির্ভর করুন ...
কেন তালিকা () এর পরিবর্তে AsQueryable () ব্যবহার করবেন?
... এবং একটি ভাল সংগ্রহস্থল প্যাটার্ন লিভার্জ করুন:
সংগ্রহস্থল প্যাটার্নে সাবক্রাকার্ড লোড হচ্ছে
এটি কেবলমাত্র প্রয়োজনীয় ডেটা লোড হয় এবং যখন কেবল এটির প্রয়োজন হয় তা নিশ্চিত করতে এটি ডেটা অ্যাক্সেসকে অনুকূল করে তুলবে।
কোনও পৃথিবী-চূর্ণকারী অপ্টিমাইজেশন নয়, তবে আমি ভেবেছিলাম যে আমি এটিকে এখানে ফেলে দেব - jQuery ইত্যাদির জন্য সিডিএন ব্যবহার করুন ।
স্কটগু নিজেই উদ্ধৃতি: মাইক্রোসফ্ট অ্যাজাক্স সিডিএন আপনাকে ওয়েব ফর্ম এবং এএসপি.নেট এমভিসি অ্যাপ্লিকেশনগুলির কার্যকারিতা উন্নত করতে সক্ষম করেছে ব্যবহার করে। পরিষেবাটি নিখরচায় উপলভ্য, কোনও নিবন্ধকরণের প্রয়োজন নেই এবং বাণিজ্যিক এবং অ-বাণিজ্যিক উভয় উদ্দেশ্যেই এটি ব্যবহার করা যেতে পারে।
এমনকি আমরা মসতে আমাদের ওয়েবপৃষ্ঠাগুলির জন্য সিডিএন ব্যবহার করি যা jQuery ব্যবহার করে।
এছাড়াও যদি আপনি এনএইচবারনেট ব্যবহার করেন তবে আপনি চালু করতে পারেন এবং প্রশ্নের জন্য দ্বিতীয় স্তরের ক্যাশে সেটআপ করতে পারেন এবং ক্যোয়ারির সুযোগ এবং সময়সীমা শেষ করতে পারেন। এবং EF , L2S এবং NHibernate- এর জন্য কিক অ্যাস প্রোফাইলার রয়েছে - http://hibernatingrhinos.com/products/UberProf । এটি আপনার প্রশ্নের টিউন করতে সহায়তা করবে।
আমি আরও যোগ করব:
স্প্রাইট ব্যবহার করুন : স্প্রেটস একটি অনুরোধ হ্রাস করার জন্য দুর্দান্ত জিনিস। আপনি আপনার সমস্ত চিত্র একক একটিতে মার্জ করে এবং স্প্রাইটের ভাল অংশে পেতে CSS ব্যবহার করেন। মাইক্রোসফ্ট এটি করার জন্য একটি ভাল গ্রন্থাগার সরবরাহ করে: স্প্রাইট এবং চিত্র অপ্টিমাইজেশন পূর্বরূপ 4 ।
আপনার সার্ভারের অবজেক্টটিকে ক্যাশে করুন : আপনার কাছে যদি কিছু রেফারেন্স তালিকা বা ডেটা থাকে যা খুব কমই পরিবর্তিত হয়, আপনি প্রতিবার ডাটাবেস অনুসন্ধানের পরিবর্তে এগুলি মেমোরিতে ক্যাশে রাখতে পারেন।
সত্তা ফ্রেমওয়ার্কের পরিবর্তে ADO.NET ব্যবহার করুন : EF4 or EF5
বিকাশের সময় কমাতে দুর্দান্ত, তবে এটি অনুকূলিতকরণে বেদনাদায়ক হবে। সত্তা ফ্রেমওয়ার্কের চেয়ে কোনও সঞ্চিত পদ্ধতিটিকে অনুকূলকরণ করা আরও সহজ । সুতরাং আপনার যতটা সম্ভব স্টোর প্রক্রিয়া ব্যবহার করা উচিত। ড্যাপার খুব ভাল পারফরম্যান্স সহ এসকিউএলকে ক্যোয়ারী এবং মানচিত্রের একটি সহজ উপায় সরবরাহ করে।
ক্যাশে পৃষ্ঠা বা আংশিক পৃষ্ঠা : এমভিসি কিছু পরামিতি অনুসারে পৃষ্ঠা ক্যাশে কিছু সহজ ফিল্টার সরবরাহ করে, তাই এটি ব্যবহার করুন।
ডাটাবেস কল হ্রাস করুন : আপনি এক অনন্য ডাটাবেস অনুরোধ তৈরি করতে পারেন যা একাধিক বস্তু ফেরত দেয়। ডাপার ওয়েবসাইটে পরীক্ষা করুন।
সর্বদা একটি পরিষ্কার আর্কিটেকচার থাকুন : একটি ছোট প্রকল্পেও একটি পরিষ্কার এন-টিয়ার আর্কিটেকচার রাখুন। এটি আপনাকে আপনার কোডটি পরিষ্কার রাখতে সহায়তা করবে এবং প্রয়োজনে এটি অপ্টিমাইজ করা সহজ হবে।
আপনি এই টেমপ্লেটটি দেখে নিতে পারেন " নব্যস-এসডিআই এমভিসি টেম্পলেট " যা ডিফল্টরূপে প্রচুর পারফরম্যান্স উন্নতি করে আপনার জন্য একটি পরিষ্কার আর্কিটেকচার তৈরি করবে ( এমভিসিটিম্পলেট ওয়েবসাইটটি দেখুন)।
করণীয় এক অতি সহজ কাজ হ'ল পৃষ্ঠার জন্য আপনি যে ডেটা চান সেটি অ্যাক্সেস করার সময় অযৌক্তিকভাবে চিন্তা করা। কোনও ওয়েব পরিষেবা, ফাইল, ডেটা বেস বা অন্য কোনও কিছু থেকে পড়া হোক না কেন, যতটা সম্ভব অ্যাসিঙ্ক মডেলটি ব্যবহার করুন। যদিও এটি অগত্যা কোনও একটি পৃষ্ঠাকে দ্রুত হতে সহায়তা করবে না এটি আপনার সার্ভারকে সামগ্রিকভাবে আরও ভালভাবে সম্পাদন করতে সহায়তা করবে।
1: সময় পান। মন্দা কোথায় তা আপনি জানেন না হওয়া পর্যন্ত প্রশ্নের উত্তরটি খুব বিস্তৃত। যে প্রকল্পে আমি কাজ করছি তার মধ্যে এই সুনির্দিষ্ট সমস্যা রয়েছে; এমনকি নির্দিষ্ট কিছু জিনিস কত সময় নেয় তা জানার জন্য কোনও লগইন নেই; আমরা প্রকল্পের সময় যোগ না করা পর্যন্ত কেবলমাত্র অ্যাপ্লিকেশনটির ধীর অংশগুলি সম্পর্কে ধারণা করতে পারি।
2: আপনার যদি ক্রমিক ক্রিয়াকলাপ হয় তবে হালকা মাল্টিথ্রেড করতে ভয় পাবেন না। অবরুদ্ধ অপারেশন জড়িত থাকলে অবশ্যই। পিনকিউ এখানে আপনার বন্ধু।
3: প্রকাশের সময় আপনার এমভিসি ভিউগুলি জেনারেট করুন ... এটি 'প্রথম পৃষ্ঠার হিট' কিছুতে সহায়তা করবে
4: কিছু স্টোরেড পদ্ধতি / এডিওর গতির সুবিধার জন্য তর্ক করে। অন্যরা ইএফ-এর বিকাশের গতি এবং স্তরগুলির আরও সুস্পষ্ট বিভাজন এবং তাদের উদ্দেশ্য নিয়ে তর্ক করে। আমি যখন এসকিউএল এবং ডেটা পুনরুদ্ধার এবং সঞ্চয়স্থানের জন্য স্প্রোকস / ভিউগুলি ব্যবহার করার জন্য কাজ করি তখন সত্যই ধীর নকশাগুলি দেখেছি। এছাড়াও, আপনার পরীক্ষা করতে অসুবিধা বৃদ্ধি পায়। আমাদের বর্তমান কোডবেস যা আমরা ADO থেকে EF এ রূপান্তর করছি পুরানো হ্যান্ড-রোল্ড মডেলের চেয়ে খারাপ (এবং কিছু ক্ষেত্রে আরও ভাল) পারফর্ম করছে না।
5: এটি বলেছিল, অ্যাপ্লিকেশন ওয়ার্মআপ সম্পর্কে চিন্তা করুন। আমাদের EF পারফরম্যান্সের বেশিরভাগ দুর্ভোগ দূর করতে আমরা যা করি তার অংশটি হ'ল একটি বিশেষ ওয়ার্মআপ পদ্ধতি যুক্ত করা। এটি কোনও জিজ্ঞাসা বা কিছু প্রাক্পাইল করে না, তবে এটি মেটাডেটা লোডিং / প্রজন্মের অনেকাংশে সহায়তা করে। কোড ফার্স্ট মডেলগুলির সাথে কাজ করার সময় এটি আরও বেশি গুরুত্বপূর্ণ হতে পারে।
:: অন্যরা যেমন বলেছে, সেশন স্টেট বা সম্ভব হলে ভিউস্টেট ব্যবহার করবেন না। এগুলি অগত্যা পারফরম্যান্স অপটিমাইজেশন নয় যা বিকাশকারীরা ভাবেন, তবে একবার আপনি আরও জটিল ওয়েব অ্যাপ্লিকেশন লিখতে শুরু করলে, আপনি প্রতিক্রিয়া চান। সেশন স্টেট এটিকে অন্তর্ভুক্ত করে। একটি দীর্ঘ চলমান ক্যোয়ারী কল্পনা করুন। আপনি একটি নতুন উইন্ডো খোলার সিদ্ধান্ত নিয়েছেন এবং একটি কম জটিল চেষ্টা করুন। ঠিক আছে, আপনি পাশাপাশি সেশন স্থিতির সাথেও অপেক্ষা করেছিলেন, কারণ সেই অধিবেশনটির জন্য পরবর্তীটিতে যাওয়ার আগে প্রথম অনুরোধ না হওয়া পর্যন্ত সার্ভারটি অপেক্ষা করবে।
7: ডাটাবেসে রাউন্ড ট্রিপগুলি হ্রাস করুন। আপনি প্রায়শই ব্যবহার করেন এমন স্টাফগুলি সংরক্ষণ করুন কিন্তু আপনার। নেট ক্যাশে বাস্তবে পরিবর্তন হবে না। আপনার সন্নিবেশ / আপডেটগুলি যেখানে সম্ভব সেখানে ব্যাচ করার চেষ্টা করুন।
7.1: জঘন্য কোনও ভাল কারণ ছাড়াই আপনার রেজার ভিউগুলিতে ডেটা অ্যাক্সেস কোড এড়িয়ে চলুন। আমি এটি না দেখলে এটি বলব না। মডেলটি একসাথে রাখার সময় তারা ইতিমধ্যে তাদের ডেটা অ্যাক্সেস করছিল, তারা কেন মডেলটিকে এগুলি অন্তর্ভুক্ত করছিল না?
শুধু আমার 2 সেন্ট যোগ করতে চেয়েছিলেন। এমভিসি অ্যাপ্লিকেশনে ইউআরএল রুট জেনারেশনের অনুকূলকরণের সর্বাধিক কার্যকর উপায় হ'ল ... এগুলি মোটেই উত্পন্ন নয়।
আমাদের বেশিরভাগই কম-বেশি জানেন যে কীভাবে আমাদের অ্যাপ্লিকেশনগুলিতে ইউআরএল তৈরি করা হয়, তাই কেবল বা এর Url.Content("~/Blahblah")
পরিবর্তে স্ট্যাটিক ব্যবহার করেUrl.Action()
Url.RouteUrl()
যেখানে সম্ভব হয় , সমস্ত 20 টি পদ্ধতি এবং আরও 20 টির মারধর করে।
পুনশ্চ. আমি কয়েক হাজার পুনরাবৃত্তির একটি মানদণ্ড চালিয়েছি এবং আগ্রহী হলে আমার ব্লগে ফলাফল পোস্ট করেছি ।
ক্লায়েন্ট পক্ষের অনুকূলকরণের জন্য আপনার কোলাহলে, ডাটাবেস স্তরটি ভুলে যাবেন না। আমাদের কাছে একটি অ্যাপ্লিকেশন ছিল যা 5 সেকেন্ড থেকে রাত্রে 50 সেকেন্ড পর্যন্ত লোড হতে পারে।
পরিদর্শন করার সময়, আমরা স্কিমা পরিবর্তনগুলির পুরো গোছা করেছি। একবার আমরা পরিসংখ্যানগুলি সতেজ করে তুললে হঠাৎ এটি আগের মতো প্রতিক্রিয়াশীল হয়ে উঠল।
নিম্নলিখিত জিনিসগুলি করা হয়
আপনি যদি মাইক্রোসফ্ট অ্যাজুরে (আইএএএস বা পাস) আপনার এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশনটি চালাচ্ছেন তবে কমপক্ষে প্রথম স্থাপনার আগে কমপক্ষে নিম্নলিখিতটি করুন।
আমি উপরের সমস্ত উত্তর দিয়েছি এবং এটি আমার সমস্যার সমাধান করেনি।
অবশেষে, আমি সেটিং সঙ্গে আমার ধীর সাইট লোডিং সমস্যার সমাধান PrecompileBeforePublish মধ্যে প্রোফাইল প্রকাশ করুন থেকে সত্য । আপনি যদি মিসবিল্ড ব্যবহার করতে চান তবে আপনি এই যুক্তিটি ব্যবহার করতে পারেন:
/p:PrecompileBeforePublish=true
এটি সত্যিই অনেক সাহায্য করে। এখন আমার এমভিসি এএসপি.এনইটি 10 গুণ দ্রুত লোড হয়।