জটিল বিল্ডিং অ্যাপ্লিকেশনগুলির ক্ষেত্রে, আপনার পছন্দেরটিতে পারফরম্যান্সের প্রভাব রয়েছে কিনা তা সচেতন হন। এছাড়াও, আমি আরও প্রযুক্তিগত বিশদ সহ মার্ক উত্তরটি সম্পূর্ণ করতে চাই:
$ সময়সীমা (কলব্যাক) বর্তমান ডাইজেস্ট চক্রটি সম্পন্ন হওয়ার জন্য অপেক্ষা করবে (অর্থাত কৌণিক আপডেট সমস্ত মডেল এবং ডিওএম), তারপরে এটি তার $apply
কলব্যাকটি সম্পাদন করবে - সম্ভাব্য কৌণিক মডেলকে প্রভাবিত করবে - তারপরে মূল $ স্কোপটিতে একটি পূর্ণ প্রবর্তন করবে , এবং পুনর্নির্মাণ করবে সবকিছু।
$ অন্যদিকে, evalAsync (কলব্যাক) বর্তমান বা পরবর্তী ডাইজেস্ট চক্রটিতে কলব্যাক যোগ করবে। যার অর্থ যদি আপনি ডাইজেস্ট চক্রের মধ্যে থাকেন (উদাহরণস্বরূপ কোনও ng-click
নির্দেশিকা থেকে ডাকা কোনও ফাংশনে ), এটি কোনও কিছুর জন্য অপেক্ষা করবে না, কোডটি এখনই কার্যকর করা হবে। আপনি যদি অ্যাসিক্রোনাস কলের মধ্যে থাকেন তবে উদাহরণস্বরূপ একটি setTimeout
, একটি নতুন ডাইজেস্ট চক্র ( $apply
) ট্রিগার করা হবে।
সুতরাং পারফরম্যান্সের ক্ষেত্রে কল করা সর্বদা ভাল $evalAsync
, যদি না আপনার কোডটি কার্যকর করার আগে ভিউটি আপ টু ডেট থাকে, উদাহরণস্বরূপ যদি আপনাকে কিছু ডিওএম বৈশিষ্ট্যে যেমন অ্যালিমেন্টের প্রস্থ এবং এর মতো অ্যাকসেসের প্রয়োজন হয়।
যদি আপনি $ টাইমআউট, $ ইভালএেন্সেক, $ ডাইজেস্ট, $ প্রয়োগের মধ্যে পার্থক্য সম্পর্কে আরও বিশদ জানতে চান তবে আমি আপনাকে অন্য প্রশ্নটিতে আমার উত্তরটি পড়তে আমন্ত্রণ জানাচ্ছি: https://stackoverflow.com/a/23102223/1501926
ডকুমেন্টেশন পড়তে ভুলবেন না :
$ EvalAsync কখন এক্সপ্রেশনটি কার্যকর করা হবে তার কোনও গ্যারান্টি দেয় না, কেবলমাত্র:
- এটি মূল্যায়ন নির্ধারিত ফাংশনটির পরে কার্যকর করা হবে (সাধারণত ডম রেন্ডারিংয়ের আগে)।
- কমপক্ষে একটি $ ডাইজেস্ট চক্রটি এক্সপ্রেশন কার্যকর করার পরে সঞ্চালিত হবে।
দ্রষ্টব্য: যদি এই ফাংশনটিকে $ ডাইজেস্ট চক্রের বাইরে বলা হয় তবে একটি নতুন $ ডাইজেস্ট চক্র নির্ধারিত হবে । যাইহোক, সর্বদা কোড কল করতে উত্সাহিত করা হয় যা $ প্রয়োগ কলের মধ্যে থেকে মডেলটিকে পরিবর্তন করে। এর মধ্যে $ evalAsync- এর মাধ্যমে মূল্যায়নকৃত কোড অন্তর্ভুক্ত রয়েছে।