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