- It should be nice to the global namespace. I dislike frameworks that pollute the air with all kinds of function names.
- It should be fast.
- It should have nice, easy to use effects.
- It should have extremely capable DOM manipulation.
- It should have great CSS selectors.
- It should have a good window.onLoad mechanism.
- It should not modify the base language. Prototype is right out! I really really hate that.
- It should be terse. I do not like wordy frameworks as a matter of style & taste.
- It should work well with Safari.
Based on these requirements, I narrowed my choices down to:
I then made a web page, loaded each of these in, and tried out various DOM manipulations and effects using the FireBug console. This was a fair way to do it, because it is how I prefer to explore a new framework. I like good docs, of course, but I also like being able to exercise the framework in an intuitive manner. My results, in very short nutshell descriptions:
Intuitive, easy to use, fast, great DOM manipulation, good effects. Great window.onLoad handler. Give it an A- grade.
Intuitive, very very extensive, great DOM manipulation, solid effects. The fastest to get things done when puzzling out on the commandline. Give it an A.
Very terse, much more “functional” in approach rather than class-oriented. Not good about polluting the global namespace. Yes, this is runtime-optional, but the alternative is very wordy. The functional approach (i.e. map(set, func) rather than $(selector).each(func)) is a bit off-putting actually. It makes it much harder to know what functions are appropriate to use with what objects. Give it a score of B+ due to my highly subjective sense of style.
Too wordy. I dislike their framework for building widgets. I love their inclusion mechanism, but dislike that the reason for it is that Dojo is so huge. Give it a C.
The winner: ExtJs
In the end, I went with ExtJs. I am happily converting my existing code to use the framework, and encountering little resistance. It is a very easy conversion. I’ll still use jQuery for deployed clients, but all my new library code is going to be Ext based.