Browse Source

Improved performance with sync get networker

master
Igor Zhukov 10 years ago
parent
commit
3d2496b3b3
  1. 3
      app/js/lib/mtproto.js
  2. 51
      app/js/lib/mtproto_wrapper.js
  3. 2
      app/js/lib/polyfill.js

3
app/js/lib/mtproto.js

@ -1258,7 +1258,6 @@ angular.module('izhukov.mtproto', ['izhukov.utils'])
console.warn(msgKey, bytesFromArrayBuffer(dataHash)); console.warn(msgKey, bytesFromArrayBuffer(dataHash));
throw new Error('server msgKey mismatch'); throw new Error('server msgKey mismatch');
} }
// console.log(dT(), 'after hash check');
var buffer = bytesToArrayBuffer(messageBody); var buffer = bytesToArrayBuffer(messageBody);
var deserializerOptions = { var deserializerOptions = {
@ -1296,9 +1295,7 @@ angular.module('izhukov.mtproto', ['izhukov.utils'])
} }
}; };
var deserializer = new TLDeserialization(buffer, deserializerOptions); var deserializer = new TLDeserialization(buffer, deserializerOptions);
var response = deserializer.fetchObject('', 'INPUT'); var response = deserializer.fetchObject('', 'INPUT');
// console.log(dT(), 'after fetch');
return { return {
response: response, response: response,

51
app/js/lib/mtproto_wrapper.js

@ -54,7 +54,9 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto'])
} }
if (cache[dcID] !== undefined) { if (cache[dcID] !== undefined) {
return $q.when(cache[dcID]); return {then: function (cb) {
cb(cache[dcID]);
}};
} }
var akk = 'dc' + dcID + '_auth_key', var akk = 'dc' + dcID + '_auth_key',
@ -120,24 +122,17 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto'])
dcID, dcID,
networkerPromise; networkerPromise;
if (dcID = options.dcID) { var cachedNetworker;
networkerPromise = mtpGetNetworker(dcID, options); var stack = (new Error()).stack;
} else { if (!stack) {
networkerPromise = Storage.get('dc').then(function (baseDcID) { try {window.unexistingFunction();} catch (e) {
return mtpGetNetworker(dcID = baseDcID || 2, options); stack = e.stack || '';
}); }
} }
var performRequest = function (networker) {
var cachedNetworker,
stack = false;
networkerPromise.then(function (networker) {
return (cachedNetworker = networker).wrapApiCall(method, params, options).then( return (cachedNetworker = networker).wrapApiCall(method, params, options).then(
function (result) { function (result) {
deferred.resolve(result); deferred.resolve(result);
// $timeout(function () {
// deferred.resolve(result);
// }, 1000);
}, },
function (error) { function (error) {
console.error(dT(), 'Error', error.code, error.type, baseDcID, dcID); console.error(dT(), 'Error', error.code, error.type, baseDcID, dcID);
@ -168,12 +163,8 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto'])
cachedExportPromise[dcID].then(function () { cachedExportPromise[dcID].then(function () {
(cachedNetworker = networker).wrapApiCall(method, params, options).then(function (result) { (cachedNetworker = networker).wrapApiCall(method, params, options).then(function (result) {
deferred.resolve(result); deferred.resolve(result);
}, function (error) { }, rejectPromise);
rejectPromise(error); }, rejectPromise);
});
}, function (error) {
rejectPromise(error);
});
} }
else if (error.code == 303) { else if (error.code == 303) {
var newDcID = error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2]; var newDcID = error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];
@ -187,9 +178,7 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto'])
mtpGetNetworker(newDcID, options).then(function (networker) { mtpGetNetworker(newDcID, options).then(function (networker) {
networker.wrapApiCall(method, params, options).then(function (result) { networker.wrapApiCall(method, params, options).then(function (result) {
deferred.resolve(result); deferred.resolve(result);
}, function (error) { }, rejectPromise);
rejectPromise(error);
});
}); });
} }
} }
@ -197,14 +186,14 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto'])
rejectPromise(error); rejectPromise(error);
} }
}); });
}, function (error) { };
rejectPromise(error);
});
if (!(stack = (stack || (new Error()).stack))) { if (dcID = (options.dcID || baseDcID)) {
try {window.unexistingFunction();} catch (e) { mtpGetNetworker(dcID, options).then(performRequest, rejectPromise);
stack = e.stack || ''; } else {
} Storage.get('dc').then(function (baseDcID) {
mtpGetNetworker(dcID = baseDcID || 2, options).then(performRequest, rejectPromise);
});
} }
return deferred.promise; return deferred.promise;

2
app/js/lib/polyfill.js

@ -128,4 +128,4 @@ if (!Function.prototype.bind) {
}; };
global.setZeroTimeout = setZeroTimeout; global.setZeroTimeout = setZeroTimeout;
})(this); })(this);

Loading…
Cancel
Save