با پیشرفت HTML 5 و پدید آمدن چارچوبهای مختلف JavaScript توسعهی نرم افزارهای تک صفحه ای تحت وب (Single Page Applications) محبوب شده است.
اخیرا مطالب خوبی در رابطه با AngularJS در وبسایت جاری منتشر شده است. KnockoutJS توسط Microsoft معرفی شد و در قالب پیشفرض پروژههای SPA قرار گرفت ، بنابراین احتمالا این سوال برای افرادی مطرح شده است که تفاوت بین KnockoutJS و AngularJS چیست ؟
می توان پاسخ داد این مقایسه ممکن نیست.
KnockoutJS : یک پیاده سازی مستقل JavaScript از الگوی MVVM با امکانات Databinding میباشد. Knokcout یک کتابخانهی Databinding است نه یک کتاب خانهی SPA
AngularJS : طبق معرفی در این مطلب AngularJS فریم ورکی متن باز و نوشته شده به زبان جاوا اسکریپت است. هدف از به وجود آمدن این فریم ورک، توسعه هر چه سادهتر SPAها با الگوی طراحی MVC و تست پذیری هر چه آسانتر آنها است. این فریم ورک توسط یکی از محققان Google در سال 2009 به وجود آمد. بعدها این فریم ورک تحت مجوز MIT به صورت متن باز در آمد و اکنون گوگل آن را حمایت میکند و توسط هزاران توسعه دهنده در سرتاسر دنیا، توسعه داده میشود.
بنابراین شاید بهتر باشد ذکر شود AngularJS یک Presentation Framework مخصوص برنامههای وب تک صفحه ای میباشد در حالی که KnockoutJS کتاب خانه ای با تمرکز بر Databinding میباشد ، بنابراین مقایسهی اینها چندان صحیح نیست.
اگر قصد بر بررسی گزینههای دیگر در کنار Angular باشد ، میتوان از
Durandal نام برد. Durandal یک چارچوب SPA میباشد ، این چارچوب بر فراز jQuery ،
RequireJS و Knockout توسعه پیدا کرده است. (سابقا برای routing از SammyJS استفاده میکرد که در نسخههای اخیر از موتور خودش استفاده میکند.)
Durandal از Knockout جهت Databinding و از RequireJS برای مدیریت وابستگیها استفاده میکند.
Angular همهی امکانات بالا را مستقل پیاده سازی کرده و حتی نیازی به jQuery ندارد. اگر jQuery وجود داشته باشد Angular از آن استفاده میکند در غیر این صورت از jQuery Lite یا jqLite استفاده میکند. jqLite پیاده سازی توابع متداول jQuery برای دستکاری DOM میباشد. اطلاعات بیشتر در
اینجا
بنابراین با استفاده تنها از KnockoutJS نمیتوان یک برنامهی کامل SPA توسعه داد ، در کنار آن نیاز به کتابخانههای دیگری مثل jQuery برای مدیریت درخواستهای AJAX و استفاده از دیگر APIها ، Sammy برای routing و RequireJS برای مدیریت وابستگیها میباشد.
در Knockout و در نتیجه Durandal عمل Databinding به این صورت است :
// JavaScript
var vm = {
firstName = ko.observable('John')
};
ko.applyBindings(vm);
<!-- HTML -->
<input data-bind="value:firstName"/>
در Angular :
// JavaScript
// Inside of a personController
this.firstName = 'John';
<!-- HTML -->
<div ng-controller="personController as vm">
<input ng-model="vm.firstName"/>
</div>
اگر تنها نیاز به یک کتابخانهی Databinding باشد ، Knockout گزینهی مناسبی است ، به خوبی از عمل مقید سازی دادهها پشتیبانی میکند و Syntax خوش دستی دارد اما اگر نیاز به چارچوبی برای توسعهی پروژههای SPA میباشد میتوان از Angular یا Durandal استفاده کرد.
مقایسهی Knockout با Angular همانند مقایسهی موتور بنز با ماشین پورشه میباشد.