আপনি যদি কেবল পারফরম্যান্সের বিষয়ে চিন্তা করেন তবে এই থ্রেডের বেশিরভাগ পরামর্শই সমতল এবং ভুল এসপিএ যুগে আরও ভুল হয়ে উঠছে, যেখানে আমরা ধরে নিতে পারি যে জেএস কোড ব্যতীত পৃষ্ঠাটি অকেজো। আমি এসপিএ পৃষ্ঠা লোড বারগুলি অনুকূল করে এবং বিভিন্ন ব্রাউজারগুলির সাথে এই ফলাফলগুলি যাচাই করে অগণিত ঘন্টা ব্যয় করেছি। বোর্ড জুড়ে আপনার এইচটিএমএলকে পুনরায় অর্কেস্টেট করে পারফরম্যান্স বৃদ্ধি, বেশ নাটকীয় হতে পারে।
সেরা পারফরম্যান্স পেতে, আপনাকে পৃষ্ঠাগুলিকে দ্বি-পর্যায়ের রকেট হিসাবে ভাবতে হবে। এই দুটি পর্যায় মোটামুটিভাবে <head>
এবং <body>
পর্যায়ক্রমে মিলিত হয় তবে তাদের পরিবর্তে <static>
এবং হিসাবে চিন্তা করুন <dynamic>
। স্থিতিশীল অংশটি মূলত একটি স্ট্রিং ধ্রুবক যা আপনি যতটা সম্ভব সম্ভব সাড়া পাইপটিকে নীচে নামিয়ে দেন। আপনি যদি অনেকগুলি মিডলওয়্যার ব্যবহার করেন যা কুকিজ সেট করে (এটি HTTP সামগ্রী প্রেরণের আগে সেট করা দরকার) ব্যবহার করে এটি কিছুটা জটিল হতে পারে তবে নীতিগতভাবে এটি কেবল প্রতিক্রিয়া বাফারটিকে ফ্লাশ করছে, আশা করি কিছু টেম্প্লেটিং কোডে ঝাঁপ দেওয়ার আগে (রেজার, পিএইচপি, ইত্যাদি) সার্ভারে। এটি কঠিন মনে হতে পারে, তবে তারপরে আমি কেবল এটি ভুল ব্যাখ্যা করছি, কারণ এটি নিকৃষ্টতম। আপনি যেমন অনুমান করতে পারেন, এই স্থির অংশে সমস্ত জাভাস্ক্রিপ্ট অন্তর্ভুক্ত এবং মাইনযুক্ত হওয়া উচিত। এটি দেখতে কিছু হবে
<!DOCTYPE html>
<html>
<head>
<script>/*...inlined jquery, angular, your code*/</script>
<style>/* ditto css */</style>
</head>
<body>
<!-- inline all your templates, if applicable -->
<script type='template-mime' id='1'></script>
<script type='template-mime' id='2'></script>
<script type='template-mime' id='3'></script>
যেহেতু আপনার অংশটি তারের নিচে না পাঠানোর জন্য এটি আপনার কোনও কিছুর পরে ব্যয় করে, তাই আপনি আশা করতে পারেন যে ক্লায়েন্টটি আপনার সার্ভারের সাথে সংযোগ স্থাপনের পরে এই কোথাও 5 মিমি + লেটেন্সি পেতে শুরু করবে। ধরে নিচ্ছি যে সার্ভারটি যুক্তিসঙ্গতভাবে বন্ধ হয়ে গেছে এই বিলম্বটি 20 মিমি থেকে 60 মিটারের মধ্যে হতে পারে। ব্রাউজারগুলি এই বিভাগটি পাওয়ার সাথে সাথে এটি প্রক্রিয়া শুরু করবে এবং প্রসেসিং সময়টি সাধারণত 20 বা ততোধিক ফ্যাক্টর দ্বারা স্থানান্তর সময়কে প্রাধান্য দেয়, যা এখন <dynamic>
অংশটির সার্ভার-সাইড প্রসেসিংয়ের জন্য আপনার মোড়কযুক্ত উইন্ডো ।
ব্রাউজারটির জন্য প্রায় 50 মিমি লাগবে (ক্রোম, বিশ্রামের চেয়ে কম হতে পারে 20% ধীরে ধীরে) ইনলাইন জ্যাকুয়েরি + সিগন্যাল + কৌণিক + এনজিমেট + এনজি স্পর্শ + এনজি রুটস + লোডাশ প্রক্রিয়া করতে। এটি নিজের মধ্যে এবং বেশ আশ্চর্যজনক। বেশিরভাগ ওয়েব অ্যাপ্লিকেশনগুলিতে জনপ্রিয় সমস্ত লাইব্রেরি একসাথে রেখে দেওয়া কোডগুলির চেয়ে কম কোড রয়েছে তবে আসুন আমরা বলি যে আপনার কাছে ঠিক তেমন পরিমাণ রয়েছে, তাই আমরা ক্লায়েন্টের উপর 100 বিলম্বিত প্রসেসিং জিততে পারি (এই বিলম্বিত বিজয়টি দ্বিতীয় স্থানান্তর অংশ থেকে আসে)। দ্বিতীয় খণ্ডটি আসার সময়ে, আমরা সমস্ত জেএস কোড এবং টেম্পলেটগুলি প্রক্রিয়াভুক্ত করেছি এবং আমরা ডোম ট্রান্সফর্মগুলি কার্যকর করতে শুরু করতে পারি।
আপনি আপত্তি করতে পারেন যে এই পদ্ধতিটি অন্তর্নিহিত ধারণার কাছে orthogonal, কিন্তু এটি নয়। আপনি যদি ইনলাইনিংয়ের পরিবর্তে সিডিএন বা আপনার নিজের সার্ভারের সাথে লিঙ্ক করেন তবে ব্রাউজারটিকে অন্য সংযোগ (গুলি) খুলতে হবে এবং কার্যকর করতে বিলম্ব করতে হবে। যেহেতু এই এক্সিকিউশনটি মূলত নিখরচায় (যেমন সার্ভার সাইডটি ডাটাবেসের সাথে কথা বলছে) এটি অবশ্যই স্পষ্ট হওয়া উচিত যে এই সমস্ত জাম্পের জন্য কোনও লাফ না দেওয়ার চেয়ে বেশি খরচ হবে। যদি কোনও ব্রাউজারের কৌতুক থাকে যে বলে যে বহিরাগত জেএস দ্রুত কার্যকর করে তবে আমরা কোন ফ্যাক্টরটির উপর নির্ভরশীল তা পরিমাপ করতে পারি। আমার পরিমাপগুলি নির্দেশ করে যে অতিরিক্ত অনুরোধগুলি এই পর্যায়ে কার্যকারিতা হ্রাস করে।
আমি এসপিএ অ্যাপ্লিকেশনগুলির অপ্টিমাইজেশন সহ অনেক কাজ করি। লোকেদের মনে করা সাধারণভাবে যে ডেটা ভলিউম একটি বড় ব্যাপার, যদিও সত্যিকভাবে বিলম্ব হয় এবং কার্যকরভাবে প্রায়শই প্রাধান্য পায়। আমি তালিকাভুক্ত যে গ্রন্থাগারগুলি তালিকাভুক্ত করেছি সেগুলি 300kb ডেটা যুক্ত করে, এবং এটি কেবল 68 কেবি গিজিপ, বা 2 মিমি 3 জি / 4 জি ফোনে 200 মিমি ডাউনলোড করে, এটি ঠিক একই ধরণের তথ্য ছিল কিনা তা যদি একই ফোনে পরীক্ষা করতে পারে তবে এটি পরীক্ষা করতে হবে এর ক্যাশে ইতিমধ্যে এটি প্রক্সি ক্যাশে থাকলেও, কারণ মোবাইল ল্যাটেন্সি ট্যাক্স (ফোন-টু-টাওয়ার-ল্যাটেন্সি) এখনও প্রযোজ্য। এদিকে, ডেস্কটপ সংযোগগুলিতে সাধারণত প্রথম হপ লেটেন্সি রয়েছে তবে সাধারণত উচ্চতর ব্যান্ডউইথ থাকে।
সংক্ষেপে, এখনই (2014), সমস্ত স্ক্রিপ্ট, শৈলী এবং টেমপ্লেটগুলি ইনলাইন করা ভাল best
সম্পাদনা (মে 2016)
জেএস অ্যাপ্লিকেশনগুলি ক্রমবর্ধমান অব্যাহত থাকায় এবং আমার কিছু পে-লোড এখন মিনিফাইড কোডের 3+ মেগাবাইট পর্যন্ত সজ্জিত রয়েছে, এটি সুস্পষ্ট হয়ে উঠছে যে খুব কমপক্ষে সাধারণ গ্রন্থাগারগুলিতে আর ইনলাইন করা উচিত নয়।