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 ),
|
annotationStack = new ve.dm.AnnotationSet( store ),
|
||||||
annotatedHtml = [],
|
annotatedHtml = [],
|
||||||
$wrapper = $( '<div>' ),
|
$wrapper = $( '<div>' ),
|
||||||
$current = $wrapper;
|
$current = $wrapper,
|
||||||
|
buffer = '';
|
||||||
|
|
||||||
|
function flushBuffer() {
|
||||||
|
if ( buffer !== '' ) {
|
||||||
|
$current.append( buffer );
|
||||||
|
buffer = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openAnnotation( annotation ) {
|
function openAnnotation( annotation ) {
|
||||||
|
flushBuffer();
|
||||||
// Create a new DOM node and descend into it
|
// Create a new DOM node and descend into it
|
||||||
$ann = ve.ce.annotationFactory.create( annotation.getType(), annotation ).$;
|
$ann = ve.ce.annotationFactory.create( annotation.getType(), annotation ).$;
|
||||||
$current.append( $ann );
|
$current.append( $ann );
|
||||||
|
@ -88,6 +97,7 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeAnnotation() {
|
function closeAnnotation() {
|
||||||
|
flushBuffer();
|
||||||
// Traverse up
|
// Traverse up
|
||||||
$current = $current.parent();
|
$current = $current.parent();
|
||||||
}
|
}
|
||||||
|
@ -111,10 +121,15 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
|
||||||
openAnnotation, closeAnnotation
|
openAnnotation, closeAnnotation
|
||||||
);
|
);
|
||||||
|
|
||||||
// Output the actual HTML
|
// Handle the actual HTML
|
||||||
$current.append( itemHtml );
|
if ( typeof itemHtml === 'string' ) {
|
||||||
|
buffer += itemHtml;
|
||||||
|
} else {
|
||||||
|
flushBuffer();
|
||||||
|
$current.append( itemHtml );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
flushBuffer();
|
||||||
return $wrapper.contents();
|
return $wrapper.contents();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue