Slashdot videos: Now with more Slashdot!

View

Discuss

Share

We've improved Slashdot's video section; now you can view our video interviews, product close-ups and site visits with all the usual Slashdot options to comment, share, etc. No more walled garden! It's a work in progress -- we hope you'll check it out (Learn more about the recent updates).

Am I the only one who usually finds frameworks to be pointless for serious web development? It's not that they're necessarily bad, but that they pack in dozens of features that you don't necessarily need (potentially bloating the size of your page download by tens to hundreds of K) or even want. In many cases, the frameworks have a ton of little "gotchas". For example, Prototype has a set of functions that are supposed to make it easy to show and hide elements. The only problem is that if you define the "display" element in the style sheet (say, to make an element invisible by default) you can't change the element's state. This is because the Prototype library works in a stateless fashion, assuming that the default value for "display" is the way to make an item visible. Which may not be not be true.

Other libraries have some cool GUI widgets, but often those are actually too much for a project. In some cases they even require you to build the entire project out of their widgets! That's nice if you're writing the next Outlook on the Web, but not so nice if you're trying to add interactive elements to an existing webpage. Especially if you like the more open HTML design rather than the cluttered pseudo-GUI design.

In general, I've found that these libraries may be kind of nice if you're not too familiar with DOM/CSS and want to perform some neat effects. (Scriptaculous in particular does some nice effects without a whole lot of difficulty. Just watch the download size!) But if you're doing a complex website, you'll probably be better off with a custom library for now. At least until some standard practices emerge among professional sites.

Now if you want to talk about libraries that patch minor browser issues like no DOM 2 Events, lack of Object.toSource, unified XMLHttpRequest instantiation, etc., then I'd have to jump in and add glowing support for such pieces of code. The key is, though, that they're very passive libraries. You include them, and they make sure that your code works the same everywhere. Which is a bit different than being forced to structure your project around a framework. If there's one thing I love about Javascript, it's that everything is virtual.;)

And I could show you inefficiencies and poorly-formed code and design patterns in projects that do use Struts/Shale/WebWork.

That's not to say that frameworks aren't useful for some purposes, but "enforcing well-formed code and design patterns" is not one of those reasons, nor is failing to use frameworks evidence of bad design.

And I could show you inefficiencies and poorly-formed code and design patterns in projects that do use Struts/Shale/WebWork.

In my experience (I admit I'm no software development guru), the frameworks make for clean code in most cases. The exceptions are uses that are not planned for in the framework, or features that are poorly documented. Then you have a hugely kluged workaround or hack to the framework code itself to permit something that might otherwise be straightforward to implement.

In my experience (I admit I'm no software development guru), the frameworks make for clean code in most cases. The exceptions are uses that are not planned for in the framework, or features that are poorly documented. Then you have a hugely kluged workaround or hack to the framework code itself to permit something that might otherwise be straightforward to implement.

Could it just be that people who choose the right framework for their project are more likely to write clean code in the first place, as eviden

Frameworks are what professionals use - the enforce well-formed code and design patterns.

Funny thing, though. We "professionals" (I like the insinuation there, BTW) use the right tool for the right job. Sometimes the right tool is NOT someone else's framework. Sometimes, you're actually creating inefficiencies by adding layers unnecessary to the project at hand. Only an amateur selects a server-side framework before knowing the requirements of the project. The "professionals" will use off the shelf if it makes sense or build their own if better results can be achieved.

In the case of Javascripting, you've got a lot of factors working against you. The first is size. You can't afford waste, because you're trying to ensure that the page renders as fast as possible. Dumping 100K+ from the scriptalicious framework just to fade out a single box isn't very effective to your budget. Especially since the same effect can be achieved in a few hundred bytes by using a custom framework.

The second factor working against you is reusability. Javascript is not very well designed to handle this area. Object Oriented concepts we take for granted in Java (interfaces, abstract classes, private methods, final assignments, etc.) are not enforceable in vanilla Javascript. So you have to either be really clever (sounds like trouble), or work through standardized practices.

The third factor working against you is maturity. These frameworks are of varying levels of maturity because such web technologies are anything but old-hat yet. There are plenty of situations they are untested in, potentially leaving you debugging someone else's code rather than moving your project forward. Thus a framework may actually increase your project time if you're not careful.

And with that, there's one last note I'd like to point out. Frameworks are far too often chosen as a crutch rather than a time-saving component. Make sure that when you chose a framework, it's because you know it will do the job you need it to. Not because you heard it's the latest craze (bad), or because you have no idea how to implement the functionality it provides (even worse).

In fact your very own logic argues for the use of a JS framework. Anything you write that relies on Prototype is going to be far more mature and reusable than something you cobbled together on your own. When I say "mature", I mean it in the holistic sense. It's very, very unlikely that you are you going find some trivial error in the core Prototype library. It's virtually certain that you would do so if you write your own. Maybe you will get them worked out by deployment time, maybe not. Second, Prototype has a rich and consistent API, and anyone who has experience writing applications on top of it could easily pick up your code and reuse it. Finally, you make no mention of cross-browser compatibility, which makes me wonder how much experience developing these sorts of applications you really have. Words cannot describe how much time you save when your starting point is something that works out of the box in IE, Firefox, Safari and Opera. You could sink literally hundreds of hours into testing your application on various platforms. Fortunately, you don't have to, because someone already did. Why reinvent the wheel?

The second factor working against you is reusability. Javascript is not very well designed to handle this area.

Why do you ruin any otherwise intelligent post with this complete nonsense. Javascript is very well suited for reusability as all prototypical languages are. Prototypical inheritance and Duck Typing make Javascript objects, including constructors some of the most reusable components in software. Miss understanding these elements and being stuck in the static typed, classical inheritance model is no reason to go bashing all other approaches to component reuse.

Object Oriented concepts we take for granted in Java (interfaces, abstract classes, private methods, final assignments, etc.) are not enforceable in vanilla Javascript.

Either that, or you are completely unaware of all the behind the scene computations made possible by a high level language such as JavaScript, in which case you have no idea how much "control" you are giving up.

Funny thing, though. "Control" was never a term I used. I never even insinuated that it was a problem.

Let me learns you something here, my young friend. There is a time for everything. A time to laugh, a time to cry, a time to make war, and a time to make peace. There is also a time for frameworks th

It appears you got a specific arguement for GWT, whereas GP was talking about frameworks in general. GWT sounds like a dream come true when you need to build a pretty serious app - but honestly, how often are you going to run into that situation regarding web developers? It sounds like more the exception to the rule.

The issue stated with the other js frameworks is that it provides a breeding around for lazyness, which results in terrible terrible code designed by people that are clearly unsuited for the ta

No. Soon we will quit trying to make 3270-with-fancy-graphics(a.k.a web apps) work like the users wanted it to work and we will all switch to JFC/Swing/WebStart or WPF, except for the applications that are WEB applications.

No he's not the only one. Frameworks and design patterns are some of the most abused "tools" ever. Maybe you do a prototype, but when you hit a limitation you can spend a lot of time on learning how to customize and extend the framework.
The other problem I've had is revisions. Spring particularly was painful. Developer A needed a fix. The version with the fix changed something fundamental (not compiler detectable, something like calling order), and things break. Tough to manage.
Give me a good collectio

Struts is great, if you want to handcuff good OO Design, and just use the Struts features. As far as I'm concerned the only thing that make Struts even remotely useful is the Validation framework. The rest is crap for junior web developers who don't know how to use a web.xml and Model-2 MCV; it cripples the rest of us.

Frameworks are what professionals use - the enforce well-formed code and design patterns.

Speaking as a programmer with 8 years professional experience, that's bullshit. Nothing can enforce well-formed code, except perhaps frequent code reviews by a competent, fascist reviewer (with the power to force people to rewrite stuff properly or replace them with people who will/can).

Frameworks have their uses, and can make some things much easier (and other things much harder or even impossible). I'd also strongly d

Am I the only one who usually finds frameworks to be pointless for serious web development? It's not that they're necessarily bad, but that they pack in dozens of features that you don't necessarily need (potentially bloating the size of your page download by tens to hundreds of K)[...]

So write a script to remove all the unused functions. At least thats how we do it were I work.

That being said, there are plenty of features in Prototype which are more library-like than framework-like, so it is easy to use parts of it without buying into a whole framework methodology. I don't know much about the other evaluated tools.

Thanks for the links. IMHO, only the last one is coherent. To abuse on old joke around here, in Soviet Russia, frameworks call you.

What Spolsky (and everyone here) is complaining about isn't really about frameworks versus libraries but more about heavy weight versus light weight. Frameworks can get heavy because they tend to combine lots of functionality in a way that introduces a lot of dependencies, thus increasing coupling (which, in software engineering, is a bad thing). That's where the feeling of

As I said elsewhere, YUI is a library, not a framework. It is very small and you can include only what you need. I suggest all the people complaining about frameworks are not even addressing what we are talking about here, which is the fact that javascript libraries make advanced JS development possible, because you don't have to waste you time solving solved problems and you can focus on your app.

Funny thing, though. I've seen more than enough situations where the framework is obsolete by the time it's done. Take Portlets for example. Seems like a beautiful idea. Web pages are composed of sections, therefore they should be built in sections, right? Right. 5-7 years ago, that is. When I built custom frameworks to good effect that did the same thing.

Today, you often need to go back to looking at the entire page. Why? Because the cutting edge developments require that the page be looked at as a complete memory model. If you try to take the HTML Component approach, programmer 1 may stomp all over programmer 2's Javascript or document ids by accident. Thus it suddenly makes sense to unify those pieces into libraries akin to more traditional programming methods.

Today, you often need to go back to looking at the entire page. Why? Because the cutting edge developments require that the page be looked at as a complete memory model. If you try to take the HTML Component approach, programmer 1 may stomp all over programmer 2's Javascript or document ids by accident. Thus it suddenly makes sense to unify those pieces into libraries akin to more traditional programming methods.

I'm not sure how this negates the framework model. It's exactly a framework that could provide y

Am I the only one who usually finds frameworks to be pointless for serious web development? It's not that they're necessarily bad, but that they pack in dozens of features that you don't necessarily need

This was my problem in the open source project, partly Ajax driven, I'm involved in. Exactly for this reason it sported custom coded Javascript from the start. I don't want to load 50K+ javascripts, and I don't want one big script with crap I don't need. If you have some fairly basic stuff which doesn't change much, it's much more efficient to hand-code your own javascript. Also, when this problem arose, and it is still true, these libaries are relatively brand new, and I found it silly to commit a codebase to any of them. However, if you do all your own coding, there are problems such as cross-browser compatibility, and also there is a certain threshold of complexity when you find you're factoring out the same code and problems, and one should consider a switch. But it is a dangerous point which should be a warning sign by itself, because it could imply your stuff is getting too bloated.

It turned out jquery (jquery.com) was the best choice in our case, it addresses exactly my worries by sporting a size of just 20KB, all extras come in modules, and it's very powerful. I'd rather have a 10K version, but there you have it, you can't have it all. How it (or I) work, is to load the core when the page is loaded, and only insert additional scripts (mostly dynamic, i.e. when you click something) when needed. Similary, Yahoo! has a fine, modulized lib which is extremely well documented.

Last but not least it must be noted that all of these frameworks use MIT/BSD style licenses, and I'd like to thank them all for their great tools and generosity.

I disagree. If your goal is to write a website for mom, it is overkill to look at Prototype (maybe). However, anybody who is comparing frameworks is probably way beyond the simple stuff.

As for the bloat issue, this is where libraries like Scriptaculous are doing it right by keeping classes of components in separate libraries. Second, this is why browsers cache JS files. Third, if you want cool effects that are cross-browser compatible, you simply have to accept that such effects come with bloat. If bloat is a show stopper, then you probably shouldn't use fading transitions with scaling div boxes anyway.

And if the argument is that these add way too much *unused* bloat, this comes back to the "mom's website" argument I made above. If people want to use machine guns to hunt cockroaches, that's their call. Unlike with a machine gun, if Prototype is too much, you can always cut out the small pieces you need. That's right -- people seem to conveniently forget that if they only really need one small, tiny part of a much larger library, they're always free to simply cut and paste that component out (MIT license is a great thing, huh).

What? But you need the rest, just in case? Then don't complain about the bloat you are willfully accepting. But in all honesty, Prototype's foot print is tiny -- about the size of an extra image banner -- and it gets cached.

I have been using Prototype extensively lately, and I have found it as a major time saver. By using it, I don't have to remember the various undocumented "gotchas" across browers. I'd much rather deal with the well documented [prototypejs.org] show/hide issue than trying to figure out how to make transparent text in all of the browsers. On that note, did you know Prototype tries to prevent the very "gotchas" you talk of? For example, stopping event propogation is the same method no matter what browser you are using, and the Element.setStyle/getStyle methods correctly convert the 'opacity' property depending on the browser being used. So for whatever "gotchas" you are using to discredit Prototype, I think you are conveniently ignoring the hundreds of others that Prototype strives to fix, silently, without the developer ever knowing.

And lastly, about the notion of writing your own custom library -- that's hardly an option for most people. First of all, most web developers are not JavaScript experts. In fact, I've almost never seen someone use exception handling in JavaScript, short of in libraries like these. More importantly, even if you were some kind of JavaScript guru, are you going to test all of your methods in all of the browsers out there? Can you guarantee your AJAX calls work the same in all browsers? What happens if I trigger a second one during the first one? Is your implementation really more efficient than Prototype's? How long is it going to take to design this custom library? Is it extensible? Does it respect the global namespace? Does it play nice with other JS files I include? Does it work in strict/quirks mode? Like I said, writing such a library isn't an option for most people. Prototype is as close as it gets to a "patch" library, which is why so many other frameworks are built on it. That, and it has been extensively tested, which is a requirement for most companies rolling out technologies like it.

Good questions, although it's worth pointing out that (as of the last time I tried using it, which was some months ago now) Prototype does not play nicely with other JS files and did not respect the global namespace, which is one reason why we don't use Prototype where I work. (Our libraries are also smaller, and more modular)

Hmm. While I often find myself agreeing with you in Slashdot posts, I have to throw in a whole lot of "well, sometimes" flavored salt in with this one.Yes, frameworks are always inefficient compared to something tailor-made for a specific case (or even just the set of cases that you customarily deal with across multiple projects). But execution efficiency has never been what (honest) frameworks promise you; what they're after is development efficiency, which is quite a different matter.

You are not using YUI. YUI exactly what you are asking for. YUI is a libary, not a framework and it does exactly what you are asking for. (I also am kind of down on frameworks, good for RAD, not great for scaling full on apps)
Look into YUI Dom, Event and Connection. Lightweight, cross browser libraries that solve problems for you. DOM addClass, removeClass and getElementsByClassName are key. Event has great add/remove listener that helps you centralize managing events. YUI connection is kick ass ajax, et

Am I the only one who usually finds frameworks to be pointless for serious web development?

No, you are right on. I build code for fortune 10's and other very large entities. I am part of a small elite team of Java architects who work fast. Java, yea, we use a very bare-bonus MVC utility library. But overall, we have proof of concepts that the rest of us repeat to ensure that all of our code is consistent as if coming from one developer. Then we pier review our code. Then run it by security scanners. We then beat it all up (especially ajax stuff) in QA. Then release. It works.

Right, thanks for your insight and your daughters as well. I see you are teaching her a lot about charm that will serve her will in life.

What I'm saying is, a small team on senior coders do not need the crutch of a framework. And you will get a better product, lighter more agile JavaScript for Ajax (CSS/Javascript custom coded per the parents post), and faster delivery time.

When your specifications reach over 2000 pages, you need one small team to set the architecture, and then several small teams to handle each sub application. When you have one large team of average coders "set loose" to work within a generic framework like Struts or any of the Ajax frameworks, you are shooting yourself in the foot delivering average quality applications. When you build you own biz-s

As a rock star coder, I do not tell companies what they need. I listen really carefully first, ask a lot of questions for clarification second and build solutions based on their needs third. And yes, you are right, at time companies have framework requirements, but they end up paying a LOT more and get a " spaghetti code " system that is even more expensive to maintain. I am not a rock star coder cause I satiate my ego, I'm a rock star coder cause I build systems that really help people based on a careful p

Ah, you woke up! I've been awake for the last 2 days coding! Rock star, baybeeee!

But seriously, especially this last post of yours, you are right on the money. I was just telling a client today that this project was going to be 75% meetings, design, and product/business analysis, 20% testing and 5% coding. I bring a MBA with me to these meetings who can listen and talk. We are helping the fix processes that this business adapted around a product they have been using, and are trying to write them a new s

they pack in dozens of features that you don't necessarily need (potentially bloating the size of your page download by tens to hundreds of K) or even want

Imagine for a moment that the year is 3801. Our top computer scientists have invented this super algorithm that would find repetitive patterns in text and replace them with a token, thus decreasing data size. Then imagine that the very same algorithm could be implemented in popular web clients and servers. Now that would be quite a time to live in!

I cannot find anything on the etag/gzip problem other than the article you referenced but my testing with fiddler and IE7 cannot replicate the problem. I'm too lazy to start my IE6 VM and test with it but I don't really care. If I spent my time ruling out technologies b

I agree. I'm rewriting my site to include a few fancy Web 2.0 features (really nothing more than some Lightbox stuff and perhaps a digg-style counter/votebox thing) and it's been a mission to find a lightweight framework. I tried a combo of Prototype and Scriptaculous but was horrified at the sluggish loadtimes, so moved onto MooTools which is much faster and achieves similar results.

It's not that they're necessarily bad, but that they pack in dozens of features that you don't necessarily need (potentially bloating the size of your page download by tens to hundreds of K) or even want.

This exact point has been raised about most of the frameworks out there, even beyond those listed in the article. I can't speak from experience for all of them, but I agree 100% for both Dojo and the YUI libraries. Even Yahoo's own developers realize that YUI is a little bloaty. Dojo [dojotoolkit.org] has changed their ro [dojotoolkit.org]

I also found it odd that the author uses Dojo Toolkit v 0.3.1 as I believe 0.4.1 has been available for months and 0.4.2 is the current release. Though I don't know the differences between the releases so maybe it's no big deal.

You're likely referring to the JavaScript Hijacking [fortifysoftware.com] paper from Fortify Software, the one which finds a loophole in a ridiculously contrived scenario that applies to roughly six sites on the planet. The threat they identify is real, but unlikely; it's orders of magnitude less severe than an XSS flaw or SQL-injection attack. Bob Ippolito demystifies the threat [pythonmac.org].

Nine times out of ten, a security exploit that uses JavaScript as the attack vector must be solved on the server-side, not in the JavaScript itself.

I've actually read a couple of Mr. Ippolito's posts on this topic, and found them to be more entertaining than demystifying. My read is that he's making a stink of this to soothe a bruised ego. He has clearly taken that paper personally, and is responding to it as a personal attack than as a technical issue.Some choice quotes from his comments:> NOTHING MochiKit can do is insecure (in this way). Whatever the client sends or decodes is irrelevant. It's a 100% server-side issue. I added comment stripping

We believe that JavaScript Hijacking is the only type of vulnerability found so far applicable only to Ajax applications. We've also analyzed 12 most widely used Ajax frameworks (DWR, GWT, Microsoft "Atlas", xajax, Prototype, Script.aculo.us, Dojo, Moo.fx, jQuery, Yahoo! UI,

That's a very interesting security exploit you and your colleagues have found there. Allow me to be the first to congratulate you on being both foxy and smart!;)I have a minor question, though. I'm currently implementing a JSON-type of interface, but I'm doing things slightly different from the straight-up JSON message described in your paper. Correct me if I'm wrong, but wrapping the JSON request in an XML packet would negate the effects of the exploit, wouldn't it?

Piping it all over X11, RDP, VNC, or SSH merely shifts the pseudo-problems of your Levels 5 thru 8. How are you going to handle authorization, authentication and access control for these protocols? What about transport-layer vulnerabilities in each? All four of your suggested protocols have had a plethora of vulnerabilities, and they still have a handful even now (we just haven't found them yet).You have only repeated and restated the existing problem but using different words. The problem hasn't gone a

Your model is correct, but it really doesn't have to be that complicated. AJAX goes over HTTP. So, you use the same tools for securing AJAX as you do with HTTP. What kind of markup it is shouldn't matter.In my Java/Tomcat app, I use a ServletFilter to make sure all requestrs are either authenticated or they are marked as public. I have very few public pages (login.jsp and the images it depends on, the license agreement, etc.). An AJAX request is still considered a request. If you're not authenticated,

Something I also missed was xajax [xajaxproject.org]. They use AJAX as RPC layer, calling a server-side method from JavaScript, and in reverse call methods on the clients back. This is easy to implement in existing pages, and leaves much room for implementation.

Instead of parsing data structures in the client, xajax allows you to send HTML chunks, JavaScript method calls and DOM operations back (making it two-way RPC). The most interesting part is you can reuse all server-side code created in the "web 1.0" days, like HTML t

Amen to that. Most of the zombies around here don't really know what's going on with MS, but they are really pushing out some hard core cool shit lately. ASP.NET AJAX, Enterprise Library 3.0 and the several blocks it includes, WCF/WF/WPF trifecta from.NET 3.0, each of which is truly ahead of _anything_ else in their domain, all the stuff coming with Orcas, etc... Let's see some open source zombie crank out the equivelent of an EL3.0 enabled, WCF web service that supports WS-I + WS-Security Kerberos exte

I have had an experience very close to the author's. My group at work maintains an internal app served with Websphere, just like the author. We have a tree of nodes that recently ballooned in size to 40,000 nodes and this was causing our CSS/javascript tree to choke as it loaded everything once and used the CSS to handle opening and closing of nodes. It would take about 5-10 seconds to load the tree once, but after that it would perform nicely. We wanted a near instant load at start and then whenever you expanded a node it would grab its children from the database and display them then. My coworker and I didn't have any AJAX experience when we started working on this problem so we turned to frameworks.

First think I looked at was the Google Web Toolkit, and dismissed it as quickly as the author. I suppose if we ever rewrite our app from scratch we'll maybe consider it, but not right now. Then I found dojo, and we started using that to implement a dynamic loading tree. I got it working and plugged into our database fairly quickly, but found out it wouldn't help us much. Clicking on a parent to display its children can take anywhere from 1 to 15 seconds depending on the how many children it has, and also basically freeze your browser while it's doing that. It also either had a memory leak or just managed memory inefficiently because the browser's memory footprint would balloon in size as you clicked more and more nodes.

My coworker eventually took it into his own hands and started hacking the dynamic loading himself. I've been busy with other projects so I don't know how he did it exactly, but it's a combination of our old CSS tree and some dynamic loading to speed up the initial load. Clicking on a massive parent can still cause some slow loading, but it was better than dojo. I think dojo is a great toolkit, but when you just want to pull one specific piece out of it, it can be cumbersome and bloated. Also, the documentation sucks and if I needed help, I mostly just read over old bug fixes and such. I forwarded my coworker this article so maybe we'll look into YUI.

We have a tree of nodes that recently ballooned in size to 40,000 nodes and this was causing our CSS/javascript tree to choke as it loaded everything once and used the CSS to handle opening and closing of nodes.

Earlier this year I got pulled into a project that had been done by a team from everyone's favorite subcontinent. They had used both Yahoo and Scriptaculous/Prototype at the same time!The site would download quickly enough, but then the page would just sit blank and churn for about 30 seconds before displaying anything.

It was hideous, and it was never getting closer to completion, so we replaced their 108 man-months worth of Ajax coding with 2 man-months worth of Flash development and everyone was much muc

I know nothing I can say can remove the pain of bad past experiences, but let me clear up your misconceptions.1. Navigating through a site and I hit back.. leaving the site. Oops, I've been trained from HTML pages to navigate that way. This angers me to no end.

This is really a problem with any single page site, which is what Ajax is - a single page that loads in the different components. The same methods to make the back button work with Ajax can be used for Flash. It's just that not everyone uses these me

The only reason everyone uses Javascript to embed the files now is because of Microsoft's attempt to screw plug-ins.

Microsoft got sued by a patent troll [wikipedia.org]. Like it or not, MS were the good guys in this particular case, and aren't intentionally screwing anybody. Microsoft is trying to do the smart (and decent) thing by starving Eolas of future revenue. Microsoft and its deep pockets "took one for the team".

As someone who has done a lot of Flash and Javascript, I would say that the learning curve is feature-for-feature worse for Javascript because you need to learn about the different browsers, but may be greater overall for Flash because it offers more features.

Flash also has cross-browser problems. SWFs don't execute exactly the same on all browsers because many of the functions are handed off to the web browser. Nowhere is this more evident than with the XML.sendAndLoad APIs. They may work fine on one brows

You have to understand what you are using, as was discussed earlier [slashdot.org] often frameworks are not needed, simple custom script should be sufficient for most cases. However people do tend to wrap even simplest of things into large complex frameworks, supposedely for introducing commonalities, providing familiar interfaces, whatever. AJAX is just so simple that in most cases any of those would be overkill.

As the article (I RTFAd) states there are many cons and pros using these various frameworks. The main cons were:1. Not supporting the development model chosen for the project.2. Not providing enough documentation with the framework.3. Not providing enough widgets (many widgets still have to be custom made even with the frameworks.)4. The framework is too large and impacts performance.5. The resulting code is difficult to maintain.

The pros were:1. Not having to write the AJAX code by hand.2. Not having to write some widgets by hand.

I would say there for those cases when it is absolutely decided to go with a framework, do mix and matching. Use the simplest AJAX framework and mix and match it with widget libraries, but not entire libraries, extract what is absolutely necessary, in all cases custom code will have to be created by hand.

That's not how print magazines work, articles go in, and when they fill a gap or void or a theme is when they go to print, which can be years later, even for software/tech magazines. Again, only in print. Since they all had older versions reviewed you can kind of figure out when they did the review. Of course, it can also take place over the course of a few months.

Regarding your blog post, you almost sound like you're complaining that they are using stalwart versions of the software that they reviewed. I fail to see what the problem is with that. Would you rather that they have reviewed software that was buggy and barely functional? The rest of your blog posting gives me this impression leading me to believe that you think stalwart means old. It doesn't.

We (and all of the other toolkits they reviewed) fixed hundreds and hundreds of bugs in the 11 months since the release of Dojo 0.3.1. Like all of the other (well written) toolkits they reviewed, we take stability and quality seriously. Sure it takes them a while to review stuff, and I understand that they have constraints of publishing on a dead-tree schedule. It's even valuable for them to outline the decision process, but the world (and the toolkits) have moved on since.

Yes, I understand what you are saying. I was pointing out that this fact was not clear in your blog post. Stalwart means robust, strong, well built. Your blog post characterized that you were upset that they reviewed such stalwart programs which left me thinking, "as opposed to what?" I was left with the impression that the newer versions that you listed were not as well built as the one they reviewed leaving me to ask myself, "why would I want to use a less stable newer version?" If your blog post were

"jQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. jQuery is designed to change the way that you write JavaScript." - jQuery homepage [jquery.com]

jQuery is great because it's really small and really easy to use. I know very little about js and have absolutely no interest in learning all the gotchas related to cross-browser js development so I leave it to jQuery to do that for me. jQuery allows me

It's disappointing they omitted jquery [jquery.com]. I've been using prototype + scriptaculous for a year and a half, but after a friend's recommendation, I took a look at jquery. I decided to try it for a day as I start the rewrite of mogopop [mogopop.com]'s authoring tool, and now I'm now comitted to using it for the entire rewrite and all future projects.

jquery's killer features are its selector syntax and Chainability [jquery.com]. From the tutorial, I can say "to all 'a' tags, add the 'test' class and show them" with
$("a").addClass("test").show(). Or just the 'a' with id 'bar' with $('a#bar'), or just 'a' with class 'baz' with $('a.baz'). It's simple and concise, and perfect for most of today's ajax uses.

With its Ruby like syntax and solid plugin architecture, it's sad it follows the Rails philosophy more than the Rails spinoff Prototype.

I've been looking into web frameworks lately, a lot of different ones (Java, Perl, Python, Ruby based ones). I finally decided upon going the Ruby-on-Rails, and probably the Ruby ActiveScaffold [activescaffold.com] plugin.

One of the things that turns me off about frameworks in general, is the almost maniacal focusing upon AJAX. AJAX can do a lot of things nicely (Google Earth as the classic example), but for most web sites, all it does is add a slight bit more interactivity to forms. And many of the frameworks I looked at, h

I think people are getting confused by the/. blurb. This article is not a review, it is a case study. This company is describing the process that it went through months ago in determining which software to use. That's why some of the versions are out of date. That's why they quickly discounted software packages that didn't work with their existing infrastructure. If you read the very first paragraph it tells you that they had very specific design constraints and that's why some packages weren't evaluated fully. You simply don't have that in a review.

A case study is supposed to give an overview of the decision making process and the implementation phases of the project. And that's exactly what this does. They goal was never to produce a document that gave an objective evaluation of the products, it was to show the decision making process they went through in their evaluation. No where does the Dr. Dobb's site call this a review.

I've actually had the opportunity to use DWR recently, and if you're developing a Java servlet-based application, it's mind-numbingly easy to set up and use. Basically, you tell it which Java objects you want to call methods on, which ones you want to be able to marshal back and forth, and it basically gives you a Javascript interface to all of your code, and it even generates a web page where you can pass in values to the functions and it will do its best at displaying the results of the method call. I tho

DWR is great, but the article doesn't actually review it; if you read, they reject it right at the beginning because it doesn't fit into their architecture (read: they're not using Java). They probably shouldn't have mentioned it at all.

I have had to butt heads with YUI on more than one occasion while working on Gallery2 (a php photo gallery system). It is evil in the worst ways. Often I will give up after chasing functionality through a dozen function calls and still be nowhere near the code that I need to find to decipher the undesirable behavior in question. I admit, opening a popup element with open_popup(x,y,source) might be a bit too much to ask, but when I get literally *TWELVE* levels deep in the function call list and still hav

If you actually read the article, its a pretty sad excuse for a review. Of the 5 frameworks, 2 of them are dismissed immediately because they didn't meet the exact coding styles of their development team for this specific project.

The other 3 aren't really reviewed either, except to describe how well or poorly they matched up with how the author's development team already developed code for their projects. This article is more of a story about one development team's choices during their process of developing a new site for their company than it is a review.

There are many little funny things that just happens when you're coding a web application in JavaScript without a framework/library/toolkit helping you. Unless you're really an AJAX/JavaScript wizard, coding an AJAX-enabled web application on your own and mixing online code receipts is a very dangerous thing to do.

Browser inconsistencies
This is the most obvious one, but only the entry to the rabbit hole. If you are not familiar with the example (maybe not exactly the same, but any AJAX web developer worth his salt should have seen one like that) I give below, then please, PLEASE, do yourself, your fellow developers and your users a favor, resist the urge to hack things together for once, use a mature AJAX framework.

An important part of AJAX is that you need to update what is displayed on the web browser in the client side (by JavaScript), without refreshing the page. This implies that you're very likely to have to create and destroy DOM nodes on the fly. Now, how do you create a radio button in JavaScript?

That's what you would do if you follow the DOM standard. But sorry, this does not work. Try to create a radio button with the above code segment in Internet Explorer 6, you'll get a broken radio button - you can't select it. The correct way to create a radio button by DOM manipulation is described in this MSDN article [microsoft.com]:

Memory leaks
The last one was easy. Do you know you can make a web application that leaks memory like a sieve in Internet Explorer 6 by making a simple circular reference like the following one?

var node = document.createElement("div");node.someAttr = node;

If you're a good programmer, I might have sounded an alarm in your head right now - any circular references involving DOM nodes in IE6 results in memory leaks that persist after URL changes or page refreshes - unless you use an AJAX toolkit that takes care of the issue for you. Have you assigned a DOM as an attribute value under another DOM node in the past? Yes? Then you'd better check your web application for memory leaks with Drip [outofhanwell.com], now.

What's more, it's not just assigning DOM nodes as attributes that would result in memory leaks, closures in JavaScript can also form circular references and cause memory leaks. What makes closures particularly dangerous is that circular references with closures are not easy to spot. For example, the following code segment leaks:

The XMLHttpRequest object is not as simple as you think
Much of the magic of AJAX comes from the XMLHttpRequest object (or its ActiveX equivalent, or an iframe, etc.), right? Sure. If you're only doing something simple via AJAX (like, updating the server time), then you can just copy an XMLHttpRequest code snippet from sites like this [apple.com] and hack away, right?

Plus, even 0.4.2 is quickly aging. Dojo 0.9.0 is readying for an alpha release sometime soon, and will be a great step forward for the library. For my money (or rather, the time it takes to learn & leverage a new technology), Dojo is the best thing going in terms of JS libraries, regardless of their AJAX-y leanings.The learning curve is higher than the others, but the upside is also much, much greater. With a formal 1.0 release scheduled for later this year, and a ton of momentum (both within the com