আমি কখন ইভেন্ট-ভিত্তিক প্রোগ্রামিং ব্যবহার করব?


65

একবারে কাজগুলি সম্পন্ন হয়ে যাওয়ার জন্য আমি আমার প্রোগ্রামগুলিতে কলব্যাকগুলি পাস করছি বা অন্য ফাংশন থেকে ফাংশনগুলি ট্রিগার করছি। কিছু শেষ হয়ে গেলে আমি সরাসরি ফাংশনটি ট্রিগার করি:

var ground = 'clean';

function shovelSnow(){
    console.log("Cleaning Snow");
    ground = 'clean';
}

function makeItSnow(){
    console.log("It's snowing");
    ground = 'snowy';
    shovelSnow();
}

তবে আমি প্রোগ্রামিংয়ের বিভিন্ন কৌশল সম্পর্কে পড়েছি, এবং একটি যেটি আমি শক্তিশালী বলে বুঝতে পেরেছি, তবে এখনও অনুশীলন করেছি না, তা ইভেন্ট-ভিত্তিক (আমার মনে হয় যে আমি যে পদ্ধতিটি পড়েছি তাকে "পাব-সাব" বলা হয়েছিল ):

var ground = 'clean';

function shovelSnow(){
    console.log("Cleaning Snow");
    ground = 'clean';
}

function makeItSnow(){
    console.log("It's snowing");
    ground = 'snowy';
    $(document).trigger('snow');
}

$(document).bind('snow', shovelSnow);

আমি ইভেন্ট-ভিত্তিক প্রোগ্রামিংয়ের উদ্দেশ্য শক্তি এবং দুর্বলতাগুলি বুঝতে চাই, বনাম কেবল অন্য সমস্ত ক্রিয়াকলাপ থেকে আপনার সমস্ত ফাংশন কল করে। কোন প্রোগ্রামিং পরিস্থিতিতে ইভেন্ট-ভিত্তিক প্রোগ্রামিংগুলি ব্যবহার করা বোঝায়?


2
অন্যদিকে, আপনি কেবল ব্যবহার করতে পারেন $(document).bind('snow', shovelShow)। এটি কোনও বেনামি ফাংশনে মোড়ানোর দরকার নেই।
কার্ল বিলেফেল্ট

4
আপনি "প্রতিক্রিয়াশীল প্রোগ্রামিং" সম্পর্কে শিখতে আগ্রহী হতে পারেন, যা ইভেন্ট-চালিত প্রোগ্রামিংয়ের সাথে অনেক মিল রয়েছে।
এরিক লিপার্ট

উত্তর:


75

একটি ইভেন্ট হ'ল সাম্প্রতিক অতীতের ঘটনাগুলি বর্ণনা করার জন্য একটি বিজ্ঞপ্তি।

ইভেন্ট-চালিত সিস্টেমের একটি সাধারণ প্রয়োগ একটি ইভেন্ট প্রেরক এবং হ্যান্ডলার ফাংশন (বা গ্রাহক ) ব্যবহার করে। প্রেরণকারী ইভেন্টগুলি (jQuery এর bind) পর্যন্ত ওয়্যার হ্যান্ডলারের জন্য একটি এপিআই এবং তার গ্রাহকদের ( triggerjQuery এ) ইভেন্ট প্রকাশের একটি পদ্ধতি সরবরাহ করে । আপনি যখন আইও বা ইউআই ইভেন্টগুলির বিষয়ে কথা বলছেন তখন সাধারণত একটি ইভেন্ট লুপ থাকে যা মাউস-ক্লিকগুলির মতো নতুন ইভেন্টগুলি সনাক্ত করে এবং প্রেরণকারীর কাছে প্রেরণ করে। জেএস-ল্যান্ডে, প্রেরণকারী এবং ইভেন্ট লুপ ব্রাউজার দ্বারা সরবরাহ করা হয়।

কোডের জন্য যা ব্যবহারকারীদের সাথে সরাসরি ইন্টারেক্ট করে - কী-চাপগুলি এবং ক্লিকগুলিতে প্রতিক্রিয়া জানায় - ইভেন্ট-চালিত প্রোগ্রামিং (বা এর বিভিন্নতা যেমন কার্যকরী প্রতিক্রিয়াশীল প্রোগ্রামিং ) প্রায় অনিবার্য। আপনার, প্রোগ্রামারটি, ব্যবহারকারী কখন বা কোথায় ক্লিক করবে সে সম্পর্কে কোনও ধারণা নেই, তাই এটির ইভেন্ট লুপে ব্যবহারকারীর ক্রিয়া সনাক্ত করতে এবং আপনার কোডটি জানানোর জন্য এটি জিইউআই ফ্রেমওয়ার্ক বা ব্রাউজারের নীচে নেমে এসেছে। নেটওয়ার্কিং অ্যাপ্লিকেশনগুলিতে (সিএফ নোডজেএস) এই ধরণের অবকাঠামো ব্যবহার করা হয়।

আপনার উদাহরণ, যেখানে আপনি সরাসরি কোনও ফাংশন কল করার চেয়ে আপনার কোডে কোনও ইভেন্ট উত্থাপন করেন তার আরও কিছু আকর্ষণীয় ট্রেড অফ রয়েছে যা আমি নীচে আলোচনা করব। মূল পার্থক্য হ'ল কোনও ইভেন্টের প্রকাশক ( makeItSnow) কলটির রিসিভার নির্দিষ্ট করে না; এটি অন্য কোথাও ওয়্যার্ড হয়েছে ( bindআপনার উদাহরণে কলটিতে )। এটিকে ফায়ার-অ্যান্ড ভুলে বলা হয় : makeItSnowবিশ্বকে ঘোষণা দিচ্ছে যে তুষারপাত হচ্ছে, তবে কে শুনছে, এরপরে কী ঘটবে বা কখন এটি ঘটে - তার কোনও গুরুত্ব নেই it


সুতরাং ইভেন্ট-চালিত পন্থাটি রিসিভারের কাছ থেকে বার্তা প্রেরককে হতাশ করে। এটি আপনাকে দেয় এমন একটি সুবিধা হ'ল কোনও প্রদত্ত ইভেন্টের একাধিক হ্যান্ডলার থাকতে পারে। gritRoadsবিদ্যমান shovelSnowহ্যান্ডলারটিকে প্রভাবিত না করে আপনি আপনার তুষার ইভেন্টে কোনও ফাংশন বাঁধতে পারেন । আপনার অ্যাপ্লিকেশনটি ওয়্যার্ড করার পদ্ধতিতে আপনার নমনীয়তা রয়েছে; কোনও আচরণ বন্ধ করতে আপনার আচরণের bindসমস্ত উদাহরণ খুঁজে পাওয়ার জন্য কোডটি সন্ধান করার চেয়ে কলটি সরিয়ে ফেলতে হবে।

ইভেন্ট-চালিত প্রোগ্রামিংয়ের আরেকটি সুবিধা হ'ল এটি আপনাকে কোথাও ক্রস-কাটিংয়ের উদ্বেগ প্রকাশ করতে দেয়। ইভেন্ট প্রেরণকারী মধ্যস্থতার ভূমিকা পালন করে এবং কিছু লাইব্রেরি (যেমন ব্রাইটার ) একটি পাইপলাইন ব্যবহার করে যাতে আপনি সহজেই লগিং বা মানের-অফ-পরিষেবার মতো জেনেরিক প্রয়োজনীয়তাগুলি প্লাগ-ইন করতে পারেন।

সম্পূর্ণ প্রকাশ: উজ্জ্বলটি হডল, যেখানে আমি কাজ করি সেখানে উন্নত।

