Price of performance

analysis
Nov 8, 20023 mins

What is lost when server application frameworks focus on run-time speed?

I KEEP UP with trends pretty well, but sometimes the train makes it to the next station before I realize I should be on it. When server-side scripting, VB (Visual Basic), and Java first rose to prominence in the ’90s, I couldn’t understand why anyone would run software that put such a strain on the server. My C++ programs ran many times faster and used far less memory. Looking back, I was embarrassingly smug about it.

What shut me up was Microsoft’s ASP (Active Server Pages) and the JScript language. The time I saved in development more than made up for the run-time performance loss. After working with ASP, PHP, and other scripting languages, I came to understand and appreciate Java. My long-standing prejudice against VB vanished just in time for .Net to make its debut. It was built to be safe, secure, stable, productive, and portable across platforms, just like Java — and I liked it immediately.

Moving performance to the back burner in favor of productivity and usability has transformed enterprise software. Not only are projects getting out of the gate faster, but the languages and frameworks are evolving at an incredible pace. The indirect benefits are many. We use XML to create data files that humans can read and edit, accepting that it takes the server longer to digest them. When you call out to a Web service, you don’t worry about how fast it answers; you’re just grateful you can hit it from where you are.

Now that I’m comfortable in my seat on the “productivity, interoperability, and safety trump performance” train, I hear another whistle in the distance. Microsoft is working to quantify .Net’s run-time speed advantages over J2EE. If such tests help vendors tighten up inefficient code, everybody benefits.

My concern is that this experiment could escape the laboratory. I wouldn’t want to see businesses add benchmark performance to their framework selection criteria. Web services’ deserved ubiquity can’t happen if vendors start bashing one another about how many thousands of calls they can turn around in a minute. I lost a couple of years of productivity to my obsession with the stopwatch. I’m loath to see server software vendors turn back in that direction.

I’ll wait to see how this plays out, but I will make one pre-emptive statement. Of course .Net outperforms J2EE: When you target as few server architectures as .Net, you can optimize for each of them. .Net calls into a fixed set of OS-level enterprise services written in C and C++; J2EE’s modular services, or at least the interfaces to them, are written in Java. Microsoft invested a lot of effort in optimizing .Net’s native-code interoperability layer, a task that would have been impossible if .Net tried to match Java’s platform reach.

When I discussed this with InfoWorld Test Center Lead Analyst Jon Udell, he cut right to the heart: If Microsoft wants to drag race with J2EE, it should use Rotor (the BSD-based shared source edition of .Net). I can’t be more succinct than that.