* Raptor looks like it's not designed as an MVC (or MV*) framework per se. It seems that widgets individually encompass all that functionality on the client side (with Raptor being agnostic as to the decomposition/structuring), and that Raptor doesn't provide page/app-level functionality like client MV* frameworks provide. On the server side it adds support for Raptor packages/modules and UI components on top of Express but is otherwise agnostic as to how controllers get data and pass them into templates. Is this an accurate characterization?
* The Raptor client-side pub/sub feature is a nice pattern for decoupling widgets that is also used by Marionette (via Backbone.Wreqr library) and by AuraJS amongst others. Did you look at using either of those (or others) before building Raptor's? And is the pub/sub mechanism separable from the rest of the widget framework? E.g., could another pub/sub library be used instead?
* Is it possible to use a different template library instead of Raptor Templates? Nothing necessarily against those, I'm just curious how much work it'd be to use another template library -- say Dust -- with the other pieces of RaptorJS?
* The AMD/packaging/optimizer/loading functionality looks very complete and rich. Is that usable independently of the rest of Raptor?
* How widely is Raptor deployed within eBay? What are some of the pages it serves, and is it used for desktop as well as mobile variants of the site?
* From afar it looks like there's a huge overlap between Raptor and your sister company Paypal's Kraken. Did they know about and explore Raptor before embarking on Kraken? Are you guys at all trying to collaborate and converge?
* Why isn't there more activity in this group and traction in general with Raptor outside of eBay? As awesome as Raptor looks to be that's really surprising!
* Raptor looks like it's not designed as an MVC (or MV*) framework per se. It seems that widgets individually encompass all that functionality on the client side (with Raptor being agnostic as to the decomposition/structuring), and that Raptor doesn't provide page/app-level functionality like client MV* frameworks provide. On the server side it adds support for Raptor packages/modules and UI components on top of Express but is otherwise agnostic as to how controllers get data and pass them into templates. Is this an accurate characterization?
* The Raptor client-side pub/sub feature is a nice pattern for decoupling widgets that is also used by Marionette (via Backbone.Wreqr library) and by AuraJS amongst others. Did you look at using either of those (or others) before building Raptor's? And is the pub/sub mechanism separable from the rest of the widget framework? E.g., could another pub/sub library be used instead?
* Is it possible to use a different template library instead of Raptor Templates? Nothing necessarily against those, I'm just curious how much work it'd be to use another template library -- say Dust -- with the other pieces of RaptorJS?
* The AMD/packaging/optimizer/loading functionality looks very complete and rich. Is that usable independently of the rest of Raptor?
* How widely is Raptor deployed within eBay? What are some of the pages it serves, and is it used for desktop as well as mobile variants of the site?
* From afar it looks like there's a huge overlap between Raptor and your sister company Paypal's Kraken. Did they know about and explore Raptor before embarking on Kraken? Are you guys at all trying to collaborate and converge?
* Why isn't there more activity in this group and traction in general with Raptor outside of eBay? As awesome as Raptor looks to be that's really surprising!
Hi Chris,Thanks for taking the time to take a deep-dive into RaptorJS and all of the other open source libraries! Phil did a great job answering many of your questions, but I will also give my perspective (even if it is redundant)...
* Raptor looks like it's not designed as an MVC (or MV*) framework per se. It seems that widgets individually encompass all that functionality on the client side (with Raptor being agnostic as to the decomposition/structuring), and that Raptor doesn't provide page/app-level functionality like client MV* frameworks provide. On the server side it adds support for Raptor packages/modules and UI components on top of Express but is otherwise agnostic as to how controllers get data and pass them into templates. Is this an accurate characterization?
[PATRICK] That is an accurate characterization. RaptorJS provides support for some patterns that we think simplify how complex pages are built (specifically declarative dependency management, dependency loading, pubsub, parent/child widget communication, separating out rendering from client-side behavior and binding behavior to rendered UI components). While RaptorJS offers patterns to solve the problems mentioned, you can still mix and match based on what you think is appropriate for your app. We wanted to leave things open because the technology landscape is changing at a fast pace (e.g. web components, EcmaScript 6, etc.) and we didn't want to place restrictions that would completely invalidate the toolkit in the future.
* The Raptor client-side pub/sub feature is a nice pattern for decoupling widgets that is also used by Marionette (via Backbone.Wreqr library) and by AuraJS amongst others. Did you look at using either of those (or others) before building Raptor's? And is the pub/sub mechanism separable from the rest of the widget framework? E.g., could another pub/sub library be used instead?
[PATRICK] The "raptor/pubsub" module is a tiny module within the RaptorJS toolkit and it is optional and independent. Personally, I wrote "raptor/pubsub" because I think it offered a cleaner way to subscribe and unsubscribe to topics and I also wanted to add support for channels to avoid crosstalk in complex pages. Possibly more importantly, I was only interested in a pubsub solution that was completely independent from the DOM (better performance and simplicity).
* Is it possible to use a different template library instead of Raptor Templates? Nothing necessarily against those, I'm just curious how much work it'd be to use another template library -- say Dust -- with the other pieces of RaptorJS?
[PATRICK] It's possible to use RaptorJS with any popular templating language that supports JavaScript helpers. However, the asynchronous custom tags only work for Raptor Templates and Dust since they are the only asynchronous JavaScript templating languages (NOTE: the optimizer custom tags/helpers are all asynchronous). I introduced a simple open source layer for binding RaptorJS custom tags to Dust by adapting the JavaScript API for Dust (chunks and async chunks) to RaptorJS (writers and async fragments):
If you want more details on the "raptor-dust" module please let me know.
* The AMD/packaging/optimizer/loading functionality looks very complete and rich. Is that usable independently of the rest of Raptor?
[PATRICK] Absolutely! the RaptorJS optimizer, packaging and loader can all be used independently and with no restrictions on a particular templating language or build/runtime setup. The only caveat is that the client-side loader does require the use of the lightweight RaptorJS AMD implementation (not RequireJS).
* How widely is Raptor deployed within eBay? What are some of the pages it serves, and is it used for desktop as well as mobile variants of the site?
[PATRICK] The client-side loader, widget framework and packaging functionality of RaptorJS are deployed widely within eBay because they were built first. You will find RaptorJS in pretty much all apps built within the last ~2 years on the latest eBay platforms. Raptor Templates is also extensively used, but less so because it was developed much later and could not be easily used on the server-side of the JVM stack since that requires the Rhino JavaScript engine (slower). However, on eBay's Node.js stack (i.e. CubeJS), Raptor Templates is being used by all of the teams and there are >10 different CubeJS apps being developed. The following pages are being served up by *Node.js* in production and use all of the features of RaptorJS:
- http://www.ebay.com/cln
- http://www.ebay.com/cln/dnw555/Great-Board-Games/58950112016
- http://www.ebay.com/bit/comics/
(there are more pages, but those pages are the easiest to link to)You'll find RaptorJS being used on about 70% of the eBay pages (homepage, search, view item and including both JVM and Node.js stacks). It's outside eBay where we would like to see more adoption :)
* From afar it looks like there's a huge overlap between Raptor and your sister company Paypal's Kraken. Did they know about and explore Raptor before embarking on Kraken? Are you guys at all trying to collaborate and converge?
[PATRICK] Yes, we did have some discussions along the way. I'm not going to speculate as to why exactly the Kraken team decided not to utilize certain features of RaptorJS, but there is an effort to converge and collaborate on the Node.js stacks now that both stacks have proven themselves.
* Why isn't there more activity in this group and traction in general with Raptor outside of eBay? As awesome as Raptor looks to be that's really surprising!
[PATRICK] I will speculate as to why I believe the adoption outside eBay has not been so great:
- Perception problems:
- "RaptorJS adds complexity"
- "RaptorJS is only needed if performance is a top concern"
- "RaptorJS is a monolithic framework"
- NOTE: I don't believe any of those arguments, but that is what I hear :)
- RaptorJS tries to solve "unsexy" problems (e.g. dependency management)
- RaptorJS is not tied to a fancy UI toolkit (such as Bootstrap)
- MV* and Bootstrap has consumed everyone for the last few years
- People use what they are familiar with. For example:
- jQuery selectors!
- Build time tools for resource optimization (e.g. Grunt tasks)
- NOTE: Very few (if any) companies are doing runtime resource optimization. eBay has been doing runtime resource optimization for years and it is really powerful
- For Raptor Templates specifically, there is an aversion to XML (even though HTML is basically XML... I don't get it)
- For the async loader, people just use RequireJS because it doesn't require any server-side piece (until you try to optimize your app...)
- NOTE: Not having a full featured server-side piece is the problem I have with RequireJS... that, and it doesn't use declarative dependencies (dependencies are inside JavaScript code and only JavaScript code). What about non-JS modules with dependencies?
- eBay doesn't have a team dedicated to promoting RaptorJS outside eBay and I tend to focus more on coding than marketing
Eventually I think we will get there. The tides have changed significantly within eBay. Initially developers were very skeptical of developing and using a new JavaScript/UI toolkit (even if it was open source), but now I am seeing a lot of interested in supporting and using RaptorJS. Also, RaptorJS is much more at home on the Node.js stack because it offers a full end-to-end JavaScript platform that we did not have on the JVM stack.On a related note, eBay has a very active internal discussion forum for all eBay technologies. Most RaptorJS questions end up being posted to the internal discussion forum instead of the public discussion forum.With that said, if you find RaptorJS interesting we always appreciate when people share it with others.Thanks again for your interest and please let us know if you have any other questions.--Patrick
On Thursday, December 5, 2013 8:11:14 PM UTC-8, Chris Toomey wrote:
--
You received this message because you are subscribed to a topic in the Google Groups "RaptorJS" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/raptorjs/CdIDHQbuSY8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to raptorjs+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.