Why I Moved from PrototypeJS/Scriptaculous to jQuery

A History Lesson

In case it wasn’t obvious, I’m the author of the iMinistries Church Website Content Management System (CMS), a web site CMS specifically designed to meet the needs and budgets of churches and ministries. Our product is over 7 years old. It has taken several twists and turns along the way, thanks mostly to changing technology. I built it on the then-new .NET 1.1 ASP.NET web framework. For the uninitiated, the big change in ASP.NET 1 was the web form, with built-in ViewState. Microsoft envisioned a world where fast “post backs” would create complex interactions. So, that’s what I built.

At the time, creating complex JavaScript interactions was hard work, with browsers changing often and very poor cross-browser support. I’m sure there were versions of jQuery, prototypejs, mootools, dojo and other cross-browser libraries floating around, but I’d barely heard of open source at the time and my colleagues and I hardly trusted it much.

But a couple of years later so-called JavaScript frameworks were popping up everywhere and my colleagues were all trying them. My business was busy and we were having trouble keeping up. I didn’t have a lot of time to investigate and had a friend point out prototypejs. I used it to implement some simple interactions on my site and was hooked. I started building all of my JavaScript on top of prototype and added scriptaculous soon after. It was great.

For 5 years it all served me well and I got pretty darn good with it. There wasn’t much I couldn’t do with enough time and those tools to help.

What Changed?

Really, not much? Those tools continue to be great. They are lightweight and contain a lot of the necessary components to get things done. The problem is that I keep seeing these amazing things happening elsewhere. I know exactly what I would need to do to get them to happen in prototype/scriptaculous, but what I find is that jQuery has a plug-in, with a robust following and continued development efforts, to do the same with little-to-no help from me.

Do you need a slideshow plug-in? How about 20? Do you need a lightbox plug-in? How about 30? Do you need some slick transitions? Here’s a plug-in with tons. Other frameworks have plug-ins, but nowhere near the number, with no where near the user base, with no where near the flexibility.

There was no straw that broke the camels back. My reading of the tea leaves simply says that jQuery is getting better faster than any other framework. I don’t want to get any further behind.

How Was the Transition?

I won’t lie. It was pretty hard. I had to change hundreds of calls the the $ function. Prototype’s $ function is for getting an element by ID, every call to that function was wrong without a # in front. I had to replace all of the scriptaculous effects calls. I had to rip out all of the prototype Ajax calls. I had to find plug-ins to replace every call on the 200+ pages that make up our CMS. It took roughly 1 full development week to get the job done and ready for production. I rewrote and re-tested thousands of lines of code. Not well enough. Once it went to production the tickets starting rolling in. Things weren’t working. It was two weeks before I breathed a sigh of relief that we’d flushed out everything (and there may still be a lingering bug or two in the deeper corners of our application).

Was it Worth It?

Oh, resoundingly, yes. Not only are the plug-ins better, the tutorials are better and I think the whole framework is easier to develop for. I have been cranking out the plug-ins lately. It’s just so easy. Plus, I swear jQuery developers are just a bit more conscientious. They seem to think about the down-stream affects of the things they do and there are less conflicts than we used to find. And whenever we find an issue, we can generally find some issue report, blog entry or stack overflow post about how to fix it.

Thank You

First, a thank you to 37signals, who first and foremost make Basecamp, the best website project management software. We use it and it is excellent for our customer relationships. They are responsible for Ruby on Rails, prototypejs and scriptaculous. Those frameworks have served me well for 5 years now and I appreciate what they made me able to do.

But thank you to the jQuery community, who have taught me through their code and provided me with mostly free amazing plug-ins. Your beer money is on the way.

So, what do you think ?