mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-25 14:56:20 +00:00
Performance improvement for getRenderedContents
Instead of calling $.append for every single char - buffer and call $.append only when really needed. Change-Id: I53acfa795ea5dc6a8ca39ce11017daa85c9151d2
This commit is contained in:
parent
e7ee9564e6
commit
93357b8f34
|
@ -78,9 +78,18 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
|
|||
annotationStack = new ve.dm.AnnotationSet( store ),
|
||||
annotatedHtml = [],
|
||||
$wrapper = $( '<div>' ),
|
||||
$current = $wrapper;
|
||||
$current = $wrapper,
|
||||
buffer = '';
|
||||
|
||||
function flushBuffer() {
|
||||
if ( buffer !== '' ) {
|
||||
$current.append( buffer );
|
||||
buffer = '';
|
||||
}
|
||||
}
|
||||
|
||||
function openAnnotation( annotation ) {
|
||||
flushBuffer();
|
||||
// Create a new DOM node and descend into it
|
||||
$ann = ve.ce.annotationFactory.create( annotation.getType(), annotation ).$;
|
||||
$current.append( $ann );
|
||||
|
@ -88,6 +97,7 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
|
|||
}
|
||||
|
||||
function closeAnnotation() {
|
||||
flushBuffer();
|
||||
// Traverse up
|
||||
$current = $current.parent();
|
||||
}
|
||||
|
@ -111,10 +121,15 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
|
|||
openAnnotation, closeAnnotation
|
||||
);
|
||||
|
||||
// Output the actual HTML
|
||||
$current.append( itemHtml );
|
||||
// Handle the actual HTML
|
||||
if ( typeof itemHtml === 'string' ) {
|
||||
buffer += itemHtml;
|
||||
} else {
|
||||
flushBuffer();
|
||||
$current.append( itemHtml );
|
||||
}
|
||||
}
|
||||
|
||||
flushBuffer();
|
||||
return $wrapper.contents();
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue