সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকোয়েস্ট ব্যবহার করার কোনও কারণ আছে কি?


88

দেখে মনে হচ্ছে বেশিরভাগই এক্সএমএলএইচটিপিআরকুয়েস্টের সাথে অ্যাসিঙ্ক্রোনাস অনুরোধ করে তবে স্পষ্টতই যে সিঙ্ক্রোনাস অনুরোধগুলি করার ক্ষমতা রয়েছে তা ইঙ্গিত দেয় যে এটি করার উপযুক্ত কারণ থাকতে পারে। সুতরাং যে বৈধ কারণ হতে পারে?


4
এটি একটি খুব ভাল প্রশ্ন! আমি মনে করি না উত্তরটি খুব আকর্ষণীয় হবে তবে তবুও দুর্দান্ত প্রশ্ন। কি ঘটবে তা দেখার জন্য আপনি কি একটি সিঙ্ক্রোনাস কল চেষ্টা করেছেন?
তাদ দোনাগে

4
সিঙ্ক্রোনাস কলগুলি ব্রাউজারটিকে অবরুদ্ধ করে দেয় যা একটি ভয়াবহ ব্যবহারকারীর অভিজ্ঞতার দিকে পরিচালিত করে। এইভাবে আমার প্রশ্ন। এটি ব্যবহারের কোনও ভাল কারণ আমি ভাবতে পারি না।
ড্যারেল ব্রোগডন

4
আধা-গুরুতর উত্তর: সম্ভবত আপনি যে জাভাস্ক্রিপ্ট বইটি পড়ছেন তাতে অ্যাসিনক্রোনাস অনুরোধের আগে উপস্থিত অধ্যায়টি পূরণ করতে পারেন।
বেন জেমস

ব্যক্তিগতভাবে, আমি প্রতিটি কলের জন্য একটি অনুরোধ না লিখে সার্ভারসাইড ফাংশনে একাধিক কল মোড়ানোর জন্য কিছু সিঙ্ক্রোনাস এজ্যাক্স ব্যবহার করতে চাই।
পল ইশাক

স্থানীয়ভাবে চলমান কোড, বিশেষত অভ্যন্তরীণ দেব ফ্রেমওয়ার্ক এবং সরঞ্জামগুলির জন্য।
ব্যবহারকারী 2800679

উত্তর:


26

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


16
আমি ধরে নিয়েছি তার অর্থ 'ওয়েব ওয়ার্কার্স'
দুষ্টু

আমি মনে করি পাতিত পয়েন্ট। ইউআই থ্রেডে, একটি থ্রেড বা প্রকারের একটি অ্যাসিঙ্ক টাস্ক তৈরি করুন। যদি থ্রেডটিতে ইতিমধ্যে থাকে তবে বেশিরভাগ ক্ষেত্রে সিঙ্ক্রোনাইজড ব্যবহার করুন। থ্রেডগুলি আরও অনেকগুলি "ব্লক বান্ধব"
হ্যাএমইআরইডি

এটি একটি পুরানো উত্তর, তবে এই মন্তব্যটি তখনও প্রযোজ্য, এমনকি HTML5 এর আগেও, ব্রাউজারগুলি অনুরোধ করার জন্য 2 টি থ্রেড সরবরাহ করেছিল provided আমি উভয়কেই ব্যবহার করতে একটি সংযোগ পুলের স্ক্রিপ্ট লিখেছি, কারণ এমনকি একটি সংযোগের সাথে অ্যাসিঙ্ক অনুরোধ সহ, আপনি ব্রাউজারটি বেঁধে রাখতে পারেন। উভয়ের ব্যবহার করা আরও তথ্যকে লাইনের মাধ্যমে ধাক্কা / টানতে দেয়; তবে আমি মনে করি সিঙ্ক অনুরোধগুলি এখনও ব্রাউজারে আবদ্ধ।
ভোলআরন

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

4
-1। এটি কোনও উত্তরের মতো নয় এবং থ্রেডগুলি সম্পর্কে পুরো আলোচনাটি কেবল বিষয়টি বিভ্রান্ত করছে। সামির নীচের উত্তরটি আসলে আরও ভাল।
স্টিজন ডি উইট

30

সিঙ্ক্রোনাস এক্সএইচআরগুলি ব্যবহারকারীর ডেটা সংরক্ষণের জন্য দরকারী। আপনি যদি beforeunloadইভেন্টটি পরিচালনা করেন তবে ব্যবহারকারী পৃষ্ঠাটি বন্ধ করার সাথে সাথে আপনি সার্ভারে ডেটা আপলোড করতে পারেন।

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


4
সম্পাদিত: আমি বুঝতে পেরেছি যে আপনি অলস এইচএন ব্যবহারকারীর কাছ থেকে কেবলমাত্র টেক্সট ডাম্প করছেন, তবে এটি সুন্দরভাবে বাক্যে লেখার ক্ষেত্রে কিছুটা সময় এসও-তে প্রশংসা করা হয়েছে।
ফ্রাঙ্ক ক্রুয়েগার 4'11

তবে বাস্তবে এটিই এখন পর্যন্ত আমি দেখলাম valid
স্টিজন ডি উইট

@ ফ্র্যাঙ্ক ক্রুয়েগার এইচএন কী?
ডগলাস অনুষ্ঠিত

4
@ ডগলাসহেল্ড একটি ওয়েবসাইট নিউজ.ইকম্বিনেটর.কম এ হ্যাকার নিউজ নামে পরিচিত
সামি সামহুরি

13

হালনাগাদ:

নীচের দিকে ইঙ্গিত করা হয়েছিল - তবে বিতরণে ব্যর্থ হয়েছিল - উন্নত অ্যাসিনক্রোনাস অনুরোধ হ্যান্ডলিংয়ের আবির্ভাবের সাথে সিঙ্ক্রোনাস অনুরোধগুলি ব্যবহার করার সত্যিই কোন কারণ নেই, যদি না কোনও অনুরোধ সম্পূর্ণ না হওয়া পর্যন্ত উদ্দেশ্যমূলকভাবে ব্যবহারকারীদের কিছু করা থেকে বিরত না করা - দূষিত মনে হয়: )

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

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

মোজিলা ডক্সে যেমন বলা আছে সেখানে এমন কিছু মামলা রয়েছে যেখানে আপনাকে সিঙ্ক্রোনাস অনুরোধগুলি ব্যবহার করতে হবে; যাইহোক, এছাড়াও তালিকাভুক্ত হ'ল একটি কাজ যা এই জাতীয় ক্ষেত্রে বীকন ব্যবহার করে (আইই / সাফারি তে উপলব্ধ নয়)। এটি পরীক্ষামূলক হলেও এটি যদি মান-গ্রহণযোগ্যতায় পৌঁছে যায় তবে এটি সম্ভবত সিঙ্ক্রোনাস-অনুরোধ কফিনে একটি পেরেক লাগিয়ে দিতে পারে।


আপনি যেকোন ধরণের লেনদেনের মতো প্রক্রিয়াজাতকরণ বা যেখানেই কোনও ক্রমের ক্রম প্রয়োজন সেখানে সিঙ্ক্রোনাস কল করতে চান।

উদাহরণস্বরূপ, ধরা যাক আপনি একটি গান বাজানোর পরে আপনাকে লগ আউট করতে একটি ইভেন্ট কাস্টমাইজ করতে চান। যদি প্রথমে লগআউট অপারেশন হয় তবে গানটি আর বাজবে না। এর জন্য অনুরোধগুলি সিঙ্ক্রোনাইজ করা দরকার।

অন্য কোনও কারণ হ'ল কোনও ওয়েব সার্ভিসের সাথে কাজ করার সময়, বিশেষত সার্ভারে গণিত করার সময়।

উদাহরণ: সার্ভারের 1 এর মান সহ একটি পরিবর্তনশীল রয়েছে।

 Step (1) Perform Update: add 1 to variable
 Step (2) Perform Update: set variable to the power of 3
 End Value: variable equals 8

পদক্ষেপ (2) যদি প্রথম দেখা দেয় তবে শেষের মানটি 2 নয়, 8 হয়; এইভাবে অপারেশন সম্পর্কিত ক্রম এবং সিঙ্ক্রোনাইজেশন প্রয়োজন।


খুব অল্প সময় এসেছে যে একটি সিঙ্ক্রোনাস কলটি সাধারণ বাস্তব বিশ্বের উদাহরণে ন্যায়সঙ্গত হতে পারে। লগইন ক্লিক করার সময় এবং তারপরে সাইটের কোনও অংশে ক্লিক করার সময় কোনও ব্যবহারকারীকে লগ ইন করার প্রয়োজন হয়।

অন্যরা যেমন বলেছে, এটি আপনার ব্রাউজারটি বেঁধে রাখবে, তাই আপনি যেখানে পারেন সেখানে থেকে দূরে থাকুন।

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


4
আমি মনে করি এটি আসল উত্তর হওয়া উচিত

4
@ জ্যাক: এটি একটি ভাল উদাহরণ, তবে আপনি সম্ভবত যে ইভেন্টটি কল করছেন তার উপর নির্ভর করে অ্যাসিক্রোনাস কলগুলির সাথে একই কাজ করতে পারেন।
ভোলআরন

4
+1 একটি বৈধ কেস রয়েছে যে লজিক্যাল রেসের শর্তগুলি অ্যাসিঙ্ক্রোনাস সার্ভার অনুরোধের ফলে আসতে পারে ... তবে, সমাধানটি সিঙ্ক্রোনসিটি হওয়ার দরকার নেই। আপনার অনুরোধগুলি যদি কোনও ওয়েব কর্মী দ্বারা পরিচালিত না করা হয়, তবে ট্রান্সপোর্ট লেয়ারটি রচনা করা ভাল যা অনুরোধগুলির সংখ্যা এবং তারপরে অনুরোধ আইডির ক্রিয়াকলাপ পরিচালনা করা হয় তা নিশ্চিত করা উচিত।
রায় টিঙ্কার

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

4
@ ম্যাথিউ: এটি কেবল সত্য যদি আপনার লেনদেনের মতো প্রক্রিয়া এর আগে কর্মের ফলাফলের উপর নির্ভর করে। আপনার যদি এমন একটি বোতাম থাকে যা আপনার পৃষ্ঠায় একটি নতুন অবজেক্ট (সার্ভার থেকে পুনরুদ্ধার করা) তৈরি করে; যদি এটি অ্যাসিঙ্ক্রোনাস হয় ব্যবহারকারী সম্ভবত একাধিকবার ক্লিক করতে পারে এবং অনেকগুলি বস্তু ফিরিয়ে দিতে পারে। একটি সিঙ্ক্রোনাস কলটি প্রতিরোধ করে এবং প্রথমটি শেষ হয়ে গেলেই অন্য কোনও নতুন অবজেক্ট তৈরি করার অনুমতি দেয়, তা যদি ভুল না হয় তবে তা নির্বিশেষে। দয়া করে শব্দের প্রতি মনোযোগ দিন, আমি এটিকে লেনদেনের মতো করেছিলাম এবং উদ্দেশ্য করে লেনদেন নয় ।
vol7ron

8

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

যদি অনুরোধগুলির সিরিয়ালাইজেশনটি আপনার লক্ষ্য হয়, তবে আপনার পূর্ববর্তী অনুরোধটির অনকম্পিউড কলব্যাকটি পরের লাইনে ফায়ার করে, এটি async অনুরোধগুলি ব্যবহার করে সম্পন্ন করা যায়।


4
হুম, আমি এতে একটি স্লাইডিং উইন্ডো যুক্ত করব, অন্যথায় আপনি প্রতিটি অনুরোধের জন্য মূলত রাউন্ড-ট্রিপ সময়টি হারাবেন
স্টিফান এগারমন্ট

8

এমন অনেক বাস্তব বিশ্বের কেস রয়েছে যেখানে ইউআইকে ব্লক করা হ'ল পছন্দসই আচরণ।

একাধিক ক্ষেত্র সহ একটি অ্যাপ্লিকেশন নিন এবং কিছু ক্ষেত্র অবশ্যই এই ক্ষেত্রের মান এবং অন্যান্য ক্ষেত্রের মানগুলিকে ইনপুট হিসাবে সরবরাহ করে এমন একটি রিমোট সার্ভারে এক্সএমএলএইচটিপি কল দ্বারা বৈধ হওয়া উচিত।

সিঙ্ক্রোনাস মোডে, যুক্তিটি সহজ, ব্যবহারকারী দ্বারা ব্লক করা অভিজ্ঞতা খুব সংক্ষিপ্ত এবং কোনও সমস্যা নেই।

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

মূলত প্রশ্নটি হল: আরও গুরুত্বপূর্ণ, অবরুদ্ধ UI অভিজ্ঞতা বা ডেটা দুর্নীতির ঝুঁকি কী? উত্তরটি অ্যাপ্লিকেশন বিকাশকারীর কাছে থাকা উচিত, ডাব্লু 3 সি এর সাথে নয়।


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

6

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

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

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


কোনও ক্রিয়া অন্য ক্রমের ফলাফলের উপর নির্ভর করে যে এই ক্রিয়াটি সিঙ্ক্রোনালিভাবে সম্পাদন করার কোনও কারণ নয়। কলিং ফাংশনটি শেষ হওয়ার আগে যদি কোনও ক্রিয়াকলাপের ফলাফলটি প্রক্রিয়াকরণ করা হয় তবেই আপনার একটি সিঙ্ক্রোনাস কল প্রয়োজন।
স্টিজন ডি উইট

5

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


এটি আসলে আমার নিজের মতো পরিস্থিতি এবং এটি ২০২০ এর মত। আমার কাছে একটি ডেস্কটপ অ্যাপ্লিকেশন রয়েছে যা এর ইউআইটি এইচটিটিপি এর মাধ্যমে প্রদর্শন করে যাতে আপনি এটি স্থানীয় মেশিনে বা এমনকি নেটওয়ার্ক জুড়ে চলমান ব্রাউজার থেকে অ্যাক্সেস করতে পারেন। এই পরিস্থিতিতে নেটওয়ার্কটি দ্রুত এবং নির্ভরযোগ্য তাই সিঙ্ক্রোনাস এক্সএইচআর অনুরোধগুলি করা কোডটি সহজ রাখার দুর্দান্ত উপায় a বেশিরভাগ লোকেরা বুঝতে পারেন না যে অ্যাসিঙ্ক এক্সএইচআর অনুরোধগুলি থ্রেড ব্যবহার করার মতো এবং এটি বাগের জন্য অনেক সুযোগের সাথে সত্যই জটিল হয়ে উঠতে পারে।
এরিক মুত্ত 11'20

4

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


3

কারণ:

ধরা যাক আপনার একটি এজ্যাক্স অ্যাপ্লিকেশন রয়েছে যা ব্যবহারকারীর কোনও ইন্টারঅ্যাকশন করার আগে সার্ভার থেকে বিভিন্ন ডেটা লোড করার জন্য অর্ধ ডজন HTTP করা দরকার।

অবশ্যই আপনি এটি লোড থেকে ট্রিগার করতে চান।

কোডটির সাথে কোনও সংযুক্ত জটিলতা ছাড়াই সিঙ্ক্রোনাস কলগুলি খুব ভালভাবে কাজ করে। এটা সহজ এবং সোজা।

খসড়া:

একমাত্র অপূর্ণতা হ'ল সমস্ত ডেটা লোড না হওয়া বা টাইমআউট না হওয়া পর্যন্ত আপনার ব্রাউজারটি লকআপ থাকে। প্রশ্নে থাকা এজাক্স অ্যাপ্লিকেশন হিসাবে, এটি খুব একটা সমস্যা নয় কারণ প্রাথমিকভাবে সমস্ত ডেটা লোড না করা পর্যন্ত অ্যাপ্লিকেশনটির কোনও ব্যবহার হয় না of

বিকল্প?

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

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

http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/# তম- ধারণা এটি- ওপেন-স্মৃতিশক্তি এটিকে দেখতে দেখতে দেয় (বিভাগ 4.7.3 দেখুন) ব্লকিং মোড ব্যবহার করার সময় আপনাকে সময়সীমা নির্ধারণের অনুমতি দেওয়া হবে না । আমার কাছে কাউন্টারটিকে স্বজ্ঞাত বলে মনে হচ্ছে: যখনই কেউ যুক্তিসঙ্গত সময়সীমা নির্ধারণের জন্য আইওকে ব্লক করে না, তবে আইওকে ব্লক করার অনুমতি দেওয়া হলেও কোনও ব্যবহারকারী নির্দিষ্ট সময়সীমার সাথে নয়?

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

এই ক্ষেত্রে অবশ্যই সমতুল্য ফাংশনটি অ্যাসিনক্রোনাস এইচটিসি ব্যবহার করে প্রাপ্ত করা যেতে পারে, তবে কোন ধরণের মূর্খ রুটিনের প্রয়োজন?

আমার ধারণা আমি এই লাইনের সাথে কিছু চেষ্টা করব:

ডকুমেন্ট লোডে, নিম্নলিখিতটি করুন: 1: 6 টি গ্লোবাল "সম্পন্ন" ফ্ল্যাগ ভেরিয়েবল সেট আপ করুন, শুরুতে 0 এ শুরু করুন 2 2: সমস্ত 6 ব্যাকগ্রাউন্ড পেয়েছে কার্যকর করুন (ধরে নিলেন অর্ডারটি কোনও ব্যাপার নয়)

