Slow Resources rendering time in 2-5-x

Colin Clark colin.clark at utoronto.ca
Mon Mar 31 01:45:10 UTC 2008


Hi all,

Sorry for the delay in responding. I've been really sick with the flu  
for the past several days...

On 27-Mar-08, at 2:09 PM, Clay Fenlason wrote:
>> Are the dojo/dijit buttons a dead-end or can they be improved?
>
> I don't know, but perhaps a JS maven on the Fluid lists might have
> some suggestions.  Colin or Eli?  Client-side caching of some sort?

A quick profiling with Firebug does show an *awful* lot of cycles  
being sunk into the Dojo rendering process. My first suggestion is to  
upgrade to Dojo 1.1. I know they did a lot of performance tweaking for  
1.0 and beyond. It's likely a trivial upgrade, and worth a shot as a  
quick fix.

As for Dijit's long-term prospects for improvement, that's an  
difficult question. It's a great toolkit, and I have colleagues who  
have invested a lot of hard work and diligence in making it the first  
accessible DHTML toolkit. But I'll be honest in saying that it can be  
very heavyweight. One of the reasons it can be slow is that It always  
imposes a significant amount of client-side template rendering, even  
for simple cases where the server could have easily produced a fully- 
baked DOM for the widget.

Indeed, this is one of the reasons I've encouraged markup over JSON in  
many circumstances. It's faster and it has the potential to degrade  
gracefully.

If the Dojo 1.1 version doesn't improve the performance problems, I'd  
suggest we proceed first by re-evaluating the user interface a little  
bit. Why are we using custom-built menu widgets in the first place? Is  
there anything they provide that a standard HTML select drop-drown  
can't?

If we want to stick with a custom DHTML widget instead of a standard  
form element, I'd be willing to help roll a simple alternative to the  
Dijit drop-down button. Fluid's recent work on jQuery accessibility  
plugins will be pretty useful for this. Here's a simple sketch of what  
I'm thinking:

Some decently semantic, Velocity-rendered markup for the drop-down:

<span id="drop-down-button">
	<a href="#">Add...</a>
	<ol id="menuItems" class="closed">
		<li><a href="...">Upload Files</a></li>
		<li><a href="...">Create Folders</a></li>
		<li><a href="...">Add Web Links (URLs)</a></li>
		<li><a href="...">Add Citation List</a></li>
		<li><a href="...">Create HTML Page</a></li>
		<li><a href="...">Create Text Document</a></li>
	</ol>
</span>

And some simple JavaScript code using my plugin to make it keyboard  
navigable:

initComboButton: function (buttonId) {
	var buttonContainer = $("#" + buttonId);
	buttonContainer.tabbable(); // Put the button in the tab order
	buttonContainer.activatable(activateButton); // Make it activatable  
with Enter & Space
	
	var menuItems = $("#menuItems > li", buttonContainer);
         // Make each menu items selectable with the arrow keys
	menuItems.selectable(buttonContainer, selectionHandlers());
	menuItems.activatable(activateOption);
}

Add some ARIA semantics using the jARIA plugin, and we're pretty much  
done.

Hope this helps,

Colin

---
Colin Clark
Technical Lead, Fluid Project
Adaptive Technology Resource Centre, University of Toronto
http://fluidproject.org




More information about the fluid-work mailing list