Непоследовательное поведение при использовании кеша через библиотеку - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть веб-приложение, которое извлекает данные из нескольких больших электронных таблиц, и мы хотели настроить кэш-память для ускорения работы приложения, позволяя при необходимости листам обновлять кэш-память.

По сути, у нас есть скрипт кеша, содержащий функции для получения кеша, установки новой записи в кеш и некоторые тестовые функции для очистки / обновления. Веб-приложение может без проблем извлекать кэш, но когда листы пытаются заменить кэшированную запись (используя функцию put (ключ, значение, время)), обновленная информация не появляется при получении кэша в веб-приложение.

Чтобы упростить задачу, я создал четыре базовых сценария тестирования:

  1. Кэш-скрипт

    function getCache() {
      var cache = CacheService.getScriptCache();
      var cached = cache.get("test");
    
      if (cached != null) {
        return cached;
      }
    
      cache.put("test", "a new cache", 1500);
      cached = cache.get("test");
      return cached;
    }
    
    function clearCache() {
      var cache = CacheService.getScriptCache();
      cache.remove("test");
    }
    
    function updateCache(contents) { 
      var cache = CacheService.getScriptCache();
      cache.put('test', contents);
    }
  2. Выходной скрипт (index.html имеет кнопку clearcache, которая вызывает функцию clearCache () ниже)

    function doGet() {
      var cache = cacher.getCache();
      var html = HtmlService.createHtmlOutputFromFile('index');
      return html.append(JSON.stringify(cache, null, 2));
    }
    
    function clearCache() {
      cacher.clearCache()
    }
    
  3. Обновление скрипта Cache

    function updateCache() {
      var contents = "Here is new data";
      cacher.updateCache(contents);
    }
    
  4. Сценарий второго обновления кэша

    function updateCache() {
      var contents = "Here is new data 2";
      cacher.updateCache(contents);
    }
      

Скрипты # 2,3 и 4 все используют # 1 в качестве библиотеки, оставаясь в режиме разработки, чтобы использовать последнюю версию. Я сделал этот тест дважды, создавая сценарии с нуля. Первый экземпляр этого теста, второй скрипт обновления, # 4, не будет обновлять кеш. Запустив функцию updateCache (), затем перезагрузив часть веб-приложения # 2, он должен сказать «Вот новые данные 2», но показывает только «новый кеш».

Во втором экземпляре теста и # 3, и # 4 успешно обновили кеш. Я не могу на всю жизнь выяснить, почему это терпит неудачу в одном случае, но не в другом. Я что-то упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...