اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
در مقالهی قبل روش درست استفاده کردن از Binding را برای بهبود Performance، توضیح دادم. در این مقاله میخواهم در مورد ng-if و فرق آن با ng-show صحبت کنم و اینکه کدامیک Performance بهتری را برای AngularJS فراهم میکنند.
خوب؟ آیا عملکرد این دو کد با هم تفاوت دارد؟ جواب سؤال در ظاهر خیر هست. یعنی مانند کد بالایی، اگر has مقدار true داشته باشد، div نمایش داده میشود؛ در غیر اینصورت، خیر.
سوال سوم، پس اگر عملکرد یکسانی دارند، تفاوت آنها در چیست؟
سول اول، کار ng-show چیست؟
ng-show یکی از پر کاربردترین Directiveهای AngularJS است که وظیفهی Show و Hide قسمتی از Vew را به عهده دارد. به کد زیر توجه کنید:
<div ng-show="has"> <div ng-repeat="item in items"> <span>{{item.title}}</span> </div> </div>
در این کد ما از ng-show استفاده کردهایم. اگر has مقدار true داشته باشد div نمایش داده میشود و اگر false باشد، div نمایش داده نمیشود. در داخل div، لیستی وجود دارد که توسط ng-repeat تکرار شده و یک لیست ساده را درست میکند.
سول دوم، کار ng-if چیست؟
کد بالا را دوباره تکرار میکنیم. ولی با این تفاوت که اینبار بجای ng-show از ng-if استفاده خواهیم کرد:
<div ng-if="has"> <div ng-repeat="item in items"> <span>{{item.title}}</span> </div> </div>
سوال سوم، پس اگر عملکرد یکسانی دارند، تفاوت آنها در چیست؟
تفاوت این دو Directive در Performance هست. اجازه دهید بیشتر توضیح دهم. ng-show اگر مقدار false دریافت کند، tag مورد نظر را نمایش نمیدهد؛ ولی تگهای داخلی آن توسط AngularJS پردازش میشوند. یعنی چه ng-show مقدار true بگیرید و یا false، لیست داخل tag، توسط AngularJS پردازش و Render میشود. ولی در ظاهر ما در View چیزی را نمیبینیم. ng-if بر حسب مقادیری که دریافت میکند، میتواند به بالا رفتن Performance AngularJS کمک کند. فرض کنید ng-if مقدار false گرفته است؛ یعنی has مقدار false دارد. علاوه بر اینکه tag div نمایش داده نمیشود، بلکه داخل tag نیز پردازش نمیشود. یعنی لیستی که ما در کد نوشتهایم، به هیچ عنوان توسط AngularJS پردازش نخواهد شد که باعث میشود Watcher، کار کمتری انجام دهد. پس در نتیجه بهبودی را در کارآیی Rendering و Binding خواهیم داشت.