গ্রহীতার কাছ থেকে কোনও ইভেন্ট প্রেরককে হতাশ করার তৃতীয় সুবিধা হ'ল এটি আপনি যখন ইভেন্টটি পরিচালনা করেন তখন এটি আপনাকে নমনীয়তা দেয় । আপনি প্রতিটি ধরণের ইভেন্টটিকে তার নিজস্ব থ্রেডে প্রক্রিয়া করতে পারেন (যদি আপনার ইভেন্ট প্রেরণকারী এটি সমর্থন করে), বা আপনি উত্থাপিত ইভেন্টগুলি একটি বার্তা ব্রোকার যেমন র‌্যাবিটএমকিউতে রাখতে পারেন এবং এগুলিকে একটি অ্যাসিনক্রোনাস প্রক্রিয়া সহ পরিচালনা করতে পারেন বা এমনকি রাতারাতি তাদের প্রচুর পরিমাণে প্রক্রিয়া করতে পারেন। ইভেন্টটির গ্রহণকারী একটি পৃথক প্রক্রিয়া বা একটি পৃথক মেশিনে থাকতে পারে। আপনাকে কোডটি পরিবর্তন করতে হবে না যা ঘটনাকে উত্থাপন করে এটি করার জন্য! এটি "মাইক্রোসার্চিস" আর্কিটেকচারের পিছনে বিগ আইডিয়া: স্বায়ত্তশাসিত পরিষেবাগুলি অ্যাপ্লিকেশনটির মেরুদণ্ড হিসাবে মেসেজিং মিডলওয়্যারের সাথে ইভেন্টগুলি ব্যবহার করে যোগাযোগ করে।

ইভেন্ট-চালিত শৈলীর পরিবর্তে পৃথক উদাহরণের জন্য, ডোমেন-চালিত ডিজাইনের দিকে নজর দিন, যেখানে ডোমেন ইভেন্টগুলি পৃথক করে আলাদা রাখতে সহায়তা করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি অনলাইন স্টোর বিবেচনা করুন যা আপনার ক্রয়ের ইতিহাসের ভিত্তিতে পণ্যগুলির প্রস্তাব দেয়। একজন Customerতার ক্রয়ের ইতিহাস আপডেট করেছি যখন একটি প্রয়োজন ShoppingCartজন্য অর্থ প্রদান করা হয়। ShoppingCartসমষ্টিগত অবহিত পারে Customerএকটি উত্থাপন দ্বারা CheckoutCompletedঘটনা; The Customerইভেন্টে প্রতিক্রিয়ায় একটি পৃথক লেনদেনে আপডেট হবে।


এই ইভেন্টটি চালিত মডেলের মূল ক্ষতি হচ্ছে ইন্ডিয়ারেশন। ইভেন্টটি পরিচালনা করে এমন কোডগুলি পাওয়া এখন আরও শক্ত কারণ আপনি নিজের আইডিই ব্যবহার করে এটিতে নেভিগেট করতে পারবেন না; ইভেন্টটি কনফিগারেশনের সাথে আবদ্ধ এবং আপনাকে আশা করতে হবে যে আপনি সমস্ত হ্যান্ডলার খুঁজে পেয়েছেন। আপনার মাথায় যে কোনও সময় রাখার জন্য আরও জিনিস রয়েছে। কোড শৈলী কনভেনশনগুলি এখানে সহায়তা করতে পারে (উদাহরণস্বরূপ, সমস্ত কলকে bindএকটি ফাইলে রেখে দেওয়া)। আপনার বিচক্ষণতার স্বার্থে, কেবলমাত্র একটি ইভেন্ট প্রেরক ব্যবহার করা এবং এটি ধারাবাহিকভাবে ব্যবহার করা গুরুত্বপূর্ণ।

আর একটি অসুবিধা হ'ল ইভেন্ট রিফ্যাক্টর করা শক্ত। আপনার যদি কোনও ইভেন্টের ফর্ম্যাট পরিবর্তন করতে হয় তবে আপনাকে সমস্ত রিসিভার পরিবর্তন করতে হবে। কোনও ইভেন্টের গ্রাহকরা বিভিন্ন মেশিনে থাকলে এটি আরও বেড়ে যায়, কারণ এখন আপনাকে সফ্টওয়্যার প্রকাশগুলি সিঙ্ক্রোনাইজ করতে হবে!

নির্দিষ্ট পরিস্থিতিতে, কর্মক্ষমতা একটি উদ্বেগ হতে পারে। কোনও বার্তা প্রক্রিয়া করার সময়, প্রেরককে তা করতে হবে:

  1. কিছু ডেটা স্ট্রাকচারে সঠিক হ্যান্ডলারগুলি সন্ধান করুন।
  2. প্রতিটি হ্যান্ডলারের জন্য একটি বার্তা প্রক্রিয়াকরণ পাইপলাইন তৈরি করুন। এটি মেমরির বরাদ্দগুলির একটি গুচ্ছ জড়িত থাকতে পারে।
  3. ডায়নামিকভাবে হ্যান্ডলারগুলিকে কল করুন (ভাষাটির প্রয়োজন হলে সম্ভবত প্রতিচ্ছবি ব্যবহার করে)।

এটি অবশ্যই নিয়মিত ফাংশন কলের চেয়ে ধীর গতির, যার মধ্যে কেবল স্ট্যাকের উপরে একটি নতুন ফ্রেম চাপানো অন্তর্ভুক্ত। যাইহোক, ইভেন্ট-চালিত আর্কিটেকচার আপনাকে যে নমনীয়তা দেয় তা ধীর কোডটি বিচ্ছিন্ন ও অনুকূলিতকরণকে আরও সহজ করে তোলে। অ্যাসিক্রোনাস প্রসেসরের কাছে কাজ জমা দেওয়ার দক্ষতা থাকা এখানে একটি বড় জয়, কারণ এটি ব্যাকগ্রাউন্ডে কঠোর পরিশ্রমের সাথে মোকাবেলা করার সাথে সাথে আপনাকে অনুরোধটি তাত্ক্ষণিকভাবে সরবরাহ করতে দেয়। যে কোনও ক্ষেত্রে, আপনি যদি স্ক্রিনের সাথে ডিবি বা স্ট্রিং স্টাফের সাথে ইন্টারঅ্যাক্ট করছেন তবে আইওয়ের ব্যয়গুলি কোনও বার্তা প্রক্রিয়াকরণের ব্যয়কে পুরোপুরি সোয়াম করে দেবে। এটি অকাল অপটিমাইজেশন এড়ানোর একটি মামলা।


সংক্ষেপে, ইভেন্টগুলি আলগাভাবে মিলিত সফ্টওয়্যার তৈরির দুর্দান্ত উপায়, তবে সেগুলি ব্যয় ছাড়া হয় না। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনের প্রতিটি ফাংশন কলকে ইভেন্টের সাথে প্রতিস্থাপন করা এটি একটি ভুল হবে । অর্থবহ স্থাপত্য বিভাগ তৈরি করতে ইভেন্টগুলি ব্যবহার করুন।


2
এই উত্তরটি 5377 এর উত্তর হিসাবে একই বলে যা আমি সঠিক হিসাবে নির্বাচন করেছি; আমি এটিকে চিহ্নিত করতে আমার নির্বাচনটি পরিবর্তন করছি কারণ এটি আরও বিস্তৃত।
ভিজিয়োনারি

1
গতি কি ইভেন্ট-চালিত কোডের একটি উল্লেখযোগ্য অসুবিধা? মনে হতে পারে এটি হতে পারে, তবে আমি বেশ জানি না।
raptortech97

1
@ raptortech97 এটি অবশ্যই হতে পারে। কোডের জন্য যা বিশেষভাবে দ্রুত হওয়া দরকার, আপনি সম্ভবত কোনও অভ্যন্তরীণ লুপে ইভেন্টগুলি প্রেরণ এড়াতে চান; ভাগ্যক্রমে, এ জাতীয় পরিস্থিতিতে আপনার যা করা উচিত তা সাধারণত ভালভাবে সংজ্ঞায়িত করা হয়, সুতরাং আপনার কোনও অতিরিক্ত নমনীয় ইভেন্টগুলির প্রয়োজন নেই (বা প্রকাশ / সাবস্ক্রাইব বা পর্যবেক্ষক, যা বিভিন্ন পরিভাষার সমতুল্য প্রক্রিয়া)।
জুলাইস

1
আরও মনে রাখবেন যে অভিনেতা মডেলকে ঘিরে এমন কয়েকটি ভাষা (উদাহরণস্বরূপ এরলং) নির্মিত হয়েছে যেখানে সমস্ত কিছু বার্তা (ইভেন্ট)। এক্ষেত্রে সংকলক সিদ্ধান্ত নিতে পারে যে বার্তা / ইভেন্টগুলি সরাসরি ফাংশন কল হিসাবে বা যোগাযোগ হিসাবে প্রয়োগ করা যায়।
ব্রেন্ডন

1
"পারফরম্যান্স" এর জন্য আমি মনে করি আমাদের একক থ্রেডেড পারফরম্যান্স এবং স্কেলিবিলিটির মধ্যে পার্থক্য করতে হবে। একক থ্রেডেড পারফরম্যান্সের জন্য বার্তাগুলি / ইভেন্টগুলি আরও খারাপ হতে পারে (তবে শূন্যের অতিরিক্ত ব্যয়ের জন্য ফাংশন কলগুলিতে রূপান্তরিত হতে পারে এবং আরও খারাপ হতে পারে না), এবং স্কেলিবিলিটির জন্য এটি কার্যত প্রতিটি উপায়েই উন্নততর (উদাহরণস্বরূপ আধুনিক মাল্টিতে ব্যাপক পারফরম্যান্স উন্নতির ফলস্বরূপ -সিপিইউ এবং ভবিষ্যতে "বহু-সিপিইউ" সিস্টেম)।
ব্রেন্ডন

25

ইভেন্ট-ভিত্তিক প্রোগ্রামিং ব্যবহৃত হয় যখন প্রোগ্রামটি সম্পাদিত ইভেন্টগুলির ক্রম নিয়ন্ত্রণ করে না। পরিবর্তে, প্রোগ্রাম প্রবাহটি বাইরের প্রক্রিয়া যেমন ব্যবহারকারী (যেমন GUI), অন্য সিস্টেম (যেমন ক্লায়েন্ট / সার্ভার), বা অন্য কোনও প্রক্রিয়া (যেমন RPC) দ্বারা পরিচালিত হয়।

উদাহরণস্বরূপ, একটি ব্যাচ প্রসেসিং স্ক্রিপ্ট জানে এটির কী প্রয়োজন তা কেবল এটি করে। এটা না ঘটনা-ভিত্তিক।

একটি শব্দ প্রসেসর সেখানে বসে এবং ব্যবহারকারী টাইপ শুরু করার জন্য অপেক্ষা করে। কীপ্রেসগুলি এমন ঘটনা যা অভ্যন্তরীণ ডকুমেন্ট বাফার আপডেট করার জন্য কার্যকারিতা ট্রিগার করে trigger আপনি কী টাইপ করতে চান তা প্রোগ্রামটি জানতে পারে না, তাই এটি ইভেন্ট-চালিত হওয়া আবশ্যক।

বেশিরভাগ জিইআইআই প্রোগ্রাম ইভেন্ট-চালিত কারণ তারা ব্যবহারকারীর মিথস্ক্রিয়াকে ঘিরে তৈরি করা হয়। তবে ইভেন্ট ভিত্তিক প্রোগ্রামগুলি জিইউআই-তে সীমাবদ্ধ নয়, এটি বেশিরভাগ মানুষের কাছে সর্বাধিক পরিচিত উদাহরণ। ওয়েব সার্ভারগুলি ক্লায়েন্টদের অনুরূপ আইডিয়ামটি সংযুক্ত হওয়ার এবং অনুসরণ করার জন্য অপেক্ষা করে। আপনার কম্পিউটারে পটভূমি প্রক্রিয়াগুলি ইভেন্টগুলিতেও প্রতিক্রিয়া জানাতে পারে। উদাহরণস্বরূপ, কোনও অন-ডিমান্ড ভাইরাস স্ক্যানার নতুন তৈরি হওয়া বা আপডেট হওয়া ফাইল সম্পর্কিত ওএসের কাছ থেকে কোনও ইভেন্ট পেতে পারে, তারপরে ভাইরাসগুলির জন্য সেই ফাইলটি স্ক্যান করে।


18

ইভেন্ট-ভিত্তিক অ্যাপ্লিকেশনটিতে ইভেন্ট শ্রোতার ধারণা আপনাকে আরও বেশি লুজলি কাপল্ড অ্যাপ্লিকেশন লেখার ক্ষমতা দেয় ।

উদাহরণস্বরূপ কোনও তৃতীয় পক্ষের মডিউল বা প্লাগ-ইন ডাটাবেস থেকে একটি রেকর্ড মুছে ফেলতে পারে এবং তারপরে receordDeletedইভেন্টটি ট্রিগার করতে পারে এবং বাকী ইভেন্ট শ্রোতাদের কাছে তাদের কাজটি করতে দেয়। সবকিছু সূক্ষ্মভাবে কাজ করবে, যদিও ট্রিগার মডিউলটিও জানে না যে এই নির্দিষ্ট ইভেন্টের জন্য কে শুনছে বা তারপরে কী ঘটবে।


6

একটি সহজ উপমা আমি যুক্ত করতে চেয়েছিলাম যা আমাকে সহায়তা করেছিল:

আপনার অ্যাপ্লিকেশনটির উপাদানগুলি (বা অবজেক্টস) ফেসবুক বন্ধুদের একটি বড় গ্রুপ হিসাবে ভাবেন।

যখন আপনার কোনও বন্ধু আপনাকে কিছু বলতে চায়, তারা হয় আপনাকে সরাসরি কল করতে বা তাদের ফেসবুকের দেয়ালে পোস্ট করতে পারে। যখন তারা এটা তাদের ফেসবুক পোস্ট, তারপর যে কেউ করতে পারে তা দেখতে এবং এটি প্রতিক্রিয়া কিন্তু মানুষের অনেক না। কখনও কখনও এটি গুরুত্বপূর্ণ এমন কিছু বিষয় যা সম্ভবত লোকেরা এটির প্রতিক্রিয়া দেখাবে, যেমন "আমাদের একটি শিশু হচ্ছে!" বা "তাই-ও-তাই-ব্যান্ড ড্রঙ্কিন 'ক্ল্যাম বারে একটি চমকপ্রদ কনসার্ট করছে!"। শেষ ক্ষেত্রে, তারপরে বাকি বন্ধুদের সম্ভবত এটিতে প্রতিক্রিয়া দেখাতে হবে, বিশেষত যদি তারা সেই ব্যান্ডটিতে আগ্রহী হয়।

যদি আপনার বন্ধুটি আপনার এবং তাদের মধ্যে কোনও গোপনীয়তা রাখতে চায়, তারা সম্ভবত এটি তাদের ফেসবুকের দেয়ালে পোস্ট করবেন না, তারা আপনাকে সরাসরি কল করে আপনাকে বলবে। এমন একটি দৃশ্যের চিত্র দিন যেখানে আপনি কোনও মেয়েকে বলেন যে আপনি তার সাথে একটি তারিখে রেস্তোঁরায় দেখা করতে চান। তাকে সরাসরি কল করতে এবং তাকে জিজ্ঞাসা করার পরিবর্তে, আপনার সমস্ত বন্ধুদের দেখার জন্য আপনি এটি আপনার ফেসবুক ওয়ালে পোস্ট করুন post এটি কাজ করে তবে আপনার যদি aর্ষা প্রাক্তন থাকে তবে সে তা দেখতে পারে এবং আপনার দিনটি নষ্ট করার জন্য রেস্তোঁরায় উপস্থিত হতে পারে।

কিছু বাস্তবায়নের জন্য ইভেন্ট শ্রোতাদের গঠনের বিষয়ে সিদ্ধান্ত নেওয়ার সময়, এই সাদৃশ্যটি সম্পর্কে ভাবুন। এই উপাদানটির কি কারও দেখার জন্য তাদের ব্যবসায়ের বাইরে রাখা দরকার? নাকি তাদের সরাসরি কাউকে কল করার দরকার আছে? জিনিসগুলি খুব সহজেই অগোছালো হয়ে উঠতে পারে তাই সাবধান হন।


0

এই নিম্নলিখিত উপমাটি আপনাকে ডক্টরের অভ্যর্থনা ডেস্কে অপেক্ষার লাইনের সমান্তরাল অঙ্কন করে ইভেন্ট চালিত আই / ও প্রোগ্রামিং বুঝতে সহায়তা করতে পারে।

আই / ওকে অবরুদ্ধ করার মতো, আপনি যদি কাতারে দাঁড়িয়ে থাকেন, অভ্যর্থনাবিদ আপনার সামনে একটি লোককে ফর্মটি পূরণ করতে বলে এবং সে শেষ না হওয়া পর্যন্ত অপেক্ষা করে। লোকটি তার ফর্মটি শেষ না হওয়া পর্যন্ত আপনাকে নিজের পালনের জন্য অপেক্ষা করতে হবে, এটি অবরুদ্ধ is

যদি একা লোকটি পূরণ করতে 3 মিনিট সময় নেয় তবে 10 তম লোকটিকে 30 মিনিট পর্যন্ত অপেক্ষা করতে হবে। এখন এই দশম ছেলের অপেক্ষার সময়টি হ্রাস করার জন্য সমাধানটি হবে, অভ্যর্থনাবাদীর সংখ্যা বৃদ্ধি, যা ব্যয়বহুল। প্রথাগত ওয়েব সার্ভারগুলিতে এটিই ঘটে। আপনি যদি কোনও ব্যবহারকারীর তথ্যের জন্য অনুরোধ করেন তবে পরবর্তী ব্যবহারকারীদের দ্বারা অনুরোধটি বর্তমান অপারেশন, ডাটাবেস থেকে আনার আগ পর্যন্ত অপেক্ষা করা উচিত। এটি 10 ​​তম অনুরোধের "প্রতিক্রিয়া সময়" বৃদ্ধি করে এবং নবম ব্যবহারকারীর জন্য এটি তাত্পর্যপূর্ণভাবে বৃদ্ধি পায়। Avoidতিহ্যবাহী এই ওয়েব সার্ভারগুলি প্রতিটি একক অনুরোধের জন্য থ্রেড তৈরি করে (সংবর্ধনাবাদীদের সংখ্যা বাড়ার সমতুল্য), যেমন, মূলত এটি প্রতিটি অনুরোধের জন্য সার্ভারের একটি অনুলিপি তৈরি করে যা প্রতিটি অনুরোধের জন্য অপারেটিং সিস্টেমের প্রয়োজন হবে কারণ সিপিইউ খরচ ব্যয় অন্তর অন্তর থ্রেড। অ্যাপ্লিকেশনটি স্কেল করতে,

ইভেন্ট চালিত : কাতারের "প্রতিক্রিয়া সময়" স্কেল করার জন্য অন্য পদ্ধতিটি ইভেন্ট চালিত পদ্ধতির দিকে যেতে হবে, যেখানে সারিতে থাকা লোকটির ফর্মটি হস্তান্তর করা হবে, পূরণ করতে এবং সম্পূর্ণরূপে ফিরে আসতে বলা হয়েছে। সুতরাং অভ্যর্থনাবিদ সর্বদা অনুরোধ নিতে পারেন। এটি শুরু থেকেই জাভাস্ক্রিপ্ট ঠিক একই কাজ করে চলেছে। ব্রাউজারে জাভাস্ক্রিপ্ট ব্যবহারকারী ক্লিক ইভেন্ট, স্ক্রোল, সোয়াইপ বা ডাটাবেস আনতে এবং এই জাতীয় প্রতিক্রিয়া জানায়। এটি সহজাতভাবে জাভাস্ক্রিপ্টে সম্ভব, কারণ জাভাস্ক্রিপ্ট প্রথম শ্রেণীর অবজেক্ট হিসাবে ফাংশনগুলি বিবেচনা করে এবং এগুলি অন্যান্য ফাংশনগুলিতে (কলব্যাক নামে পরিচিত) পরামিতি হিসাবে পাস করা যেতে পারে এবং নির্দিষ্ট কাজ শেষ করার জন্য ডাকা যেতে পারে। সার্ভারে ঠিক নোড.জেএস এটি করে। আপনি নোডের প্রসঙ্গে এখানে ইভেন্ট চালিত প্রোগ্রামিং এবং আই / ও ব্লক করা সম্পর্কে আরও তথ্য পেতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.