Неизвестная ошибка при работе с хранилищем системного кэша виртуальных ресурсов
Обновлено: 21.11.2024
Начальный домен virsh; [--console] [--paused] [--autodestroy] [--bypass-cache] [--force-boot] команда запускает неактивную виртуальную машину, которая уже была определена, но состояние которой неактивно с момента последнего управляемого сохранения состояния или свежий ботинок. По умолчанию, если домен был сохранен командой virsh managesave, домен будет восстановлен в прежнее состояние. В противном случае он будет загружен заново. Команда может принимать следующие аргументы, и требуется имя виртуальной машины.
--console — прикрепит терминал с работающим virsh к консольному устройству домена. Это уровень выполнения 3.
--paused — если это поддерживается драйвером, он запустит гостевую виртуальную машину в состоянии паузы
Пример 20.3. Как запустить виртуальную машину
В следующем примере запускается виртуальная машина guest1, которую вы уже создали и которая в настоящее время находится в неактивном состоянии. Кроме того, команда подключает гостевую консоль к терминалу, на котором работает virsh:
20.6.2. Настройка автоматического запуска виртуальной машины при загрузке
Команда virsh autostart [--disable] domain автоматически запускает гостевую виртуальную машину при загрузке хост-машины. Добавление аргумента --disable к этой команде отключает автозапуск. В этом случае гость не будет запускаться автоматически при загрузке физической машины хоста.
Пример 20.4. Как сделать так, чтобы виртуальная машина запускалась автоматически при запуске физической машины хоста
В следующем примере виртуальная машина guest1, которую вы уже создали, автоматически запускается при загрузке хоста:
20.6.3. Перезагрузка гостевой виртуальной машины
Перезагрузите гостевую виртуальную машину с помощью команды virsh reboot domain [--mode имя режима]. Помните, что это действие вернется только после того, как оно выполнит перезагрузку, поэтому может пройти некоторое время с этого момента до фактической перезагрузки гостевой виртуальной машины. Вы можете управлять поведением перезагружаемой гостевой виртуальной машины, изменив элемент on_reboot в XML-файле конфигурации гостевой виртуальной машины. По умолчанию гипервизор пытается автоматически выбрать подходящий метод завершения работы. Чтобы указать альтернативный метод, аргумент --mode может указывать список, разделенный запятыми, который включает acpi и агент. Порядок, в котором драйверы будут пробовать каждый режим, не определен и не связан с порядком, указанным в virsh. Для строгого контроля над порядком используйте один режим за раз и повторяйте команду.
Пример 20.5. Как перезагрузить гостевую виртуальную машину
В следующем примере перезагружается гостевая виртуальная машина с именем guest1. В этом примере для перезагрузки используется метод initctl, но вы можете выбрать любой режим, который вам подходит.
20.6.4. Восстановление гостевой виртуальной машины
Команда virsh restore
--bypass-cache: при восстановлении не используется кеш файловой системы, но учтите, что использование этого флага может замедлить операцию восстановления.
--xml — этот аргумент должен использоваться с именем XML-файла. Хотя этот аргумент обычно опускается, его можно использовать для предоставления альтернативного XML-файла для использования на восстановленной гостевой виртуальной машине с изменениями только в тех частях доменного XML, которые относятся к хосту. Например, его можно использовать для учета различий в именах файлов в базовом хранилище из-за моментальных снимков диска, сделанных после сохранения гостевой системы.
--running — переопределяет состояние, записанное в сохраненном образе, чтобы гостевая виртуальная машина запускалась как работающая.
--paused — переопределяет состояние, записанное в сохраненном образе, чтобы запустить гостевую виртуальную машину как приостановленную.
Пример 20.6. Как восстановить гостевую виртуальную машину
В следующем примере восстанавливается гостевая виртуальная машина и ее работающий файл конфигурации guest1-config.xml:
20.6.5. Возобновление работы гостевой виртуальной машины
Команда virsh резюме domain перезапускает процессоры приостановленного домена. Эта операция является немедленной. Гостевая виртуальная машина возобновляет выполнение с того момента, когда оно было приостановлено. Обратите внимание, что это действие не возобновит работу гостевой виртуальной машины, которая не была определена. Это действие не возобновит работу временных виртуальных машин и будет работать только с постоянными виртуальными машинами.
Пример 20.7. Как восстановить приостановленную гостевую виртуальную машину
В этой статье представлен обходной путь для ошибок, возникающих, когда приложения часто выделяют память.
Относится к: Windows 10 — все выпуски
Исходный номер базы знаний: 4055223
Симптомы
Приложения, часто выделяющие память, могут столкнуться со случайными ошибками "недостаточно памяти". Такие ошибки могут привести к другим ошибкам или неожиданному поведению в затронутых приложениях.
Причина
Сбои выделения памяти могут возникать из-за задержек, связанных с увеличением размера файла подкачки для поддержки дополнительных требований к памяти в системе. Потенциальной причиной этих сбоев является то, что размер файла подкачки настроен как «автоматический». Автоматический размер файла подкачки начинается с небольшого файла подкачки и автоматически увеличивается по мере необходимости.
Система ввода-вывода состоит из множества компонентов, включая фильтры файловой системы, файловые системы, фильтры томов, фильтры хранения и т. д. Конкретные компоненты в данной системе могут вызывать вариации в увеличении размера файла подкачки.
Временное решение
Чтобы обойти эту проблему, настройте размер файла подкачки вручную. Для этого выполните следующие действия:
- Нажмите клавишу с логотипом Windows + клавишу паузы/разрыва, чтобы открыть свойства системы.
- Выберите «Дополнительные параметры системы», а затем выберите «Настройки» в разделе «Производительность» на вкладке «Дополнительно».
- Перейдите на вкладку "Дополнительно", а затем выберите "Изменить" в разделе "Виртуальная память".
- Снимите флажок Автоматически управлять размером файла подкачки для всех дисков.
- Выберите «Нестандартный размер», а затем задайте значения «Начальный размер» и «Максимальный размер» для файла подкачки. Мы рекомендуем установить начальный размер в 1,5 раза больше объема оперативной памяти в системе.
- Нажмите «ОК», чтобы применить настройки, а затем перезапустите систему. Если вы продолжаете получать сообщения об ошибке "недостаточно памяти", увеличьте "начальный размер" файла подкачки.
Статус
Microsoft подтвердила, что это проблема Windows 10.
Подробнее
Если вы столкнулись с этой проблемой при использовании компилятора Microsoft Visual C++ (cl.exe), вы можете увидеть периодически возникающие ошибки сборки, подобные приведенным ниже:
- Неустранимая ошибка C1076: ограничение компилятора: достигнута внутренняя куча; используйте /Zm, чтобы указать более высокий предел
- Неустранимая ошибка C1083: невозможно открыть typefile: 'файл': сообщение
- Неустранимая ошибка C1090: не удалось выполнить вызов API PDB, код ошибки "код": "сообщение"
- Ошибка компилятора C3859: превышен диапазон виртуальной памяти для PCH; пожалуйста, перекомпилируйте с параметром командной строки '-ZmXXX' или выше
Дополнительную информацию об ошибках компилятора Visual C++ и способах их устранения см. в разделе Проблемы и рекомендации, связанные с предварительно скомпилированным заголовком (PCH).
Если вы запускаете пользовательский клиент и видите ошибку, связанную с локальным кешем, взгляните сюда, чтобы узнать, может ли помочь одно из приведенных ниже решений!
Совет. Если вы наблюдаете загадочное поведение пользовательского клиента, но не получаете никаких сообщений об ошибках, проверьте, настроен ли пользовательский клиент на использование параметра --silent, который подавляет все сообщения об ошибках. Попробуйте запустить клиент без этой опции и посмотрите, выдаст ли клиент какую-либо полезную информацию об ошибке!
Сообщение «Невозможно создать локальный кеш в C:\Cache…» после запуска pc-client-local-cache.exe
Не удалось создать локальный кеш в папке «C:\Cache». Вместо этого программа будет запущена из сети. Сообщите об этой проблеме вашему сетевому администратору.
Вы увидите эту ошибку, если пытаетесь запустить pc-client-local-cache.exe, но клиент не может создать локальный кеш. Локальный кеш создается в C:\Cache. Это может быть связано с тем, что у учетной записи пользователя нет разрешения на создание файлов на диске C:\.
Если разрешения нельзя изменить, альтернативой является использование pc-client.exe или версии MSI.
Еще один вариант — использовать параметр командной строки для pc-client-local-cache.exe, чтобы использовать альтернативное расположение для кэша. например временный каталог или локальный каталог, в который у пользователей есть права записи: pc-client-local-cache.exe —cache «C:\user-writable-location\»
«Эта программа не может быть запущена из локального кеша и будет запущена из сети. Сообщите об этой проблеме администратору сети после запуска pc-client-local-cache.exe
Эта программа не может быть запущена из локального кеша и будет запущена из сети. Сообщите об этой проблеме вашему сетевому администратору.
Это отличается от ошибки «Невозможно создать локальный кеш…».Это может произойти, когда кеш был создан правильно, но приложение не запустилось. Мы иногда видели, как это происходило, когда групповая политика или программное обеспечение AntiMalware блокировали запуск приложений из каталога. Обычно это делается для предотвращения вредоносных программ, таких как Crypto-locker, например.
Простым решением является развертывание pc-client.exe или версии MSI.
"Произошла непредвиденная ошибка: null", за которой следует "Эта программа не может быть запущена из локального кеша..."
В журналах клиента это можно увидеть следующим образом: Ошибка запуска клиента: ноль, за которым следует трассировка стека с сообщением Недопустимый ресурс изображения
Мы видели, как это происходило, когда клиенты заменяли значок клиента .PNG на собственный файл .JPG при настройке пользовательского клиента. Убедитесь, что пользовательский значок имеет размер 64 x 64 пикселя и представляет собой файл PNG.
Пожалуйста, укажите «PC-15161», если вы столкнулись с этой проблемой, и у вас все еще есть проблемы.
Мы также видели, что это сообщение появлялось при различных обстоятельствах:
- Вышеупомянутая проблема с логотипом User Client (наиболее распространенная)
- Ресурсы — превышение лимита клиентских подключений пользователей – если у вас большое количество клиентов, пытающихся подключиться к серверу приложений (более 8000), сообщите нам об этом, так как нам, возможно, потребуется по-другому взглянуть на ресурсы сервера приложений и изменить значение server.max-threads.
- Проблема с профилем Windows 10. Мы видели, как один клиент столкнулся с этим. Он удалил профиль пользователя Windows 10 по умолчанию, что решило проблему на этой рабочей станции.
Ключевые слова: кеш, локальный кеш, ошибка, ошибка клиента, запуск клиента, запуск клиента
Вы можете найти информацию о действиях, которые необходимо предпринять, если у вас возникнут непредвиденные проблемы с файловым ресурсом.
Темы
Ваша общая папка зависла в статусе CREATING
При создании общего файлового ресурса статус СОЗДАЕТСЯ. Состояние переходит в состояние ДОСТУПНО после создания общей папки. Если ваша общая папка зависла в статусе СОЗДАНИЕ, сделайте следующее:
Убедитесь, что корзина S3, с которой вы сопоставили общую папку, существует. Если ведро не существует, создайте его. После создания корзины состояние общей папки изменится на ДОСТУПНО. Информацию о том, как создать корзину S3, см. в разделе Создание корзины в Руководстве пользователя Amazon Simple Storage Service.
Убедитесь, что имя корзины соответствует правилам именования корзин в Amazon S3. Дополнительную информацию см. в разделе Правила именования корзин в Руководстве пользователя Amazon Simple Storage Service.
Убедитесь, что роль IAM, которую вы использовали для доступа к корзине S3, имеет правильные разрешения, и убедитесь, что корзина S3 указана в качестве ресурса в политике IAM. Дополнительную информацию см. в разделе Предоставление доступа к корзине Amazon S3.
Вы не можете создать общую папку
Если вы не можете создать общий файловый ресурс, так как он завис в состоянии CREATING, убедитесь, что корзина S3, на которую вы сопоставили общий файловый ресурс, существует. Информацию о том, как это сделать, см. в разделе «Ваша общая папка зависла в состоянии CREATING» выше.
Если корзина S3 существует, убедитесь, что служба AWS Security Token Service включена в регионе, где вы создаете файловый ресурс. Если токен безопасности не включен, его следует включить. Информацию о том, как включить токен с помощью AWS Security Token Service, см. в разделе «Активация и деактивация AWS STS в регионе AWS» в Руководстве пользователя IAM.
Общие файловые ресурсы SMB не поддерживают несколько различных методов доступа
Файловые ресурсы SMB имеют следующие ограничения:
Когда один и тот же клиент пытается смонтировать как Active Directory, так и общую папку SMB с гостевым доступом, отображается следующее сообщение об ошибке: Множественные подключения к серверу или общему ресурсу одним и тем же пользователем с использованием более одного имени пользователя не допускаются. . Отключите все предыдущие подключения к серверу или общему ресурсу и повторите попытку.
Клиент Windows не может подключить как гостевой доступ, так и общую папку Active Directory SMB, которая экспортируется одним и тем же шлюзом.
Несколько общих файловых ресурсов не могут записывать в сопоставленную корзину S3
Мы не рекомендуем настраивать корзину S3 таким образом, чтобы несколько общих файловых ресурсов могли записывать в одну корзину S3. Такой подход может привести к непредсказуемым результатам.
Вместо этого мы рекомендуем разрешать запись в каждое ведро S3 только одному общему ресурсу. Вы создаете политику корзины, чтобы разрешить запись в корзину только роли, связанной с вашей общей папкой. Дополнительные сведения см. в разделе Рекомендации по совместному использованию файлов.
Не удается загрузить файлы в корзину S3
Если вы не можете загружать файлы в корзину S3, выполните следующие действия:
Убедитесь, что вы предоставили файловому шлюзу необходимый доступ для загрузки файлов в корзину S3. Дополнительную информацию см. в разделе Предоставление доступа к корзине Amazon S3.
Убедитесь, что роль, создавшая сегмент, имеет разрешение на запись в сегмент S3. Дополнительные сведения см. в разделе Рекомендации по совместному использованию файлов.
Невозможно изменить шифрование по умолчанию, чтобы использовать SSE-KMS для шифрования объектов, хранящихся в моей корзине S3
Если вы измените шифрование по умолчанию и сделаете SSE-KMS (шифрование на стороне сервера с ключами, управляемыми AWS KMS) по умолчанию для корзины S3, объекты, которые файловый шлюз хранит в корзине, не будут шифроваться с помощью SSE-KMS. По умолчанию файловый шлюз использует шифрование на стороне сервера, управляемое с помощью Amazon S3 (SSE-S3), когда он записывает данные в корзину S3. Изменение значения по умолчанию не приведет к автоматическому изменению вашего шифрования.
Чтобы изменить шифрование для использования SSE-KMS с вашим собственным ключом AWS KMS, необходимо включить шифрование SSE-KMS. Для этого вы указываете имя ресурса Amazon (ARN) ключа KMS при создании общей папки. Вы также можете обновить параметры KMS для общей папки с помощью операции API UpdateNFSFileShare или UpdateSMBFileShare. Это обновление применяется к объектам, хранящимся в корзинах S3 после обновления. Дополнительные сведения см. в разделе Шифрование данных с помощью AWS KMS.
Изменения, сделанные непосредственно в корзине S3 с включенным управлением версиями объектов, могут повлиять на то, что вы видите в общей папке
Если в вашей корзине S3 есть объекты, записанные в нее другим клиентом, ваше представление корзины S3 может быть устаревшим из-за управления версиями объектов корзины S3. Всегда следует обновлять кеш перед просмотром интересующих файлов.
Управление версиями объектов – это дополнительная функция корзины S3, которая помогает защитить данные, сохраняя несколько копий объекта с одинаковым именем. Каждая копия имеет отдельное значение идентификатора, например, file1.jpg : ID="xxx" и file1.jpg : ID="yyy" . Количество объектов с одинаковыми именами и их время жизни контролируются политиками жизненного цикла Amazon S3. Дополнительные сведения об этих концепциях Amazon S3 см. в разделе Использование управления версиями и жизненным циклом объектов в Руководстве по Amazon S3 для разработчиков
Когда вы удаляете объект с версией, этот объект помечается маркером удаления, но сохраняется. Только владелец корзины S3 может безвозвратно удалить объект с включенным управлением версиями.
В файловом шлюзе отображаются самые последние версии объектов в корзине S3 на момент выборки объекта или обновления кэша. Файловые шлюзы игнорируют любые старые версии или любые объекты, помеченные для удаления. При чтении файла вы читаете данные из последней версии. Когда вы записываете файл в общую папку, ваш файловый шлюз создает новую версию именованного объекта с вашими изменениями, и эта версия становится последней версией.
Ваш файловый шлюз продолжает считывать более раннюю версию, и обновления, которые вы делаете, основаны на более ранней версии, если новая версия будет добавлена в корзину S3 вне вашего приложения. Чтобы прочитать последнюю версию объекта, используйте действие RefreshCache API или выполните обновление из консоли, как описано в разделе Обновление объектов в корзине Amazon S3/>.
Мы не рекомендуем записывать объекты или файлы в корзину S3 файлового шлюза из-за пределов общей папки.
При записи в корзину S3 с включенным управлением версиями объекта файловый шлюз может создать несколько версий объекта S3
Если включено управление версиями объектов, у вас может быть несколько версий объекта, созданных в Amazon S3, при каждом обновлении файла с вашего клиента NFS или SMB. Вот сценарии, которые могут привести к созданию нескольких версий объекта в корзине S3:
Когда файл изменяется в файловом шлюзе клиентом NFS или SMB после его загрузки в Amazon S3, файловый шлюз загружает новые или измененные данные вместо загрузки всего файла. Изменение файла приводит к созданию новой версии объекта Amazon S3.
Когда файл записывается в файловый шлюз клиентом NFS или SMB, файловый шлюз загружает данные файла в Amazon S3, а затем его метаданные (права собственности, временные метки и т. д.). Загрузка данных файла создает объект Amazon S3, а загрузка метаданных для файла обновляет метаданные для объекта Amazon S3. Этот процесс создает другую версию объекта, в результате чего получается две версии объекта.
Когда файловый шлюз загружает файлы большего размера, может потребоваться загрузить меньшие фрагменты файла, прежде чем клиент завершит запись в файловый шлюз. Некоторые причины этого включают освобождение места в кэше или высокую скорость записи в файл. Это может привести к появлению нескольких версий объекта в корзине S3.
Вы должны следить за своей корзиной S3, чтобы определить, сколько существует версий объекта, прежде чем настраивать политики жизненного цикла для перемещения объектов в другие классы хранения.Вы должны настроить истечение жизненного цикла для предыдущих версий, чтобы свести к минимуму количество версий, которые у вас есть для объекта в вашей корзине S3. Использование репликации в одном регионе (SRR) или репликации между регионами (CRR) между корзинами S3 увеличит объем используемого хранилища. Дополнительные сведения о репликации см. в разделе Репликация.
Не настраивайте репликацию между сегментами S3, пока не поймете, какой объем хранилища используется при включении управления версиями объектов.
Если вы включите управление версиями объектов после установки файлового шлюза, все уникальные объекты будут сохранены (ID=”NULL”), и вы сможете увидеть их все в файловой системе. Новым версиям объектов присваивается уникальный идентификатор (старые версии сохраняются). В зависимости от временной метки объекта в файловой системе NFS можно просмотреть только самую новую версию объекта.
После того как вы включите управление версиями объектов, ваш сегмент S3 нельзя будет вернуть в неверсионное состояние. Однако вы можете приостановить управление версиями. Когда вы приостанавливаете управление версиями, новому объекту присваивается идентификатор. Если объект с таким же именем существует со значением ID=”NULL”, более старая версия перезаписывается. Однако любая версия, которая содержит не-NULL ID, сохраняется. Временные метки идентифицируют новый объект как текущий, а именно тот, который отображается в файловой системе NFS.
Изменения в корзине S3 не отражаются в Storage Gateway
Storage Gateway автоматически обновляет кэш общей папки, когда вы записываете файлы в кэш локально с помощью общей папки. Однако Storage Gateway не обновляет кэш автоматически, когда вы загружаете файл непосредственно в Amazon S3. При этом необходимо выполнить операцию RefreshCache, чтобы увидеть изменения в общем файловом ресурсе. Если у вас несколько общих файловых ресурсов, вы должны запустить операцию RefreshCache для каждого общего файлового ресурса.
Кэш можно обновить с помощью консоли Storage Gateway и интерфейса командной строки AWS (AWS CLI):
Чтобы обновить кэш с помощью консоли Storage Gateway, см. раздел Обновление объектов в корзине Amazon S3.
Чтобы обновить кэш с помощью интерфейса командной строки AWS:
Выполните команду aws storagegateway list-file-shares
Скопируйте номер ресурса Amazon (ARN) общей папки с кешем, который вы хотите обновить.
Запустите команду refresh-cache с вашим ARN в качестве значения для --file-share-arn :
aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:eu-west-1:12345678910:share/share-FFDEE12
Разрешения ACL не работают должным образом
Если разрешения списка управления доступом (ACL) не работают должным образом с вашей общей папкой SMB, вы можете выполнить тест.
Для этого сначала проверьте разрешения на файловом сервере Microsoft Windows или в локальной общей папке Windows. Затем сравните поведение с общим файловым ресурсом вашего шлюза.
Ваш шлюз теряет сетевое подключение к AWS
Ваш шлюз подключается к AWS для асинхронной передачи данных туда и обратно на основе запросов от ваших клиентов файловых ресурсов. Если шлюз потеряет сетевое подключение, ваши приложения, подключающиеся к шлюзу, продолжат работать, используя данные, хранящиеся локально в кэше вашего шлюза. Однако, когда кеш заполняется данными, которые еще предстоит записать в S3 (CacheDirty=100), ваш файловый ресурс станет доступным только для чтения, а новые запросы на запись получат сообщение об ошибке. В случае запросов на чтение, которые не могут быть обслужены из данных в локальном кеше, возникнет ошибка чтения.
После установления соединения с сетью все данные, записанные на шлюз, будут загружены в AWS, и шлюз возобновит нормальную работу. В целом шлюз устойчив к временным потерям сетевого подключения, но он не предназначен для использования в качестве автономного устройства хранения.
Производительность вашего шлюза снизилась после выполнения рекурсивной операции
В некоторых случаях вы можете выполнить рекурсивную операцию, такую как переименование каталога или включение наследования для ACL, и принудительно спустить его вниз по дереву. Если вы сделаете это, ваш файловый шлюз рекурсивно применит операцию ко всем объектам в общей папке.
Например, предположим, что вы применяете наследование к существующим объектам в корзине S3. Ваш файловый шлюз рекурсивно применяет наследование ко всем объектам в корзине. Такие операции могут привести к снижению производительности вашего шлюза.
Интерфейс CacheStorage представляет хранилище для объектов Cache.
-
Предоставляет главный каталог всех именованных кэшей, к которым может обращаться ServiceWorker или другой тип рабочего процесса или области окна (вы не ограничены использованием его только с сервисными работниками).
Используйте CacheStorage.open() для получения экземпляра Cache.
Используйте CacheStorage.match(), чтобы проверить, является ли данный запрос ключом в каком-либо из объектов Cache, отслеживаемых объектом CacheStorage.
Вы можете получить доступ к CacheStorage через глобальное свойство caches.
Примечание. CacheStorage.match() — это удобный метод.Эквивалентную функциональность для сопоставления с записью кэша можно реализовать, возвращая массив имен кэшей из CacheStorage.keys() , открывая каждый кэш с помощью CacheStorage.open() и сопоставляя нужное с помощью Cache.match() .
Примечание. Эта функция доступна в Web Workers
Методы
Проверяет, является ли данный запрос ключом в каком-либо из объектов Cache, которые отслеживает объект CacheStorage, и возвращает обещание, которое разрешается в соответствии с этим соответствием.
Возвращает обещание, которое разрешается как true, если объект Cache, соответствующий cacheName, существует.
Возвращает обещание, которое разрешается в объект Cache, соответствующий cacheName (создается новый кеш, если он еще не существует).
Находит объект Cache, соответствующий cacheName , и, если он найден, удаляет объект Cache и возвращает обещание, которое разрешается как true . Если объект Cache не найден, он разрешается в false .
Возвращает обещание, которое будет разрешено массивом, содержащим строки, соответствующие всем именованным объектам Cache, отслеживаемым CacheStorage . Используйте этот метод для перебора списка всех объектов Cache.
Примеры
Этот фрагмент кода взят из примера sw-test MDN (см. sw-test, работающий в режиме реального времени). Этот сценарий сервисного работника ожидает срабатывания события InstallEvent, а затем запускает waitUntil для обработки процесса установки приложения. Он заключается в вызове CacheStorage.open для создания нового кэша, а затем использовании Cache.addAll для добавления в него набора ресурсов.
Во втором блоке кода мы ожидаем срабатывания FetchEvent. Мы создаем собственный ответ следующим образом:
- Проверьте, найдено ли совпадение с запросом в CacheStorage. Если да, подайте это.
- Если нет, получить запрос из сети, затем также открыть кеш, созданный в первом блоке, и добавить в него клон запроса с помощью Cache.put ( cache.put(event.request, response.clone() ) .)
- Если это не удается (например, из-за того, что сеть не работает), верните резервный ответ.
Наконец, верните результат, равный которому был получен пользовательский ответ, с помощью FetchEvent.respondWith .
В этом фрагменте показано, как можно использовать API вне контекста сервис-воркера, а также используется оператор await для более читаемого кода.
Читайте также: