GWicke has uploaded a new change for review.
https://gerrit.wikimedia.org/r/67382
Change subject: Try to reuse a cached DOM for selective serialization
......................................................................
Try to reuse a cached DOM for selective serialization
Instead of re-parsing, use a cache service (if configured) to get the DOM for
the oldid this revision is based on. This will significantly speed up page
saving and avoid the associated API requests.
Change-Id: Ifaf0d9dc8572650d221d3dc1d29770448a61ee93
---
M js/lib/mediawiki.SelectiveSerializer.js
M js/lib/mediawiki.Util.js
2 files changed, 40 insertions(+), 6 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/82/67382/1
diff --git a/js/lib/mediawiki.SelectiveSerializer.js
b/js/lib/mediawiki.SelectiveSerializer.js
index c8a88a5..6c1f533 100644
--- a/js/lib/mediawiki.SelectiveSerializer.js
+++ b/js/lib/mediawiki.SelectiveSerializer.js
@@ -10,7 +10,9 @@
var WikitextSerializer = require( './mediawiki.WikitextSerializer.js'
).WikitextSerializer,
Util = require( './mediawiki.Util.js' ).Util,
ParserPipelineFactory =
require('./mediawiki.parser.js').ParserPipelineFactory,
- DOMDiff = require('./mediawiki.DOMDiff.js').DOMDiff;
+ DOMDiff = require('./mediawiki.DOMDiff.js').DOMDiff,
+ ParsoidCacheRequest =
require('./mediawiki.ApiRequest.js').ParsoidCacheRequest,
+ async = require('async');
/**
* @class
@@ -144,7 +146,7 @@
// doSerializeDOM
parserPipeline.once( 'document', function ( origDoc ) {
// XXX: need to get body with
.tree.document.childNodes[0].childNodes[1] ?
- var body = origDoc.firstChild.childNodes[1];
+ var body = origDoc.body;
self.env.page.dom = body;
//console.log('calling doSerializeDOM');
//console.log(body.outerHTML);
@@ -166,6 +168,7 @@
* @param {Function} finalcb The callback fired on completion of the
serialization.
*/
SSP.serializeDOM = function ( doc, cb, finalcb ) {
+ var self = this;
if ( this.env.page.dom || this.env.page.domdiff ) {
this.doSerializeDOM(null, doc, cb, finalcb);
} else if ( this.env.page.src ) {
@@ -173,9 +176,40 @@
this.parseOriginalSource( doc, cb, finalcb, null,
this.env.page.src );
} else if (this.env.page.id) {
// Start by getting the old text of this page
- Util.getPageSrc( this.env, this.env.page.name,
- this.parseOriginalSource.bind(this, doc, cb,
finalcb),
- this.env.page.id || null );
+ if (this.env.conf.parsoidCacheURI) {
+ var cacheRequest = new ParsoidCacheRequest(this.env,
+ this.env.page.meta.title,
this.env.page.id);
+ // Fetch the page source and previous revison's DOM in
parallel
+ async.parallel(
+ [
+ Util.getPageSrc( this.env,
this.env.page.name,
+ this.env.page.id ||
null),
+
cacheRequest.once.bind(cacheRequest, 'src')
+ ], function (err, results) {
+ if (err) {
+ console.error('Error
while fetchin page source or original DOM!');
+ // fall back to plain
serialization
+
self.doSerializeDOM(null, doc, cb, finalcb);
+ return;
+ }
+
+ // no error.
+
+ // set the page source
+
this.env.setPageSrcInfo(results[0]);
+
+ // and the original dom
+ this.env.page.dom =
results[1].body;
+
+ self.doSerializeDOM(null, doc,
cb, finalcb);
+ }
+ );
+
+ } else {
+ Util.getPageSrc( this.env, this.env.page.name,
+ this.env.page.id || null,
+ this.parseOriginalSource.bind(this,
doc, cb, finalcb) );
+ }
} else {
this.doSerializeDOM(null, doc, cb, finalcb);
}
diff --git a/js/lib/mediawiki.Util.js b/js/lib/mediawiki.Util.js
index 2d556fe..a24f4bd 100644
--- a/js/lib/mediawiki.Util.js
+++ b/js/lib/mediawiki.Util.js
@@ -1388,7 +1388,7 @@
};
-Util.getPageSrc = function ( env, title, cb, oldid ) {
+Util.getPageSrc = function ( env, title, oldid, cb ) {
title = env.resolveTitle( title, '' );
var pageRequest = new TemplateRequest( env, title, oldid );
pageRequest.once( 'src', function(err, page) {
--
To view, visit https://gerrit.wikimedia.org/r/67382
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifaf0d9dc8572650d221d3dc1d29770448a61ee93
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: GWicke <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits