Как правильно делать недействительным Декларацию Кэша HTML5 для веб-приложений онлайн/в режиме офлайн?

Я не уверен, почему Вы хотели бы сделать это во-первых. Получающийся набор для любых умеренно больших значений X и Y будет огромен, и вырастет экспоненциально как x, и/или y становятся больше.

Позволяет, говорят, что Ваш набор возможных символов является 26 строчными буквами алфавита, и Вы просите, чтобы Ваше приложение генерировало все перестановки где длина = 5. Принятие Вас не исчерпывает память, которую Вы получите 11,881,376 (т.е. 26 к питанию 5) строки назад. Удар, что длина до 6, и Вы вернете 308 915 776 строк. Эти числа становятся крайне большими, очень быстро.

Вот решение, которое я соединил в Java. Необходимо будет обеспечить два аргумента во время выполнения (соответствующий X и Y). Весело провести время.

public class GeneratePermutations {
    public static void main(String[] args) {
        int lower = Integer.parseInt(args[0]);
        int upper = Integer.parseInt(args[1]);

        if (upper < lower || upper == 0 || lower == 0) {
            System.exit(0);
        }

        for (int length = lower; length <= upper; length++) {
            generate(length, "");
        }
    }

    private static void generate(int length, String partial) {
        if (length <= 0) {
            System.out.println(partial);
        } else {
            for (char c = 'a'; c <= 'z'; c++) {
                generate(length - 1, partial + c);
            }
        }
    }
}
53
задан Justin Searls 11 November 2009 в 06:23
поделиться

3 ответа

Думаю, я понял это: если в чьем-то манифесте кеша есть ошибка (скажем, указанный файл не существует) , то Firefox полностью перестанет обрабатывать все, что связано с applicationCache. Это означает, что он не будет ничего обновлять в вашем кэше, включая кешированный манифест кеша.

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


// Convenience array of status values
var cacheStatusValues = [];
 cacheStatusValues[0] = 'uncached';
 cacheStatusValues[1] = 'idle';
 cacheStatusValues[2] = 'checking';
 cacheStatusValues[3] = 'downloading';
 cacheStatusValues[4] = 'updateready';
 cacheStatusValues[5] = 'obsolete';

 // Listeners for all possible events
 var cache = window.applicationCache;
 cache.addEventListener('cached', logEvent, false);
 cache.addEventListener('checking', logEvent, false);
 cache.addEventListener('downloading', logEvent, false);
 cache.addEventListener('error', logEvent, false);
 cache.addEventListener('noupdate', logEvent, false);
 cache.addEventListener('obsolete', logEvent, false);
 cache.addEventListener('progress', logEvent, false);
 cache.addEventListener('updateready', logEvent, false);

 // Log every event to the console
 function logEvent(e) {
     var online, status, type, message;
     online = (isOnline()) ? 'yes' : 'no';
     status = cacheStatusValues[cache.status];
     type = e.type;
     message = 'online: ' + online;
     message+= ', event: ' + type;
     message+= ', status: ' + status;
     if (type == 'error' && navigator.onLine) {
         message+= ' There was an unknown error, check your Cache Manifest.';
     }
     log('
'+message); } function log(s) { alert(s); } function isOnline() { return navigator.onLine; } if (!$('html').attr('manifest')) { log('No Cache Manifest listed on the tag.') } // Swap in newly download files when update is ready cache.addEventListener('updateready', function(e){ // Don't perform "swap" if this is the first cache if (cacheStatusValues[cache.status] != 'idle') { cache.swapCache(); log('Swapped/updated the Cache Manifest.'); } } , false); // These two functions check for updates to the manifest file function checkForUpdates(){ cache.update(); } function autoCheckForUpdates(){ setInterval(function(){cache.update()}, 10000); } return { isOnline: isOnline, checkForUpdates: checkForUpdates, autoCheckForUpdates: autoCheckForUpdates }

Это, безусловно, было полезно, но я определенно должен запросить у Mozilla функцию, которая распечатывает искаженные кеш-манифесты по крайней мере в консоли ошибок. Не требуется специального кода для присоединения к этим событиям для диагностики такой тривиальной проблемы, как переименованный файл.

25
ответ дан 7 November 2019 в 08:51
поделиться

Отказ от ответственности: мой опыт с манифестами и кешем - это все, что Safari и FF могут обрабатывать некоторые вещи по-другому.

  1. Вы совершенно правы. Если в манифесте есть какие-либо файлы, которые не могут быть найдены, кэширование не произойдет.

  2. Даже если вы в сети, браузер проверит только файл манифеста. В ожидании файла манифеста он продолжит загрузку сайта из кеша - таким образом, это не задержит рендеринг - но это означает, что вы не увидите никаких изменений при первой загрузке.

  3. В следующий раз сайт загружен, если манифест был изменен при предыдущей загрузке, будут загружены новые файлы.

ВСЕГДА НЕОБХОДИМО ПЕРЕЗАГРУЗИТЬ ДВАЖДЫ, чтобы увидеть какие-либо изменения. По факту, Мне иногда приходилось 3 раза перезагружать, чтобы увидеть обновление. Понятия не имею, почему.

При отладке я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно обновить, но все еще имею автономное веб-приложение для тестирования.

После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .

Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.

Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.

Я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно выполнить обновление, но у меня все еще есть автономное веб-приложение для тестирования.

После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .

Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.

Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.

Я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно выполнить обновление, но у меня все еще есть автономное веб-приложение для тестирования.

После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .

Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.

Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.

После завершения php-файл может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш.

Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.

Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.

После завершения php-файл может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш.

Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.

Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.

7
ответ дан 7 November 2019 в 08:51
поделиться

Хм, я только что вызвал update () в кеше, после внесения изменения редактирования в файл манифеста, и получил полную последовательность проверки / загрузки / готовности, сделал одну перезагрузку и изменение текста. сделал в одном из моих js-файлов, который появляется на начальной странице моего приложения, тут же появился.

Кажется, мне нужна только одна перезарядка.

2
ответ дан 7 November 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: