[xwiki-devs] AngularJS review by someone who uses it at work.
Since Marius wrote the FileManager application using AngularJS and there has been some discussion about making increasing use of it in XWiki, I wanted to share a review by someone who uses it in his job as their entire platform. These are advantages and disadvantages which I determined from the chat: + Easy and efficient workflow (when you know it) + Testing is easy and well understood + Debugging is not difficult, thanks to Angular's popularity and integrated software + Separates model and view well (makes angular apps skinable). - Owns your system, if angular dies you die with it - Learning curve - Though it separates your model and view well, you can't test your model and controller without a DOM present (he's not sure of this). Although I think we need to keep investigating, I feel that Angular warrants more investigation. Thanks, Caleb PS: And the actual conversation, including some useful links: 16:31 < cjd> gimme teh infoz 16:32 < SomeoneWeird> well, there's a lot of (maybe too much) magic going on behind the scenes 16:32 < SomeoneWeird> all the DI stuff, scope tracking 16:32 < SomeoneWeird> sticking one broken thing in the digest loop will kill the entire app 16:32 < cjd> /nod 16:32 < SomeoneWeird> but.. once you know how it works, it's great 16:33 < SomeoneWeird> it's entire stdlib is all promises (which I don't care for, but because it's ALL promises, it makes it a breeze to work with) 16:33 < SomeoneWeird> plus, the DI system is awsm 16:33 < cjd> ok 16:34 < SomeoneWeird> scoping it out because you wanna use it? 16:34 < cjd> xwiki is interested in it 16:34 < cjd> do you use it as a system to control your entire app or as a library? 16:34 < SomeoneWeird> it's our entire thing 16:34 < cjd> ok 16:34 < SomeoneWeird> our CMS is built up of multiple angular apps 16:34 < SomeoneWeird> which are nested 16:35 < cjd> how is it for debugging? 16:36 < SomeoneWeird> not terrible, the errors it gives up are sometimes broken (but we're using a slightly outdated version), but there's also batarang, which is a cool ext. so you can view scope contents in your browser 16:36 < SomeoneWeird> https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmc... 16:36 < cjd> ok 16:37 < SomeoneWeird> oh, testing 16:37 < SomeoneWeird> is awesome 16:37 < cjd> you can unit test in node ? 16:37 < SomeoneWeird> built in mocking support for everything in build in libraries 16:37 < SomeoneWeird> cjd: probably, using phantom or something 16:38 < cjd> ok, so you need a DOM to test 16:38 < SomeoneWeird> hm 16:38 < SomeoneWeird> i think 16:38 < cjd> ok 16:38 < SomeoneWeird> we're using karma at work 16:39 < cjd> explain? 16:39 < SomeoneWeird> http://karma-runner.github.io/0.12/index.html 16:39 < SomeoneWeird> check the vid 16:39 < cjd> ok 16:39 < SomeoneWeird> it's a test runner for browser tests 16:39 < SomeoneWeird> i think you can do headless stuff with it too 16:39 < cjd> how is the seperation between your models and the views? 16:40 < cjd> (is it skinnable?) 16:40 < SomeoneWeird> skinnable? 16:40 < cjd> could you write a new <fakehtml> view for a widget 16:41 < SomeoneWeird> yes 16:41 < cjd> so put a new skin on that widget 16:41 < SomeoneWeird> directives 16:41 < cjd> ok and you don't need to tinker with your model or controller code to do that? 16:41 < SomeoneWeird> models & views are pretty seperated, html can be completely declarative if you want 16:41 < cjd> ok 16:42 < SomeoneWeird> http://www.sitepoint.com/practical-guide-angularjs-directives/ 16:42 < cjd> so summary: 16:42 < SomeoneWeird> so you can define <hello>, and then bind that to a model etc 16:42 < cjd> + easy and efficient workflow (when you know it) 16:42 < SomeoneWeird> but they're seperate until you do 16:42 < cjd> + testing is easy and well understood 16:43 < cjd> + debugging is not difficult, thanks to angular's popularity and integrated software 16:43 < SomeoneWeird> there is a definite learning curve though 16:44 < cjd> - Owns your system, if angular dies you die with it 16:44 < SomeoneWeird> especially if people are used to using jquery etc 16:44 < cjd> - Learning curve 16:44 < cjd> - Though it seperates your model and view well, you can't test your model and controller without a DOM present. 16:45 < cjd> anything to add? 16:45 < SomeoneWeird> i'm not 100% sure on the last point 16:45 < cjd> ok 16:45 < cjd> can I publish this conversation? 16:46 < SomeoneWeird> i guess, hopefully I'm not wrong about anything >.> 16:46 < cjd> ok :) 16:48 < SomeoneWeird> http://www.reddit.com/r/webdev/comments/1rbz0h/is_angularjs_worth_developing... 16:48 < SomeoneWeird> good points in here
Hi caleb, Interesting. I’ve added this thread to http://design.xwiki.org/xwiki/bin/view/Proposal/JavaScriptFrameworkEvaluatio... Thanks -Vincent On 28 Jul 2014 at 16:56:21, Caleb James DeLisle (cjd@cjdns.fr) wrote: Since Marius wrote the FileManager application using AngularJS and there has been some discussion about making increasing use of it in XWiki, I wanted to share a review by someone who uses it in his job as their entire platform. These are advantages and disadvantages which I determined from the chat: + Easy and efficient workflow (when you know it) + Testing is easy and well understood + Debugging is not difficult, thanks to Angular's popularity and integrated software + Separates model and view well (makes angular apps skinable). - Owns your system, if angular dies you die with it - Learning curve - Though it separates your model and view well, you can't test your model and controller without a DOM present (he's not sure of this). Although I think we need to keep investigating, I feel that Angular warrants more investigation. Thanks, Caleb PS: And the actual conversation, including some useful links: 16:31 < cjd> gimme teh infoz 16:32 < SomeoneWeird> well, there's a lot of (maybe too much) magic going on behind the scenes 16:32 < SomeoneWeird> all the DI stuff, scope tracking 16:32 < SomeoneWeird> sticking one broken thing in the digest loop will kill the entire app 16:32 < cjd> /nod 16:32 < SomeoneWeird> but.. once you know how it works, it's great 16:33 < SomeoneWeird> it's entire stdlib is all promises (which I don't care for, but because it's ALL promises, it makes it a breeze to work with) 16:33 < SomeoneWeird> plus, the DI system is awsm 16:33 < cjd> ok 16:34 < SomeoneWeird> scoping it out because you wanna use it? 16:34 < cjd> xwiki is interested in it 16:34 < cjd> do you use it as a system to control your entire app or as a library? 16:34 < SomeoneWeird> it's our entire thing 16:34 < cjd> ok 16:34 < SomeoneWeird> our CMS is built up of multiple angular apps 16:34 < SomeoneWeird> which are nested 16:35 < cjd> how is it for debugging? 16:36 < SomeoneWeird> not terrible, the errors it gives up are sometimes broken (but we're using a slightly outdated version), but there's also batarang, which is a cool ext. so you can view scope contents in your browser 16:36 < SomeoneWeird> https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmc... 16:36 < cjd> ok 16:37 < SomeoneWeird> oh, testing 16:37 < SomeoneWeird> is awesome 16:37 < cjd> you can unit test in node ? 16:37 < SomeoneWeird> built in mocking support for everything in build in libraries 16:37 < SomeoneWeird> cjd: probably, using phantom or something 16:38 < cjd> ok, so you need a DOM to test 16:38 < SomeoneWeird> hm 16:38 < SomeoneWeird> i think 16:38 < cjd> ok 16:38 < SomeoneWeird> we're using karma at work 16:39 < cjd> explain? 16:39 < SomeoneWeird> http://karma-runner.github.io/0.12/index.html 16:39 < SomeoneWeird> check the vid 16:39 < cjd> ok 16:39 < SomeoneWeird> it's a test runner for browser tests 16:39 < SomeoneWeird> i think you can do headless stuff with it too 16:39 < cjd> how is the seperation between your models and the views? 16:40 < cjd> (is it skinnable?) 16:40 < SomeoneWeird> skinnable? 16:40 < cjd> could you write a new <fakehtml> view for a widget 16:41 < SomeoneWeird> yes 16:41 < cjd> so put a new skin on that widget 16:41 < SomeoneWeird> directives 16:41 < cjd> ok and you don't need to tinker with your model or controller code to do that? 16:41 < SomeoneWeird> models & views are pretty seperated, html can be completely declarative if you want 16:41 < cjd> ok 16:42 < SomeoneWeird> http://www.sitepoint.com/practical-guide-angularjs-directives/ 16:42 < cjd> so summary: 16:42 < SomeoneWeird> so you can define <hello>, and then bind that to a model etc 16:42 < cjd> + easy and efficient workflow (when you know it) 16:42 < SomeoneWeird> but they're seperate until you do 16:42 < cjd> + testing is easy and well understood 16:43 < cjd> + debugging is not difficult, thanks to angular's popularity and integrated software 16:43 < SomeoneWeird> there is a definite learning curve though 16:44 < cjd> - Owns your system, if angular dies you die with it 16:44 < SomeoneWeird> especially if people are used to using jquery etc 16:44 < cjd> - Learning curve 16:44 < cjd> - Though it seperates your model and view well, you can't test your model and controller without a DOM present. 16:45 < cjd> anything to add? 16:45 < SomeoneWeird> i'm not 100% sure on the last point 16:45 < cjd> ok 16:45 < cjd> can I publish this conversation? 16:46 < SomeoneWeird> i guess, hopefully I'm not wrong about anything >.> 16:46 < cjd> ok :) 16:48 < SomeoneWeird> http://www.reddit.com/r/webdev/comments/1rbz0h/is_angularjs_worth_developing... 16:48 < SomeoneWeird> good points in here _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs
I just did some further review of angular, collecting some github statistics. I think Angular is safe at this point from a project point of view with the understanding that google can vanish at any moment and has done this before on other projects. Linkedin is using Angular in their stack (MongoDB,ExpressJS,AngularJS,NodeJS) http://www.linkedin.com/today/post/article/20140603115714-58192521-mean-vs-l... and this MEAN stack seems to be getting a lot of attention lately http://meanjs.org/ So consider this a +1 in principle to Angular but I'd like to see more thoughts about how it will be used. Do we want to use Angular dependency injection? Do we want to move away from AMD? Do we want to limit it's use to views and write models and business logic manually? Thanks, Caleb On 07/28/2014 04:32 PM, vincent@massol.net wrote:
Hi caleb,
Interesting. I’ve added this thread to http://design.xwiki.org/xwiki/bin/view/Proposal/JavaScriptFrameworkEvaluatio...
Thanks -Vincent
On 28 Jul 2014 at 16:56:21, Caleb James DeLisle (cjd@cjdns.fr) wrote:
Since Marius wrote the FileManager application using AngularJS and there has been some discussion about making increasing use of it in XWiki, I wanted to share a review by someone who uses it in his job as their entire platform.
These are advantages and disadvantages which I determined from the chat:
+ Easy and efficient workflow (when you know it) + Testing is easy and well understood + Debugging is not difficult, thanks to Angular's popularity and integrated software + Separates model and view well (makes angular apps skinable). - Owns your system, if angular dies you die with it - Learning curve - Though it separates your model and view well, you can't test your model and controller without a DOM present (he's not sure of this).
Although I think we need to keep investigating, I feel that Angular warrants more investigation.
Thanks, Caleb
PS: And the actual conversation, including some useful links:
16:31 < cjd> gimme teh infoz 16:32 < SomeoneWeird> well, there's a lot of (maybe too much) magic going on behind the scenes 16:32 < SomeoneWeird> all the DI stuff, scope tracking 16:32 < SomeoneWeird> sticking one broken thing in the digest loop will kill the entire app 16:32 < cjd> /nod 16:32 < SomeoneWeird> but.. once you know how it works, it's great 16:33 < SomeoneWeird> it's entire stdlib is all promises (which I don't care for, but because it's ALL promises, it makes it a breeze to work with) 16:33 < SomeoneWeird> plus, the DI system is awsm 16:33 < cjd> ok 16:34 < SomeoneWeird> scoping it out because you wanna use it? 16:34 < cjd> xwiki is interested in it 16:34 < cjd> do you use it as a system to control your entire app or as a library? 16:34 < SomeoneWeird> it's our entire thing 16:34 < cjd> ok 16:34 < SomeoneWeird> our CMS is built up of multiple angular apps 16:34 < SomeoneWeird> which are nested 16:35 < cjd> how is it for debugging? 16:36 < SomeoneWeird> not terrible, the errors it gives up are sometimes broken (but we're using a slightly outdated version), but there's also batarang, which is a cool ext. so you can view scope contents in your browser 16:36 < SomeoneWeird> https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmc... 16:36 < cjd> ok 16:37 < SomeoneWeird> oh, testing 16:37 < SomeoneWeird> is awesome 16:37 < cjd> you can unit test in node ? 16:37 < SomeoneWeird> built in mocking support for everything in build in libraries 16:37 < SomeoneWeird> cjd: probably, using phantom or something 16:38 < cjd> ok, so you need a DOM to test 16:38 < SomeoneWeird> hm 16:38 < SomeoneWeird> i think 16:38 < cjd> ok 16:38 < SomeoneWeird> we're using karma at work 16:39 < cjd> explain? 16:39 < SomeoneWeird> http://karma-runner.github.io/0.12/index.html 16:39 < SomeoneWeird> check the vid 16:39 < cjd> ok 16:39 < SomeoneWeird> it's a test runner for browser tests 16:39 < SomeoneWeird> i think you can do headless stuff with it too 16:39 < cjd> how is the seperation between your models and the views? 16:40 < cjd> (is it skinnable?) 16:40 < SomeoneWeird> skinnable? 16:40 < cjd> could you write a new <fakehtml> view for a widget 16:41 < SomeoneWeird> yes 16:41 < cjd> so put a new skin on that widget 16:41 < SomeoneWeird> directives 16:41 < cjd> ok and you don't need to tinker with your model or controller code to do that? 16:41 < SomeoneWeird> models & views are pretty seperated, html can be completely declarative if you want 16:41 < cjd> ok 16:42 < SomeoneWeird> http://www.sitepoint.com/practical-guide-angularjs-directives/ 16:42 < cjd> so summary: 16:42 < SomeoneWeird> so you can define <hello>, and then bind that to a model etc 16:42 < cjd> + easy and efficient workflow (when you know it) 16:42 < SomeoneWeird> but they're seperate until you do 16:42 < cjd> + testing is easy and well understood 16:43 < cjd> + debugging is not difficult, thanks to angular's popularity and integrated software 16:43 < SomeoneWeird> there is a definite learning curve though 16:44 < cjd> - Owns your system, if angular dies you die with it 16:44 < SomeoneWeird> especially if people are used to using jquery etc 16:44 < cjd> - Learning curve 16:44 < cjd> - Though it seperates your model and view well, you can't test your model and controller without a DOM present. 16:45 < cjd> anything to add? 16:45 < SomeoneWeird> i'm not 100% sure on the last point 16:45 < cjd> ok 16:45 < cjd> can I publish this conversation? 16:46 < SomeoneWeird> i guess, hopefully I'm not wrong about anything >.> 16:46 < cjd> ok :) 16:48 < SomeoneWeird> http://www.reddit.com/r/webdev/comments/1rbz0h/is_angularjs_worth_developing... 16:48 < SomeoneWeird> good points in here _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs
participants (2)
-
Caleb James DeLisle -
vincent@massol.net