У меня есть веб-приложение, которое извлекает данные из нескольких больших электронных таблиц, и мы хотели настроить кэш-память для ускорения работы приложения, позволяя при необходимости листам обновлять кэш-память.
По сути, у нас есть скрипт кеша, содержащий функции для получения кеша, установки новой записи в кеш и некоторые тестовые функции для очистки / обновления. Веб-приложение может без проблем извлекать кэш, но когда листы пытаются заменить кэшированную запись (используя функцию put (ключ, значение, время)), обновленная информация не появляется при получении кэша в веб-приложение.
Чтобы упростить задачу, я создал четыре базовых сценария тестирования:
Кэш-скрипт
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);
}
Выходной скрипт (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()
}
Обновление скрипта Cache
function updateCache() {
var contents = "Here is new data";
cacher.updateCache(contents);
}
Сценарий второго обновления кэша
function updateCache() {
var contents = "Here is new data 2";
cacher.updateCache(contents);
}
Скрипты # 2,3 и 4 все используют # 1 в качестве библиотеки, оставаясь в режиме разработки, чтобы использовать последнюю версию. Я сделал этот тест дважды, создавая сценарии с нуля.
Первый экземпляр этого теста, второй скрипт обновления, # 4, не будет обновлять кеш. Запустив функцию updateCache (), затем перезагрузив часть веб-приложения # 2, он должен сказать «Вот новые данные 2», но показывает только «новый кеш».
Во втором экземпляре теста и # 3, и # 4 успешно обновили кеш. Я не могу на всю жизнь выяснить, почему это терпит неудачу в одном случае, но не в другом. Я что-то упускаю?