1
0
Эх сурвалжийг харах

Cache script content to avoid extra requests

fix #52
Gerald 9 жил өмнө
parent
commit
18f365b77c

+ 3 - 0
src/background/main.js

@@ -131,6 +131,9 @@ var commands = {
     sync.sync(data && sync.service(data));
     return false;
   },
+  GetFromCache: function (data, src) {
+    return _.cache.get(data) || null;
+  },
 };
 
 vmdb.initialized.then(function () {

+ 1 - 0
src/background/requests.js

@@ -198,6 +198,7 @@ var requests = function () {
         return;
       }
       if ((!x.status || x.status == 200) && !/^\s*</.test(x.responseText)) {
+        _.cache.set(req.url, x.responseText);
         var url = chrome.extension.getURL('/options/index.html') + '#confirm/' + encodeURIComponent(req.url);
         if (req.tabId < 0) _.tabs.create(url);
         else _.tabs.get(req.tabId).then(function (t) {

+ 1 - 0
src/background/sync/index.js

@@ -242,6 +242,7 @@ var sync = function () {
             _this.config.clear();
             _this.authState.set('unauthorized');
           } else {
+            console.error(err);
             _this.authState.set('error');
           }
           _this.syncState.set('idle');

+ 27 - 0
src/background/utils.js

@@ -182,6 +182,33 @@ var searchParams = {
   },
 };
 
+_.cache = function () {
+  function get(key) {
+    var obj = cache[key];
+    return obj && obj.value;
+  }
+  function set(key, value) {
+    if (value) {
+      var obj = cache[key];
+      if (!obj) obj = cache[key] = {
+        key: key,
+      };
+      obj.value = value;
+      if (obj.timer) clearTimeout(obj.timer);
+      obj.timer = setTimeout(function () {
+        set(key);
+      }, 3000);
+    } else {
+      delete cache[key];
+    }
+  }
+  var cache = {};
+  return {
+    get: get,
+    set: set,
+  };
+}();
+
 _.tabs = {
   create: function (url) {
     chrome.tabs.create({url: url});

+ 23 - 11
src/options/views/confirm.js

@@ -138,17 +138,29 @@ var ConfirmView = BaseView.extend({
   },
   getScript: function (url) {
     var _this = this;
-    var xhr = new XMLHttpRequest;
-    xhr.open('GET', url, true);
-    return new Promise(function (resolve, reject) {
-      xhr.onload = function () {
-        resolve(this);
-      };
-      xhr.onerror = function () {
-        _this.showMessage(_.i18n('msgErrorLoadingData'));
-        reject(this);
-      };
-      xhr.send();
+    return _.sendMessage({
+      cmd: 'GetFromCache',
+      data: url,
+    })
+    .then(function (text) {
+      return text ? {
+        status: 200,
+        responseText: text,
+      } : Promise.reject();
+    })
+    .catch(function () {
+      return new Promise(function (resolve, reject) {
+        var xhr = new XMLHttpRequest;
+        xhr.open('GET', url, true);
+        xhr.onload = function () {
+          resolve(this);
+        };
+        xhr.onerror = function () {
+          _this.showMessage(_.i18n('msgErrorLoadingData'));
+          reject(this);
+        };
+        xhr.send();
+      });
     });
   },
   getTimeString: function () {