Как разработчики клиентских приложений SharePoint, мы полагаемся на размещение нашего HTML/CSS/JS в библиотеках документов, таких как Ресурсы сайта, и ссылки на код там с помощью веб-части редактора контента. Одна вещь, которую необходимо иметь в виду, это кэшированные файлы кода и то, как с ними обращаться, когда мы собираемся обновить наш код.

Сценарий: у вас есть обновление Article-Branding.css, которое используется для добавления пользовательских стилей к ряду страниц вашего сайта. После того, как вы загрузили свой файл, вы получаете электронное письмо от вашего клиента, в котором говорится: «Я не вижу изменений! Что за!?"

BlobCache и локальное кэширование браузера

Начнем с обсуждения кэширования в SharePoint. По умолчанию файлы, хранящиеся в библиотеках SharePoint, хранятся в базе данных контента SharePoint без каких-либо версий этих файлов в локальной файловой системе. Это верно даже для файлов CSS/JS. Это означает, что по умолчанию для вашего кода нет механизма кэширования. Это может быть очень плохо для производительности базы данных/сервера — если у вас есть файл CSS, который вызывается при загрузке каждой страницы на многих страницах вашего сайта, вы будете хлопать своей базой данных/сервером, чтобы получить этот файл.

Решение заключается в использовании BlobCache. Это ответ SharePoint на кэширование файловой системы на стороне сервера, и он позволяет указать, что определенные типы файлов могут быть скопированы на диск для более быстрого поиска.

Хотя BlobCache отлично подходит для производительности нашего сервера, это может привести к проблемам с доставкой кода, как показано в нашем примере сценария. В нашем сценарии файл CSS кэшируется в двух местах: в локальном кэше пользователя и в папке BlobCache на сервере SharePoint. Когда наш клиент перешел на наш сайт, Article-Branding.css был обнаружен его браузером в его локальном кеше. Поскольку срок его действия не истек, он вернул эту локальную копию файла, которая устарела!

Очистка кеша

Одно из наиболее элегантных решений этой проблемы называется Cache Busting. Это стратегия, которую вы можете использовать, чтобы заставить браузер думать, что файл, запрашиваемый вашей страницей, является совершенно новым файлом или, по крайней мере, файлом, который он не может найти в локальном кеше. Чтобы использовать очистку кеша, просто добавьте произвольный параметр URL в свою ссылку/скрипт в свой HTML. Например, вы можете изменить ‹link href='article-branding.css'› на ‹link href='article-branding.css?version=1–0'›. Браузер интерпретирует это как другой запрос GET и, не увидев его в локальном кеше, попытается получить его с удаленного сервера. Вы вытащили из кеша эту версию кода.

Я бы рекомендовал всегда связывать ваш CSS/JS с дополнительным параметром URL, подобным этому, который указывает вашу последнюю версию кода. Это позволит избежать локального кеша при первой попытке загрузки после загрузки нового кода.

Но как насчет этой удаленной версии в BlobCache, она устарела? Обновился?!

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

**ВНИМАНИЕ** Блокировка кэша невидима для BlobCache. Это означает, что несмотря на то, что вы запросили Article-Branding.css?version=1–0, файл в SharePoint называется Article-Branding.css и, следовательно, будет сохраняется как Article-Branding.css в папке BlobCache (с добавлением случайных несвязанных символов в имя файла).

Однако бывают случаи, когда BlobCache может стать «поврежденным» и не сможет получить обновленные версии файлов. Это означает, что даже после того, как вы загрузите измененный файл, вы не сможете увидеть свои изменения, несмотря на отсутствие локального кэширования.

К ситуациям, которые могут привести к коррупции, относятся:

  • После восстановления сайта
  • После перезапуска пула приложений, когда не было достаточно времени для корректного завершения работы BlobCache.
  • После сбоя пула приложений

Решения:

Также могут быть случаи, когда попытка ОЧИСТИТЬ BLOBCACHE на самом деле ничего не делает — файлы не удаляются и т. д. Это может потребовать временного отключения BlobCache для этого веб-приложения, ручного удаления файлов BlobCache и повторной -включение BlobCache.

TL;DR:

Всегда используйте параметр URL, который включает версию файла, при создании ссылки из вашего HTML. например ‹link href=’article-branding.css?version=1–0’›

ОЧИСТИТЬ BLOBCACHE

ДОПОЛНИТЕЛЬНОЕ примечание. Хранение файлов кода в Библиотеке стилей может привести к некоторым проблемам. Библиотека стилей имеет некоторые специальные настройки разрешений для анонимных пользователей, которые, кажется, конфликтуют с BlobCache и вызывают ошибки — иногда у вас будут кэшированные файлы, а иногда нет. Вы действительно хотите, чтобы ваши файлы были кэшированы, чтобы помочь максимизировать производительность базы данных/сервера. Я бы рекомендовал создать собственную библиотеку документов и использовать ее для файлов кода.