Opened 10 years ago

Closed 10 years ago

#9208 closed defect (fixed)

DialogUnderlay: performance problem on IE6 w/CSS expressions

Reported by: nkolba Owned by: bill
Priority: high Milestone: 1.4
Component: Dijit Version: 1.3.0
Keywords: Cc: Sam Foster
Blocked By: Blocking:

Description (last modified by bill)

CSS expressions on DialogUnderlay are causing performance issues in IE6. Proposed fix is to disable expressions when dialog is hidden.

Change History (6)

comment:1 Changed 10 years ago by bill

Component: GeneralDijit
Owner: anonymous deleted

DialogUnderlay doesn't use any CSS expressions AFAIK. Maybe are you talking about the !BackgroundIFrame?

Can you attach a test case showing this performance issue?

Also, when you write a summary for a ticket try to write something more specific, like "Dialog: performance issue w/CSS expressions on IE6" Thanks.

comment:2 in reply to:  1 Changed 10 years ago by Sam Foster

Owner: set to Sam Foster
Status: newassigned

This came in as a sitepen support ticket originally, I asked Nick to file it here so we/he could track it. A test case would be good though...

Replying to bill:

DialogUnderlay doesn't use any CSS expressions AFAIK. Maybe are you talking about the !BackgroundIFrame?

Yes, the CSS expressions are actually in the BackgroundIframe? class, but as the iframes are recycled, and arent easily hook-able, the workaround we've tested (to the problem observed when using Dialog) adds some code to BackgroundIframe? to remove the expressions in the dijit.DialogUnderlay? class' hide method. This might be an issue elsewhere, best fixed somehow in the BackgroundIframe? itself, but I dont have any reports to go on for that.

comment:3 Changed 10 years ago by bill

Summary: dijit.dialog bug in IE 6DialogUnderlay: performance problem on IE6 w/CSS expressions

ISTM the BackgroundIframe code already removes the expressions when the iframes are put in the re-use queue:

this.push = function(iframe){
	iframe.style.display="none";
	if(dojo.isIE){
		iframe.style.removeExpression("width");
		iframe.style.removeExpression("height");
	}
	queue.push(iframe);
}

Isn't that code working for you (and if not, why not)?

comment:4 Changed 10 years ago by Sam Foster

In the Dialog's fadeOut.onEnd method, you get dijit._underlay.hide(). This only does:

this.domNode.style.display = "none";
if(this.bgIframe.iframe){
	this.bgIframe.iframe.style.display = "none";
}

...It looks like it should be calling dijit._frames.push() there?

comment:5 Changed 10 years ago by bill

Description: modified (diff)
Milestone: tbd1.4
Owner: changed from Sam Foster to bill
Status: assignednew

Ah I see, OK fair enough, I'll check in a fix. Actually just call BackgroundIframe.destroy() will work, since that will save the <iframe> node (although destroying the BackgroundIframe object)

comment:6 Changed 10 years ago by bill

Resolution: fixed
Status: newclosed

(In [19119]) Destroy and recreate BackgroundIframe javascript object... it doesn't actually destroy the <iframe>, since that goes on a re-use stack, and it has the advantage of cleaning up the CSS expressions on the <iframe> to prevent IE6 performance problems.

Fixes #9208 !strict.

Note: See TracTickets for help on using tickets.