যেহেতু জাভাস্ক্রিপ্টটি একক থ্রেডে চালিত হয়, একটি এজেএক্স অনুরোধ করার পরে, ব্যাকগ্রাউন্ডে আসলে কী ঘটে? আমি এটিতে আরও গভীর অন্তর্দৃষ্টি পেতে চাই, কেউ কি কিছুটা আলোকপাত করতে পারে?
যেহেতু জাভাস্ক্রিপ্টটি একক থ্রেডে চালিত হয়, একটি এজেএক্স অনুরোধ করার পরে, ব্যাকগ্রাউন্ডে আসলে কী ঘটে? আমি এটিতে আরও গভীর অন্তর্দৃষ্টি পেতে চাই, কেউ কি কিছুটা আলোকপাত করতে পারে?
উত্তর:
কভারগুলির নীচে, জাভাস্ক্রিপ্টে একটি ইভেন্টের সারি রয়েছে। প্রতিবার কার্যকর করার জাভাস্ক্রিপ্ট থ্রেডটি শেষ হওয়ার পরে এটি প্রক্রিয়া করার জন্য কাতারে আরও একটি ইভেন্ট আছে কিনা তা পরীক্ষা করে দেখেছে। যদি সেখানে থাকে তবে এটি এটিকে সারিবদ্ধ করে তোলে এবং ঘটনাটি ট্রিগার করে (উদাহরণস্বরূপ মাউস ক্লিকের মতো)।
এজাক্স কলের আওতাভুক্ত নেটিভ কোড নেটওয়ার্কিং কখন অজ্যাক্স প্রতিক্রিয়া সম্পন্ন হবে তা জানবে এবং জাভাস্ক্রিপ্ট ইভেন্টের সারিতে একটি ইভেন্ট যুক্ত হবে। যখন অজ্যাক্স কলটি করা হয় তখন স্থানীয় কোডটি কীভাবে জানে তা বাস্তবায়নের উপর নির্ভর করে। এটি থ্রেডগুলির সাথে প্রয়োগ করা যেতে পারে বা এটি নিজেই ইভেন্ট চালিত হতে পারে (এটি আসলে কোনও বিষয় নয়)। বাস্তবায়নের বিষয়টি হ'ল এজ্যাক্সের প্রতিক্রিয়াটি শেষ হয়ে গেলে কিছু নেটিভ কোড জানবে যে এটি হয়েছে এবং জেএস সারিতে একটি ইভেন্ট স্থাপন করবে।
যদি কোনও জাভাস্ক্রিপ্ট চলমান না থাকে তবে ইভেন্টটি তাত্ক্ষণিকভাবে ট্রিগার করা হবে যা এজ্যাক্স প্রতিক্রিয়া হ্যান্ডলারটি চালাবে will যদি সেই সময়ে কিছু চলমান থাকে, তবে কার্যকর কার্যকর জাভাস্ক্রিপ্ট থ্রেডটি শেষ হলে ইভেন্টটি প্রক্রিয়া করা হবে। জাভাস্ক্রিপ্ট ইঞ্জিন দ্বারা কোনও পোলিং হওয়ার দরকার নেই। যখন জাভাস্ক্রিপ্টের টুকরোটি নির্বাহ শেষ করে, জেএস ইঞ্জিন কেবল ইভেন্টের সারিটি যাচাই করে দেখার দরকার আছে কিনা তা দেখার জন্য। যদি তা হয় তবে এটি পরবর্তী ইভেন্টটিকে সারিবদ্ধ করে তোলে এবং এটি সম্পাদন করে (সেই ইভেন্টের জন্য নিবন্ধিত এক বা একাধিক কলব্যাক ফাংশনগুলিকে কল করা)। যদি ইভেন্টের সারিতে কিছু না থাকে, তবে জেএস ইন্টারপ্রেটারের অবসর সময় (আবর্জনা সংগ্রহ বা নিষ্ক্রিয়) থাকে যতক্ষণ না কোনও বাহ্যিক এজেন্ট ইভেন্টের সারিতে অন্য কিছু রাখে এবং আবার জাগ্রত করে না।
কারণ জাভাস্ক্রিপ্ট আসলে অন্য কিছু চলমান থাকাকালীন সমস্ত বাইরের ইভেন্টগুলি ইভেন্টের কাতারে যায় এবং কোনও ইভেন্ট কখনই ট্রিগার হয় না, এটি একক থ্রেডযুক্ত থাকে।
বিশদ সম্পর্কে এখানে কিছু নিবন্ধ দেওয়া হয়েছে:
.focus()
কোনও আইটেমটিতে কল করেছেন এবং এটি ফোকাস সহ আইটেমটিতে একটি "ঝাপসা" ইভেন্টের মতো কয়েকটি ইভেন্টকে ট্রিগার করে। এই অস্পষ্ট ঘটনাটি সিঙ্ক্রোনসিভভাবে ঘটে এবং ইভেন্টের সারিটির মধ্য দিয়ে যায় না তাই ইভেন্টের সারিতে থাকা অন্যান্য জিনিসের আগেই এটি ঘটে চলে। বাস্তবে, আমি এটি ব্যবহারিক উদ্বেগ বলে মনে করি না।
আপনি এখানে জাভাস্ক্রিপ্টে পরিচালিত ইভেন্টগুলির একটি খুব সম্পূর্ণ ডকুমেন্টেশন খুঁজে পেতে পারেন ।
এটি অপেরা ব্রাউজারে জাভাস্ক্রিপ্ট প্রয়োগে কাজ করে এমন একজন লোক লিখেছেন।
আরও স্পষ্টভাবে শিরোনামগুলি দেখুন: "ইভেন্ট ফ্লো", "ইভেন্ট কুইউনিং" এবং "অ-ব্যবহারকারীর ইভেন্টগুলি": আপনি এটি শিখবেন:
দ্রষ্টব্য: মূল লিঙ্কটি ছিল: লিঙ্ক , তবে এখন মারা গেছে।
উত্তরে বর্ণিত এজাক্স বাস্তবায়ন সম্পর্কে আমি কিছুটা বিস্তারিত বলতে চাই।
যদিও (রেগুলার) জাভাস্ক্রিপ্ট সম্পাদন হয় না -থ্রেডেড মাল্টি - উপরের হিসাবে উত্তর ভাল লক্ষনীয় - তবে , প্রকৃত হ্যান্ডলিং AJAX responses
(সেইসাথে অনুরোধ সামলাচ্ছে) হল না জাভাস্ক্রিপ্ট, এবং এটি - সাধারণত - হয় বহু-থ্রেডেড। ( এক্সএমএলএইচটিপিআরকোয়েস্টের ক্রোমিয়াম উত্স বাস্তবায়ন দেখুন যা আমরা উপরে আলোচনা করব)
এবং আমি ব্যাখ্যা করব, আসুন নীচের কোডটি গ্রহণ করুন:
var xhr = new XMLHttpRequest();
var t = Date.now;
xhr.open( "GET", "https://swx.cdn.skype.com/shared/v/1.2.15/SkypeBootstrap.min.js?v="+t(), true );
xhr.onload = function( e ) {
console.log(t() + ': step 3');
alert(this.response.substr(0,20));
};
console.log(t() + ': step 1');
xhr.send();
console.log(t() + ': step 2');
after an AJAX request is made
(- প্রথম ধাপের পরে), তারপরে আপনার জেএস কোডটি কার্যকর করার সময় (পদক্ষেপ 2 এবং তারপরে) ব্রাউজারটি আসল কাজটি শুরু করে: 1. টিসিপি অনুরোধের বিন্যাসকরণ 2. সকেট খোলার 3. শিরোনাম প্রেরণ 4. হ্যান্ডশেকিং 5. প্রেরণ বডি 6. অপেক্ষার প্রতিক্রিয়া 7.. পঠন শিরোনাম ৮. পড়া পড়া শরীর ইত্যাদি এই সমস্ত বাস্তবায়ন সাধারণত আপনার জেএস কোড সম্পাদনের সমান্তরালে আলাদা থ্রেডে চালিত হয়। উদাহরণস্বরূপ, উল্লিখিত ক্রোমিয়াম বাস্তবায়ন থ্রেডেবল লোডার ব্যবহার করে ডিগ-ইন , (আপনি কোনও পৃষ্ঠার লোডের নেটওয়ার্ক ট্যাবটি দেখে কিছুটা প্রভাব ফেলতে পারেন, আপনি কিছু যুগপত অনুরোধগুলি দেখতে পাবেন)।
উপসংহারে, আমি বলব - কমপক্ষে - আপনার I / O অপারেশনগুলির বেশিরভাগই একসাথে / async তৈরি করা যেতে পারে (এবং আপনি উদাহরণের জন্য অপেক্ষা করে এটির সুবিধা নিতে পারেন )। তবে এই ক্রিয়াকলাপগুলির সাথে সমস্ত ইন্ট্যারাকশন (ইস্যু করা, জেএস কলব্যাক এক্সিকিউশন) সমস্ত সিঙ্ক্রোনাস।