আমি মনে করি জ্যাক আর্কিবাল্ড ২০১৩ সালে আমাদের কিছু অন্তর্দৃষ্টি উপস্থাপন করেছিলেন যা এই বিষয়টিতে আরও বেশি ইতিবাচকতা যুক্ত করতে পারে:
https://www.html5rocks.com/en/tutorials/speed/script-loading/
পবিত্র গ্রেইলে রেন্ডারিং বাধা না দিয়ে তত্ক্ষণাত স্ক্রিপ্টগুলি ডাউনলোড করা হচ্ছে এবং যত তাড়াতাড়ি সম্ভব যুক্ত হওয়া ক্রমে কার্যকর করা হবে। দুর্ভাগ্যক্রমে এইচটিএমএল আপনাকে ঘৃণা করে এবং আপনাকে এটি করতে দেয় না।
(...)
উত্তরটি আসলে HTML5 স্পেসে রয়েছে, যদিও এটি স্ক্রিপ্ট-লোডিং বিভাগের নীচে লুকিয়ে রয়েছে। " অ্যাসিঙ্ক আইডিএল অ্যাট্রিবিউটটি উপাদানটি অবিচ্ছিন্নভাবে কার্যকর করবে কিনা তা নিয়ন্ত্রণ করে। যদি উপাদানটির" ফোর্স-অ্যাসিঙ্ক "পতাকাটি সেট করা থাকে, তবে, পাওয়ার পরে, অ্যাসিঙ্ক আইডিএল বৈশিষ্ট্যটি সত্য হওয়া উচিত এবং সেটিংসে" ফোর্স-অ্যাসিঙ্ক " পতাকা অবশ্যই প্রথমে আনসেট করা উচিত ... "।
(...)
ডকুমেন্টে গতিশীলভাবে তৈরি এবং ডকুমেন্টে যুক্ত হওয়া স্ক্রিপ্টগুলি ডিফল্টরূপে অ্যাসিঙ্ক হয় , তারা ডাউনলোড করার সাথে সাথে রেন্ডারিং আটকে দেয় এবং কার্যকর করা হয় না, অর্থাত তারা ভুল ক্রমে বেরিয়ে আসতে পারে। যাইহোক, আমরা এগুলিকে স্পষ্টভাবে চিহ্নিত করতে পারি না async হিসাবে:
[
'//other-domain.com/1.js',
'2.js'
].forEach(function(src) {
var script = document.createElement('script');
script.src = src;
script.async = false;
document.head.appendChild(script);
});
এটি আমাদের স্ক্রিপ্টগুলিকে এমন আচরণের মিশ্রণ দেয় যা সাধারণ এইচটিএমএল দিয়ে অর্জন করা যায় না। সুস্পষ্টভাবে অ্যাসিঙ্ক না হয়ে, স্ক্রিপ্টগুলি একটি কার্যকর মৃত্যুর কিউতে যুক্ত করা হয়, একই কাতারে সেগুলি আমাদের প্রথম সরল-এইচটিএমএল উদাহরণে যুক্ত করা হয়েছে। যাইহোক, গতিশীলভাবে তৈরি হয়ে, এগুলি ডকুমেন্ট পার্সিংয়ের বাইরে কার্যকর করা হয়, সুতরাং ডাউনলোড করার সময় রেন্ডারিং ব্লক করা হয় না (সিঙ্ক এক্সএইচআর দ্বারা অ-অ্যাসিঙ্ক স্ক্রিপ্ট লোডিংকে বিভ্রান্ত করবেন না, যা কখনই ভাল জিনিস নয়)।
উপরের স্ক্রিপ্টটি পৃষ্ঠাগুলির শিরোনামে ইনলাইন অন্তর্ভুক্ত করা উচিত, প্রগতিশীল রেন্ডারিং ব্যাহত না করে যত তাড়াতাড়ি সম্ভব স্ক্রিপ্ট ডাউনলোডগুলি সারিবদ্ধ করা উচিত এবং আপনার নির্দিষ্ট ক্রমে যত তাড়াতাড়ি সম্ভব কার্যকর করা হবে। "২.জেএস" "1.js" এর পূর্বে ডাউনলোড করা নিখরচায়, তবে "1.js" সফলভাবে ডাউনলোড এবং সম্পাদিত না হওয়া পর্যন্ত এটি কার্যকর করা হবে না বা এটি করতে ব্যর্থ হয়। Hurray থেকে! অ্যাসিঙ্ক-ডাউনলোড কিন্তু অর্ডার-এক্সিকিউশন !
তবুও, এটি স্ক্রিপ্টগুলি লোড করার দ্রুততম উপায় না হতে পারে:
(...) উপরের উদাহরণ সহ ব্রাউজারটিকে কোন স্ক্রিপ্ট ডাউনলোড করতে হবে তা আবিষ্কার করতে স্ক্রিপ্টটিকে বিশ্লেষণ করতে এবং চালিত করতে হয়। এটি আপনার স্ক্রিপ্টগুলি প্রিললোড স্ক্যানারগুলি থেকে গোপন করে। ব্রাউজারগুলি এই স্ক্যানারগুলি আপনি পরবর্তী পৃষ্ঠাগুলিতে সন্ধান করতে পারে এমন পৃষ্ঠাগুলিতে রিসোর্সগুলি আবিষ্কার করতে বা পার্সারকে অন্য কোনও সংস্থান দ্বারা অবরুদ্ধ করার সময় পৃষ্ঠা সংস্থানগুলি আবিষ্কার করতে ব্যবহার করে।
এটিকে নথির মাথায় রেখে আমরা আবিষ্কারের পিছনে যুক্ত করতে পারি:
<link rel="subresource" href="//other-domain.com/1.js">
<link rel="subresource" href="2.js">
এটি ব্রাউজারকে জানায় যে পৃষ্ঠাটির 1.js এবং 2.js প্রয়োজন। লিঙ্ক [rel = সাব্রোসোর্স] লিঙ্কের সাথে সমান [rel = প্রিফেট], তবে বিভিন্ন শব্দার্থবিজ্ঞানের সাথে। দুর্ভাগ্যক্রমে এটি কেবলমাত্র ক্রোমে সমর্থিত, এবং আপনাকে কোনও লিঙ্ক উপাদানগুলির মাধ্যমে একবার এবং আবার আপনার স্ক্রিপ্টে আবার কোন স্ক্রিপ্টগুলি দুবার লোড করতে হবে তা আপনাকে ঘোষণা করতে হবে।
সংশোধন: আমি প্রাথমিকভাবে বলেছি যে এগুলি প্রিলোড স্ক্যানার দ্বারা নেওয়া হয়েছিল, তারা নয়, এগুলি নিয়মিত পার্সার দ্বারা তুলে নেওয়া হয়। যাইহোক, প্রিললোড স্ক্যানার এগুলি নিতে পারে, এটি এখনও হয় না, তবে এক্সিকিউটেবল কোড দ্বারা অন্তর্ভুক্ত স্ক্রিপ্টগুলি কখনই প্রিললোড করা যায় না। যোভ ওয়েইসকে ধন্যবাদ যারা মন্তব্যগুলিতে আমাকে সংশোধন করেছেন।
async
নতুন (আইএসএইচ), তবেdefer
আইই 4 এর পরে আই-র অংশ ছিল।defer
অন্যান্য ব্রাউজারগুলিতে সম্প্রতি আরও যুক্ত করা হয়েছিল, তবে সেই ব্রাউজারগুলির পুরানো সংস্করণগুলি খুব কম ঘুরে বেড়ায়।