I'm not Matthew, but I'll offer up a reply based on my experience. On certain browsers, processing an ajax request (depending on what you are doing) may tie up the browser until the payload is processed. As you might expect this depends greatly on what you are doing. By making a set of asynchronous requests that deliver what most folks might consider a pitifully small amount of data, you can effectively implement a DoS attack, freezing the browser. I've done it making "heartbeat" requests 5 seconds apart for data that require significant amounts of redrawing and repositioning of screen elements for a network monitoring prototype. The system isn't technically broken, its tied up because the browser won't accept user input. (incidentally the prototype in question had redraw issues because of the handling of bitmap scaling and transparency in an SVG implementation) This can make for some tricky situations especially in a collaborative system.

An interaction model based on implicit save requires a reasonable, reliable, (dare I say fast) connection with a data store/source. A good desktop app should update simple values and refresh "instantly" (within 90ms). For a similar edit on a web application the latency alone might be twice that. As for sluggish and slow, from my days with desktop apps I remember the following rule of thumb: 1) if you can manage it make it happen within 90ms ( fast enough to percieve its instant) 2) if it takes between that and about 10 seconds, use an hourglass -- tells the user it may take a minute 3) if it takes more than that use a progress bar and update it frequently so the user doesn't think your app froze.

As you probably know, there is no way a browser-based app can do this while communicating with the server constantly. (Bad for the server, bad for latency) So the trick is to cache a set of changes together until it makes sense (performance wise) to sync. So now we have a payload of multiple edits the user thinks they saved, but have not actually been transmitted from our dumb terminal the browser up to the server. If a sync fails, server down, piece of bad data, badly implemented action class, etc... the browser may end up losing all of those changes and redrawing the screen abruptly. Matthew would prefer the user KNOW what they have and have not saved by explicitly telling the system via a button. This is not just Matthew, in the web world its a convention that goes hand in hand with the desire to keep web apps stateless. Its also a convention in most desktop apps when you make a significant change: You must explicitly save emails you create. You explicitly save edits to spreadsheets. Even quicken requires a commit to enter a register item. Enterprise client-server apps are the big exceptions: they may do an implicit commit to keep transaction time small in respect to db locks.

There are always exceptions to this, and I think iCal is at the top of the list.

Mikeal Rogers wrote:
2. Some changes to data require a subsequent data-fetch. For example, when the user makes a change to a recurring event, we need the new recurrence expansion back from the server to repaint the UI.

Could we display a 'Processing...' message the way we do when we d-click to create new events on the calendar?

mde, could you clarify a bit. Do you mean that the UI will become totally un-functional in this state, or just "sluggish" and "slow" when in this state.

I think a "Processing.." message is a great idea, but whether it should be at the bottom left corner out of sight, or in the middle of the UI blocking any interaction depends on how "sluggish" the UI becomes.

-Mikeal


------------------------------------------------------------------------

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list
http://lists.osafoundation.org/mailman/listinfo/design
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list
http://lists.osafoundation.org/mailman/listinfo/design

Reply via email to