তারপরে, http টি HTTP get এর প্রত্যেকটির জন্য সম্পূর্ণ কলব্যাকগুলি তাদের নিজ নিজ "সম্পন্ন" পতাকা সেট করবে। এছাড়াও, প্রতিটি কলব্যাক অন্যান্য 6 টি এইচটিটিপি সম্পন্ন হয়েছে কিনা তা দেখতে অন্যান্য সমস্ত সম্পন্ন পতাকাগুলি পরীক্ষা করে দেখবে। শেষের কলব্যাকটি শেষ হওয়ার পরে, অন্য সমস্ত কিছুর কাজ শেষ হয়ে গেছে দেখে রিয়েল আরআর ফাংশনটি কল করবে যা তখন সমস্ত কিছু সেট আপ করে দেবে, এখন তথ্যটি সমস্ত তথ্য আনা হয়েছে।

যদি আনার ক্রমটি বিবেচিত হয় - বা যদি ওয়েবসারভার একই সাথে একাধিক অনুরোধগুলি গ্রহণ করতে অক্ষম হয় - তবে আপনার এই জাতীয় কিছু দরকার হবে:

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


2

আপনি যদি প্রোডাকশন কোডে সিঙ্ক্রোনাস কল করেন তবে কী হবে?

আকাশ নিচে পড়েছে।

কোনও গুরুত্ব সহকারে, ব্যবহারকারী একটি লকড ব্রাউজার পছন্দ করেন না।


4
প্রশ্নটি "XMLHTTPREQUEST এর সাথে এটি করুন কেন" "কেন সিঙ্ক কল করবেন বা করবেন না"
Itay Moav -Malimovka

4
আপনি যদি যুক্তিসঙ্গত সময়সীমা যুক্ত করেন তবে সমস্যা হওয়া উচিত নয়।
গ্রেগ

4
তিনি সিঙ্ক কলগুলির কেসগুলি ব্যবহারের জন্য জিজ্ঞাসা করেছেন ... তাদের ডাউনসাইডের জন্য নয় (আমরা এখনই এগুলি জানি))
স্টিজন ডি উইট

কি ব্যবহারকারী? সব ব্যবহারকারী কি একই রকম? ইঞ্জিনিয়াররা কীভাবে স্থানীয়ভাবে পরীক্ষা করছেন? ... তাই খুব অল্প ব্যবধানে ফাইল সিস্টেমের ফাইল অ্যাক্সেস করা ????
ব্যবহারকারী 2800679

2

আমি ব্যবহারকারীর নামটি যাচাই করতে ব্যবহার করি, চেক চলাকালীন যে ব্যবহারকারীর নামটি ইতিমধ্যে বিদ্যমান নেই।

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

যেহেতু ফাংশনটি ফিরতে হবে, আমি অ্যাসিনক্রোনাস কৌশলগুলি ব্যবহার করতে পারি না, তাই আমি কেবল এটি সংকালিক করে তুলি এবং আশা করি যে সার্ভারটি তাত্ক্ষণিকভাবে যথেষ্ট উত্তর দেবে না এমন উত্তর দেবে। আমি যদি একটি এজেএক্স কলব্যাক ব্যবহার করি তবে আমাকে অন্যান্য কার্যকরকরণের পদ্ধতিগুলির চেয়ে পৃথক সম্পাদনটি পরিচালনা করতে হবে।


এই জাতীয় দৃশ্যের একটি কৌশলটি বৈধতা ফাংশনটিকে কেবল একটি পতাকা পরীক্ষা করতে দেওয়া (যা শুরু হয় false) এবং যখন সার্ভার প্রতিক্রিয়া জানায় তখন সত্য বা মিথ্যাতে সেট করে। ক্ষেত্রটি অন্বেষণ করে আপনি পতাকাটি পুনরায় সেট করেন এবং আবার সার্ভারকে কল করেন।
স্টিজন ডি উইট

2

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

এই পদ্ধতির সমস্যাটি হ'ল ক্রিয়া শেষ না হওয়া পর্যন্ত আপনি ব্যবহারকারীর ব্রাউজারটিকে "ব্লক" করুন (যতক্ষণ না অনুরোধটি ফিরে না আসা, শেষ, বোঝা ইত্যাদি) না হয়। তাই এটি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন।


প্রশ্নটি "XMLHTTPREQUEST এর সাথে এটি করুন কেন" "কেন সিঙ্ক কল করবেন না"
Itay Moav -Malimovka

লেখক নিজেই বলেছেন " সিঙ্ক্রোনাস কলগুলি ব্রাউজারটিকে অবরুদ্ধ করে দেয় যা একটি ভয়াবহ ব্যবহারকারীর অভিজ্ঞতার দিকে পরিচালিত করে।" একটি মন্তব্যে, সুতরাং এই থ্রেডের প্রত্যেকে "সিঙ্ক্রোনাস কল" পদ্ধতির জন্য আবেদন করেছিল। আপনি সত্যই যদি লেখক বলতে চেয়েছিলেন তা বলতে না পারলে আপনি কেন এই প্রশ্নের আক্ষরিক বোঝাপড়া গ্রহণ করলেন?
GmonC

2

কোড বিকাশ করার সময় আমি সিঙ্ক্রোনাস কলগুলি ব্যবহার করি- অনুরোধটি সার্ভারের কাছে এবং আসার সময় আপনি যা কিছু করেছিলেন ত্রুটির কারণকে অস্পষ্ট করতে পারেন।

যখন এটি কাজ করছে, আমি এটিকে অবিচ্ছিন্ন করে তুলি, তবে আমি কোনও অ্যাওর্ট টাইমার এবং ব্যর্থতা কলব্যাকগুলি অন্তর্ভুক্ত করার চেষ্টা করি, কারণ আপনি কখনই জানেন না ...


2

এসওয়াইএনসি বনাম এএসআইএনসি: পার্থক্য কী?

মূলত এটি এ পর্যন্ত ফোটে:

console.info('Hello, World!');
doSomething(function handleResult(result) {
    console.info('Got result!');
});
console.info('Goodbye cruel world!');

সিঙ্ক্রোনাস কখন doSomethingএটি মুদ্রণ করবে:

Hello, World!
Got result!
Goodbye cruel world!

বিপরীতে, যদি অ্যাসিনক্রোনাসdoSomething হয় তবে এটি মুদ্রণ করবে:

Hello, World!
Goodbye cruel world!
Got result!

যেহেতু ফাংশনটি doSomethingএটি অবিচ্ছিন্নভাবে কাজ করছে, কাজ শেষ হওয়ার আগেই এটি ফিরে আসে। সুতরাং আমরা কেবল মুদ্রণের পরে ফলাফল পেতেGoodbye cruel world!

যদি আমরা একটি অ্যাসিঞ্চ কলের ফলাফলের উপর নির্ভর করে, আমাদের কলব্যাকের মধ্যে নির্ভরশীল কোডটি রাখা দরকার:

console.info('Hello, World!');
doSomething(function handleResult(result) {
    console.info('Got result!');
    if (result === 'good') {
        console.info('I feel great!');
    }
    else {
        console.info('Goodbye cruel world!');
    }
});

তেমনি, কেবল 2 বা তিনটি জিনিস ক্রমযুক্ত হওয়া দরকার তা এগুলি সিঙ্ক্রোনিকভাবে করার কোনও কারণ নয় (যদিও সিঙ্ক কোডটি বেশিরভাগ লোকের সাথে কাজ করা সহজ)।

কেন সাইনক্রোনোনস এক্সএমএলএইচটিপিআরইকিউস্ট ব্যবহার করবেন?

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

function lives(name) {
    return (name !== 'Elvis');
}
console.info('Elvis ' + (lives('Elvis') ? 'lives!' : 'has left the building...');

মনে করুন কলিং কোড ( console.infoলাইন) এর উপরে আমাদের কোনও নিয়ন্ত্রণ নেই livesএবং সার্ভারকে জিজ্ঞাসা করার জন্য আমাদের ফাংশনটি পরিবর্তন করতে হবে ... সার্ভারের মধ্যে আমরা কোনও এ্যাসিঙ্ক অনুরোধ করতে পারি না livesএবং এখনও livesসম্পূর্ণ হওয়ার আগে আমাদের প্রতিক্রিয়া রয়েছে । সুতরাং আমরা কিনা ফিরতে জানতাম না trueবাfalse । ফাংশনটি শেষ হওয়ার আগে ফলাফল পাওয়ার একমাত্র উপায় হ'ল সিঙ্ক্রোনাস অনুরোধ করা।

Sami Samhuriতাঁর উত্তরে যেমন উল্লেখ করা হয়েছে, এমন একটি বাস্তব পরিস্থিতি যেখানে আপনার ফাংশনটি শেষ হওয়ার আগে আপনার সার্ভারের অনুরোধের জবাব প্রয়োজন হতে পারে তা হ'ল onbeforeunloadএটি আপনার অ্যাপ্লিকেশন থেকে শেষ ফাংশন যা উইন্ডোটি বন্ধ হওয়ার আগে কখনও চলবে।

আমি সংযুক্তি কল করার দরকার নেই, তবে আমি তাদের যে কোনও উপায়েই সহজেই ব্যবহার করি

দয়া করে না। সিঙ্ক্রোনাস কলগুলি আপনার ব্রাউজারটিকে লক করে রাখে এবং অ্যাপটিকে প্রতিক্রিয়াহীন মনে করে। তবে আপনি ঠিক বলেছেন। অ্যাসিঙ্ক কোডটি আরও শক্ত। এটির সাথে কাজ করার উপায়টি আরও সহজ। সিঙ্ক কোডের মতো সহজ নয়, তবে এটি কাছে আসছে: প্রতিশ্রুতি এস।

এখানে একটি উদাহরণ রয়েছে: তৃতীয় বিভাগের কোডটি চলার আগে দুটি অ্যাসিঞ্চ কল দুটিই সাফল্যের সাথে শেষ করা উচিত:

var carRented = rentCar().then(function(car){
  gasStation.refuel(car);
});

var hotelBooked = bookHotel().then(function(reservation) {
  reservation.confirm();
});

Promise.all([carRented, hotelBooked]).then(function(){
  // At this point our car is rented and our hotel booked.
  goOnHoliday();
});

এখানে আপনি কীভাবে প্রয়োগ করবেন bookHotel:

function bookHotel() {
  return new Promise(function(resolve, reject){
    if (roomsAvailable()) {
      var reservation = reserveRoom();
      resolve(reservation);
    }
    else {
      reject(new Error('Could not book a reservation. No rooms available.'));
    }
  });
}

আরও দেখুন: প্রতিশ্রুতি সহ আরও ভাল জাভাস্ক্রিপ্ট লিখুন


4
"দয়া করে করবেন না Sy সিঙ্ক্রোনাস কলগুলি আপনার ব্রাউজারটিকে লক করে রাখে এবং অ্যাপটিকে প্রতিক্রিয়াহীন মনে করে" এটি সর্বদা সমস্যা নয়। কল্পনা করুন যে আপনি লোকালহোস্ট পরীক্ষা করছেন, এবং আপনি একজন দেব।
ব্যবহারকারী 2800679

2

XMLHttpRequesttraditionতিহ্যগতভাবে অ্যাসিনক্রোনাস অনুরোধগুলির জন্য ব্যবহৃত হয়। কখনও কখনও (ডিবাগিং, বা নির্দিষ্ট ব্যবসায়িক যুক্তির জন্য) আপনি এক পৃষ্ঠায় সমস্ত / বেশ কয়েকটি এসাইক কলগুলি সিঙ্ক করতে পরিবর্তন করতে চান।

আপনি আপনার জেএস কোডের সবকিছু পরিবর্তন না করে এটি করতে চান। অ্যাসিঙ্ক / সিঙ্ক পতাকাটি আপনাকে সেই ক্ষমতা দেয় এবং সঠিকভাবে নকশা করা হলে, আপনার কোডে কেবল একটি লাইন পরিবর্তন করতে হবে / varসম্পাদনের সময় কোনওটির মান পরিবর্তন করতে হবে ।


1

ফায়ারফক্স (এবং সম্ভাব্য সমস্ত নন-আইই ব্রাউজারগুলি) অ্যাসিঙ্ক এক্সএইচআর টাইমআউট সমর্থন করে না।

  1. স্টকওভারফ্লো আলোচনা
  2. মজিলা ফায়ারফক্স এক্সএমএল এইচটিপিআরকেয়েস্ট

এইচটিএমএল 5 ওয়েব ওয়ার্কার্স সময়সীমা সমর্থন করে। সুতরাং, আপনি সময়সীমা আচরণের সাথে অ্যাসিঙ্ক-এর মতো এক্সএইচআর বাস্তবায়নের জন্য টাইমআউট সহ ওয়েব ওয়ার্কারকে সিঙ্ক এক্সএইচআর অনুরোধটি মোড়তে চাইতে পারেন।


1

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


1

সিঙ্ক্রোনাস এইচটিটিপি অনুরোধগুলি ব্যবহার করা মোবাইল বিজ্ঞাপন ব্যবসায়ে একটি সাধারণ অভ্যাস।

অ্যাপ্লিকেশন তৈরি করা সংস্থাগুলি (ওরফে "প্রকাশক") প্রায়শই রাজস্ব আয় করতে বিজ্ঞাপন চালায়। এর জন্য তারা তাদের অ্যাপে বিজ্ঞাপন এসডিকে ইনস্টল করে। অনেকগুলি বিদ্যমান (মোপাব, ওগুরি, ট্যাপজব, অ্যাপনেক্সট, গুগল অ্যাডস অ্যাডমব)।

এই এসডিকে ওয়েব ভিউতে বিজ্ঞাপন দেওয়া হবে।

কোনও ব্যবহারকারীর কাছে বিজ্ঞাপন সরবরাহ করার সময়, এটি বিশেষত স্মুথ অভিজ্ঞতা হতে হবে কোনও ভিডিও প্লে করার সময়। কোনও মুহুর্তে কোনও বাফারিং বা লোড হওয়া উচিত নয়।

এটি সমাধান করার precachingজন্য ব্যবহৃত হয়। যেখানে মিডিয়া (ছবি / ভিডিও / ইত্যাদি) ওয়েব ভিউয়ের পটভূমিতে সিঙ্ক্রোনজ লোড করা হয়।

কেন এটি তাত্পর্যপূর্ণ নয়?

  1. এটি বিশ্বব্যাপী স্বীকৃত মানের অংশ
  2. onloadবিজ্ঞাপনটি কখন ব্যবহারকারীটির কাছে পরিবেশন করার জন্য "প্রস্তুত" হয় তা জানতে ইভেন্টটি শুনেছে SD

এর থামিয়ে দেওয়া সঙ্গে সমলয় XMLHttpRequests , বিজ্ঞাপন ব্যবসা সম্ভবত ভবিষ্যতে মান পরিবর্তন করতে যদি না অন্য উপায় নির্ধারণ করা যেতে পারে বাধ্য করা হবে না।


0

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

get draw() 
{
    if (!_draw)
    {
       let file;
       switch(config.option)
       {
           case 'svg':
              file = 'svgdraw.js';
              break;
           case 'canvas':
              file = 'canvasdraw.js';
              break;
           default:
              file = 'webgldraw.js';
       }

       var request = new XMLHttpRequest();
       request.open('GET', file, false);
       request.send(null);
       _draw = eval(request.responseText);
    }

    return _draw;
}

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

সুতরাং, আপনার কোডটি দেখতে এইরকম হতে পারে:

foo.drawLib.draw.something(); //loaded on demand

এটি এমন কোনও কিছুর একটি উদাহরণ যা সিএনএইচআর সিঙ্ক ছাড়াই করা অসম্ভব। আপনি এই লাইব্রেরিটি সামনের দিকে লোড করতে পারেন, হ্যাঁ, বা কোনও প্রতিশ্রুতি / কলব্যাক করতে পারেন, তবে আপনি সিএইচআর সিঙ্ক ছাড়াই সিঙ্ক্রোনালি লাইব লোড করতে পারেন না। এই ধরণের জিনিসটি আপনার কোড পরিষ্কার করতে পারে তা নিয়ে ভাবুন ...

সরঞ্জামকরণ এবং ফ্রেমওয়ার্ক (স্থানীয়ভাবে চলমান) এর জন্য আপনি এটি দিয়ে কী করতে পারেন তার সীমাবদ্ধতা কেবলমাত্র আপনার কল্পনা দ্বারা সীমাবদ্ধ। যদিও, এটি জাভাস্ক্রিপ্ট বিশ্বে কল্পনা কিছুটা সীমাবদ্ধ বলে মনে হচ্ছে।


-1

ভাল এখানে একটি ভাল কারণ। আমি তখন কোনও HTTP অনুরোধ করতে চেয়েছিলাম ফলাফলের উপর নির্ভর করে ইনপুট টাইপ = ফাইলটিতে কল ক্লিক () ( এটি অ্যাসিঙ্ক্রোনাস এক্সএইচআর বা আনার মাধ্যমে সম্ভব নয়। কলব্যাক প্রসঙ্গে "ব্যবহারকারী ক্রিয়া" হারায়, তাই কল ক্লিক () উপেক্ষা করা হবে। সিঙ্ক্রোনাস এক্সএইচআর আমার বেকন সংরক্ষণ করেছে।

onclick(event){
    //here I can, but I don't want to.
    //document.getElementById("myFileInput").click();
    fetch("Validate.aspx", { method : "POST", body: formData, credentials: "include" })
    .then((response)=>response.json())
    .then(function (validResult) {
        if (validResult.success) {
            //here, I can't.
            document.getElementById("myFileInput").click();
        }
    });
}

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