The One Feature I Want To See In Apple’s Safari
An Open Letter To Apple Computer
2005.03.19 next
I started using Apple’s Safari web-browser to surf the web ever since Panther came out, and I have to say I’m rather disappointed. Now, don’t get me wrong — Safari’s every bit as good as every other browser I’ve used (Firefox, Netscape, and IE). But when I switched to Safari, I was all excited that Safari would provide the one feature I had been aching for in a web-browser since the mid-’90s:
Snappiness.
And it didn’t.
No, I’m not talking about how fast it renders a web-page. I understand that web-page rendering is complicated, the Internet has a lot of lag, and many web servers just aren’t that quick to respond to requests.
When I say “snappiness,” I’m talking about the ability of an application to instantly react to any mouse-click or key-press that requests a local change. For example, when I click on a tab, it should immediately come to the front. Instead, nothing happens until the current tab’s web-page finishes rendering, and then suddenly the browser realizes that I clicked on another tab and reacts to it. The same goes for clicking the window controls while a page is rendering, or closing a tab that hasn't finished rendering.
It seems that all browsers — Safari included — are written so that the page-rendering engine monopolizes the app and prevents any processing of user events. This is incredibly poor programming in this day and age. Ever since the very first consumer GUI OS (the 1984 Mac) programmers have been warned that their applications are supposed to be structured to check for user events frequently, and react to them when they occur.
In Safari, the problem is actually worse than with other browsers, because the Stop button and the Reload button are one. This makes the Stop button worse than useless, because not only does it not respond to your click until the web-page finishes rendering, but when the web-page does finish rendering, the Stop button changes to a Reload button and then it picks up your click, which causes the whole page to reload!
And, in general, it would be so nice to be able to jump back-and forth-between tabs: clicking a link and then jumping to the other tab to read while the new page loads. Then it wouldn’t matter much how slowly the pages load, because I’d always be reading in another tab.
I haven’t seen the guts of Safari, so I may not know what I’m talking about, but I can think of two ways to remedy this problem:
Liberally sprinkle the rendering engine with well-placed calls to a routine that handles user events, or
Put the rendering engine in its own thread of execution so it doesn’t stall the user-event thread of the app.
If this is done right, there should be no noticeable delay between clicking a tab and seeing it come to the front, or closing a tab and seeing it disappear. Personally, I peg the maximum acceptable delay at about 0.1 seconds. Beyond that, it is both annoying and inexcusable.
Apple’s doing great things, and I couldn’t be happier with the success of the iPod/iTMS, but if they will just provide this one little feature in a new release of Safari, I’ll be tickled pink, and my faith in Apple as the people who “really do it right” will be rejuvenated.

Update 2008.09.05 — It’s been 3.5 years since I wrote this letter, and it looks like Google might have the first real answer to my complaint.
