Кэш blob не включен в этом веб приложении

Обновлено: 06.07.2024

Ситуации для хранения и обработки данных в браузере включают:

  • сохранение состояния клиентского приложения, такого как текущий экран, введенные данные, пользовательские настройки и т. д.
  • утилиты, которые обращаются к локальным данным или файлам и имеют строгие требования к конфиденциальности
  • прогрессивные веб-приложения (PWA), которые работают в автономном режиме

Вот десять вариантов хранения данных браузера:

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

Сохранение данных

Как правило, данные, которые сохраняются, будут:

  • Постоянные (persistent): они остаются до тех пор, пока ваш код не решит удалить их, или
  • изменяемые (volatile) : они остаются до завершения сеанса браузера, обычно, когда пользователь закрывает вкладку

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

Браузеры также записывают состояние страницы. Вы можете уйти с сайта и кликнуть назад или закрыть и снова открыть вкладку; страница должна выглядеть идентично. Переменные и данные, доступные только для сеанса, по-прежнему доступны.

1. Переменные JavaScript

  • размер — нет строгих ограничений, но при заполнении памяти может произойти замедление работы браузера или сбои
  • скорость чтения / записи — самый быстрый вариант
  • сохранность — плохая: данные стираются при обновлении браузера

Сохранение состояния в переменных JavaScript — самый быстрый и простой вариант. Я уверен, что вам не нужен пример, но …

  • легко использовать
  • быстрота
  • нет необходимости в сериализации или десериализации
  • ненадежность: обновление или закрытие вкладки стирает все
  • сторонние скрипты могут исследовать или перезаписывать глобальные значения (window). Вы уже используете переменные. Вы можете рассмотреть возможность сохранения состояния переменной при выгрузке страницы .

2. Хранилище узлов DOM

  • размер — нет строгих ограничений, но не идеально для большого количества данных
  • скорость чтения / записи — Быстрый
  • сохранность — плохая: данные могут быть удалены другими скриптами или обновлением

Большинство элементов DOM на странице или в памяти могут хранить значения в именованных атрибутах. Безопаснее использовать имена атрибутов с префиксом data-:

  • атрибут никогда не будет иметь связанных функций HTML
  • Вы можете получить доступ к значениям с помощью свойства dataset или через методы .setAttribute() и .getAttribute().

Значения хранятся в виде строк, поэтому может потребоваться сериализация и десериализация. Например:

  • вы можете определять значения в JavaScript или HTML, например <main data-value1=»1″>
  • полезно для хранения состояния конкретного компонента
  • DOM работает быстро! (вопреки распространенному мнению)
  • ненадёжно: обновление или закрытие вкладки стирает значения
  • только строки: требуется сериализация и десериализация
  • большой DOM влияет на производительность
  • сторонние скрипты могут исследовать или перезаписывать значения

Хранилище узлов DOM работает медленнее, чем переменные. Используйте его экономно в ситуациях, когда удобно хранить состояние компонента в HTML.

3. Web хранилище (localStorage и sessionStorage)

  • размер — 5 МБ на домен
  • скорость чтения / записи — синхронная работа: может быть медленной
  • сохранность — данные остаются до тех пор, пока не будут удалены

Веб-хранилище предоставляет два похожих API для определения пар имя/значение. Используйте:

  • window.localStorage для хранения постоянных данных и
  • window.sessionStorage для сохранения данных только сеанса, пока вкладка браузера остается открытой

Храните или обновляйте именованные элементы с помощью .setItem():

Получайте их с помощью .getItem():

И удалите их с помощью .removeItem():

Другие свойства и методы включают:

  • .length: количество хранимых элементов
  • .key(N): имя N-го ключа
  • .clear(): удаление всех сохраненных элементов

Изменение любого значения вызывает событие хранения в других вкладках / окнах браузера, подключенных к тому же домену. Ваше приложение может ответить соответствующим образом:

  • простой API (пары имя / значение)
  • параметры сеанса и постоянного хранилища
  • хорошая поддержка браузера
  • Только строки: требуется сериализация и десериализация
  • неструктурированные данные без транзакций, индексации или поиска
  • синхронный доступ повлияет на производительность больших наборов данных

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

4. IndexedDB

  • размер — зависит от устройства. Не менее 1 ГБ, но может составлять до 60% оставшегося дискового пространства
  • скорость чтения / записи — быстрый
  • сохранность — данные остаются до тех пор, пока не будут удалены

IndexedDB предлагает низкоуровневый API, похожий на NoSQL, для хранения больших объемов данных. Хранилище можно индексировать, обновлять с помощью транзакций и выполнять поиск с помощью асинхронных методов.

IndexedDB API сложен и требует некоторого манипулирования событиями. Следующая функция открывает соединение с базой данных при передаче имени, номера версии и дополнительной функции обновления (вызываемой при изменении номера версии):

Следующий код подключается к базе данных myDB и инициализирует хранилище объектов todo (аналогично таблице SQL или MongoDB). Затем он определяет автоматически увеличивающийся ключ с именем id:

Как только соединение будет готово, вы можете с помощью .add добавить новые элементы данных в транзакцию:

И вы можете получить значения, например, первый элемент:

  • гибкое хранилище данных с самым большим пространством
  • надежные транзакции, возможности индексации и поиска
  • хорошая поддержка браузера
  • сложный обратный вызов и API на основе событий
  • IndexedDB — лучший вариант для надежного хранения больших объемов данных, но вам может понадобиться библиотека-оболочка, такая как idb , Dexie.js или JsStore .

5. Cache API

  • размер — зависит от устройства, но Safari ограничивает каждый домен до 50 МБ
  • скорость чтения / записи — быстрый
  • сохранность — данные остаются до очистки или через две недели в Safari

Аналогичная функция может получить элемент из кеша. В этом примере она возвращает основной текст ответа:

  • хранит любой сетевой ответ
  • может улучшить производительность веб-приложений
  • позволяет веб-приложению работать в автономном режиме
  • современный API
  • не практично для хранения состояния приложения
  • возможно менее полезно за пределами прогрессивных веб-приложений

Apple недоброжелательно относится к PWA и Cache API

Cache API — лучший вариант для хранения файлов и данных, полученных из сети. Вы, вероятно, могли бы использовать его для хранения состояния приложения, но он не предназначен для этой цели, и есть варианты получше.

5.5 AppCache

AppCache был предшественником Cache API . Это не то решение для хранения, которое вы ищете. Здесь ничего нет. Пожалуйста, двигайтесь дальше.

6. API доступа к файловой системе

  • размер — зависит от оставшегося места на диске
  • скорость чтения / записи — зависит от файловой системы
  • сохранность — данные остаются до тех пор, пока не будут удалены

API доступа к файловой системе позволяет браузеру читать, записывать, изменять и удалять файлы из локальной файловой системы. Браузеры работают в изолированной среде, поэтому пользователь должен предоставить разрешение на определенный файл или каталог. Чтобы веб-приложение могло читать или записывать данные, как настольное приложение, используют FileSystemHandle.

Следующая функция сохраняет объект Blob в локальный файл:

  • веб-приложения могут безопасно читать и записывать в локальную файловую систему
  • меньше необходимости загружать файлы или обрабатывать данные на сервере
  • отличная функция для прогрессивных веб-приложений
  • минимальная поддержка браузера (только Chrome)
  • API может измениться

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

7. API записей файлов и каталогов

  • размер — зависит от оставшегося места на диске
  • скорость чтения / записи — неизвестный
  • сохранность — данные остаются до тех пор, пока не будут удалены

API записей файлов и каталогов предоставляют песочницы файловой системы доступной для домена, которые могут создавать, писать, читать и удалять каталоги и файлов.

  • нестандартные, несовместимость между реализациями и поведение могут измениться.

MDN прямо заявляет: не используйте это на производственных сайтах . Поддержка будет в лучшем случае через несколько лет.

8. Файлы cookie

  • размер — 80 КБ на домен (20 файлов cookie размером до 4 КБ в каждом)
  • скорость чтения / записи — быстрый
  • сохранность — хорошая: данные остаются до тех пор, пока они не будут удалены или не истечет время их жизни

document.cookie устанавливает значения cookie в клиентском JavaScript. Вы должны определить строку с именем и значением, разделенными символом равенства (=). Например:

Значения не должны содержать запятых, точек с запятой или пробелов, поэтому может потребоваться encodeURIComponent():

К дополнительным настройкам файлов cookie можно добавить разделители через точку с запятой, в том числе:

Пример: установить файл cookie, срок действия которого истекает через 10 минут и доступен по любому пути в текущем домене:

document.cookie возвращает строку, содержащую каждую пару имени и значения, разделенную точкой с запятой. Например:

Функция ниже анализирует строку и преобразует ее в объект, содержащий пары имя-значение. Например:

  • надежный способ сохранить состояние между клиентом и сервером
  • ограничен доменом
  • автоматический контроль истечения срока действия с помощью max-age (секунд) или Expires (дата)
  • используется в текущем сеансе по умолчанию (установите дату истечения срока, чтобы данные сохранялись после обновления страницы и закрытия вкладки)

Избегайте файлов cookie, используйте их если нет реальной альтернативы.

9. window.name

  • размер — варьируется, но должно быть несколько мегабайт
  • скорость чтения / записи — быстрый
  • сохранность — данные сеанса остаются до закрытия вкладки

Свойство window.name устанавливает и получает имя контекста активного окна. Вы можете установить одно строковое значение, которое будет сохраняться между обновлениями браузера. Например:

Исследуйте значение, используя:

  • легко использовать
  • может использоваться только для данных сеанса
  • Только строки: требуется сериализация и десериализация
  • страницы в других доменах могут читать, изменять или удалять данные (никогда не используйте их для конфиденциальной информации)

Window.name не предназначен для хранения данных. Это хак, и есть варианты получше.

10. WebSQL

  • размер — 5 МБ на домен
  • скорость чтения / записи — медленная
  • сохранность — данные остаются до тех пор, пока не будут удалены

WebSQL был попыткой перенести в браузер хранилище баз данных, подобное SQL. Пример кода:

Chrome и некоторые версии Safari поддерживают эту технологию, но против нее выступили Mozilla и Microsoft в пользу IndexedDB.

  • разработан для надежного хранения и доступа к данным на стороне клиента
  • знакомый синтаксис SQL, часто используемый серверными разработчиками
  • ограниченная поддержка браузеров
  • несогласованный синтаксис SQL в браузерах
  • асинхронный, но медленный API на основе обратного вызова
  • плохая работа

Не используйте WebSQL! Он не был жизнеспособным вариантом с тех пор, как устарела его спецификация в 2010 году.

Тщательная проверка хранилища

API хранилища может исследовать пространство , доступное для веб-хранилища, IndexedDB, и Cache API. Все браузеры, кроме Safari и IE, поддерживают это API, которое предлагает метод .estimate() для вычисления значений quota (пространства, доступного для домена) и usage (пространства, уже используемого). Например:

Доступны еще два асинхронных метода:

  • .persist() : возвращает true если у сайта есть разрешение на хранение постоянных данных, и
  • .persisted() : возвращает true если сайт уже сохранил постоянные данные

Панель «Приложение» в инструментах разработчика браузера ( в Firefox называется « Хранилище» ) позволяет просматривать, изменять и очищать localStorage, sessionStorage, IndexedDB, WebSQL, файлы cookie и кеш хранилища.

Заключение

Ни одно из этих решений для хранения не является идеальным, и вам нужно будет внедрить несколько решений в сложное веб-приложение. Это означает изучение дополнительных API. Но иметь выбор — это хорошо — конечно, при условии, что вы можете подобрать подходящий вариант!

ПРИМЕНЯЕТСЯ К: 2013 2016 2019 по подписке SharePoint в Microsoft 365

В этой статье описывается настройка кэша BLOB на основе диска, профилей кэша выходных страниц и кэша объектов для веб-приложения в SharePoint Server.

Включение и настройка кэша BLOB, а также изменение конфигурации для профилей кэша вывода страниц и кэша объектов осуществляются в файле Web.config того веб-приложения, к которому требуется применить эти изменения. Изменения, вносимые в файл Web.config, применяются ко всем семействам сайтов в данном веб-приложении.

SharePoint Сервер содержит мониторы производительности кэша, которые проверяют правильность параметров кэша фермы и максимальную производительность кэшинга. Дополнительные сведения см. в рубке Monitor cache performance in SharePoint Server 2016.

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

Дополнительные сведения см. в дополнительных сведениях о операциях параметров кэша в SharePoint Server.

Настройка параметров кэша BLOB

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

Перед внесением изменений в файл web.config создайте его копию под другим именем (например, web.config1), чтобы в случае ошибки можно было восстановить исходный файл.

Настройка параметров кэша BLOB

Проверьте наличие следующих административных учетных данных: для настройки параметров кэша BLOB вы должны быть членом группы "Администраторы" на локальном компьютере.

Откройте диспетчер серверов и в меню Сервис выберите Диспетчер служб IIS.

В службы IIS (IIS) Manager в области Подключения разоширим имя сервера, которое содержит веб-приложение, а затем расширим сайты для просмотра созданных веб-приложений или приложений.

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

В диалоговом окте Open With щелкните Блокнот кнопку ОК.

В открытом в Блокноте файле web.config найдите следующую строку: <BlobCache location="C:\BlobCache\14" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|themedbmp|themedcss|themedgif|themedjpg|themedpng|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv|ogg|ogv|oga|webm|xap)$" maxSize="10" enabled="false" />

По умолчанию максимальный размер изображения при использовании представлений изображений составляет 40 мегапикселей. При необходимости это значение можно изменить, добавив параметр imageRenditionMaxSourcePixels. Пример: <BlobCache location="C:\BlobCache\14" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|themedbmp|themedcss|themedgif|themedjpg|themedpng|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv|ogg|ogv|oga|webm|xap)$" maxSize="10" imageRenditionMaxSourcePixels="100000000" enabled="true" /> Это задает максимальный размер изображения для renditions изображений, чтобы работать на уровне около 100 мега пикселей.

В этой строке замените значение атрибута location на каталог, в котором достаточно места для размещения кэша.

Мы настоятельно рекомендуем указать каталог, который находится не на том диске, где хранятся файлы подкачки серверной операционной системы или файлы журналов сервера.

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

Чтобы изменить размер кэша, введите новое значение для maxSize . Этот размер задается в гигабайтах (ГБ) и по умолчанию равен 10 ГБ.

Не рекомендуется задавать размер кэша менее 10 ГБ. При установке размера кэша обязательно укажите достаточно большое число для того, чтобы предусмотреть резерв не менее 20 процентов от предполагаемого размера контента, который будет храниться в этом кэше.

Чтобы включить кэш BLOB, измените enabled атрибут с "false" на "true" .

Сохраните файл Блокнота и закройте его.

При сохранении изменения в файле web.config веб-приложение в Службы IIS 7.0 автоматически выполняет перезапуск. Такой перезапуск может привести к кратковременному перебою в обслуживании сайтов в этом веб-приложении, а пользователи могут потерять состояние сеанса. Сведения о перезапуске веб-приложений в IIS 7.0 см. в статье Перезапуск процесса IIS.

Настройка параметров профилей кэша

Параметры профилей кэша может настроить администратор семейства сайтов в пользовательском интерфейсе на уровне семейства сайтов или администратор на уровне веб-приложения на интерфейсном веб-сервере. Следует включить кэш вывода страниц на уровне семейства сайтов, прежде чем можно будет настроить профили кэша вывода страниц на уровне семейства сайтов или уровне веб-приложения. Если профили кэша вывода страниц включены на уровне веб-приложения, указанные в файле Web.config параметры применяются ко всем профилям кэша вывода страниц, переопределяя любые значения, которые были введены через пользовательский интерфейс на уровне семейства сайтов.

Чтобы использовать кэш вывода страниц и соответствующие параметры профилей кэша, на сайте следует использовать компонент публикации.

Существует известная проблема, связанная с веб-частью "Поиск контента". Параметр SendContentBeforeQuery в веб-части не работает должным образом на страницах, на которых используется кэширование выводимых данных. Эту проблему устраняет накопительный пакет обновления для SharePoint Server 2013 за март 2013 г. Дополнительные сведения см. в статье 2767999 базы знаний Майкрософт Описание обновления для SharePoint Server 2013 за 12 марта 2013 г.

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

Перед внесением изменений в файл web.config создайте его копию под другим именем (например, web.config1), чтобы в случае ошибки можно было восстановить исходный файл.

Настройка параметров профилей кэша выходных страниц

Проверьте наличие следующих административных учетных данных: для настройки параметров профилей кэша вы должны быть членом группы "Администраторы" на локальном компьютере.

Откройте диспетчер серверов и в меню Сервис выберите Диспетчер служб IIS.

В службы IIS (IIS) Manager в области Подключения разоширим имя сервера, которое содержит веб-приложение, а затем расширим сайты для просмотра созданных веб-приложений или приложений.

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

Щелкните правой кнопкой мышиweb.configнажмите кнопку Открыть и выберите Блокнот, если вам будет предложено найти программу для открытия этого файла.

В открытом в Блокноте файле web.config найдите следующую строку: <OutputCacheProfiles useCacheProfileOverrides="false" varyByHeader="" varyByParam="*" varyByCustom="" varyByRights="true" cacheForEditRights="false" />

Чтобы включить профиль кэша на уровне веб-приложений, измените атрибут useCacheProfileOverrides с "false" на "true" .

Если установить значение true, указанные в файле Web.config параметры применяются ко всем профилям кэша вывода страниц, переопределяя любые значения, которые были введены через пользовательский интерфейс на уровне семейства сайтов.

Чтобы переопременить varyByRights атрибут, измените значение с "true" на "false" . Это устранит требование о том, что пользователи должны иметь идентичные действительные разрешения на всех защищаемых объектах, чтобы просматривать одну и ту же кэшированную страницу в качестве любого другого пользователя.

Чтобы переопременить cacheForEditRights атрибут, cacheForEditRights измените атрибут с "false" на "true" . При этом будет выполнен обход нормального режима работы, при котором страницы людей с разрешениями на правку кэшируются.

Сохраните файл Блокнота и закройте его.

При сохранения изменения в файле web.config веб-приложение службы IIS (IIS) 7.0 автоматически перерабатывается. Такой перезапуск может привести к кратковременному перебою в обслуживании сайтов в этом веб-приложении, а пользователи могут потерять состояние сеанса. Сведения о рециркуляции веб-приложений в IIS 7.0 см. в странице Start or Stop the Web Server (IIS 8).

Настройка параметров кэша объектов

Администратор семейства сайтов может настроить параметры кэша объектов в пользовательском интерфейсе на уровне семейства сайтов, по умолчанию этот кэш включен. Максимальный размер кэша можно настроить на уровне веб-приложения на интерфейсном веб-сервере, чтобы установить ограничение на максимальный объем памяти, занимаемый кэшем для всех семейств сайтов. Например, отдельные семейства сайтов могут иметь кэш объектов, равный 100 МБ, а для веб-приложения может быть установлено значение 1 ГБ. В этом случае все кэши на сервере вместе не могут использовать более 1 ГБ памяти.

Чтобы использовать кэш объектов, на сайте следует использовать компонент публикации.

Чтобы настроить параметры кэша объектов для веб-приложения на интерфейсном веб-сервере, используйте следующую процедуру.

Перед внесением изменений в файл web.config создайте его копию под другим именем (например, web.config1), чтобы в случае ошибки можно было восстановить исходный файл.

Настройка параметров кэша объектов

Проверьте наличие следующих административных учетных данных: для настройки параметров кэша объектов вы должны быть членом группы "Администраторы" на локальном компьютере.

Откройте диспетчер серверов и в меню Сервис выберите Диспетчер служб IIS.

В службы IIS (IIS) Manager в области Подключения разоширим имя сервера, которое содержит веб-приложение, а затем расширим сайты для просмотра созданных веб-приложений или приложений.

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

Щелкните правой кнопкой мыши web.configнажмите кнопку Открыть и выберите Блокнот, если вам будет предложено найти программу для открытия этого файла.

В открытом в Блокноте файле web.config найдите следующую строку: <ObjectCache maxSize="100" />

Чтобы изменить размер кэша, введите новое значение для maxSize . Этот размер задается в мегабайтах (МБ) и по умолчанию равен 100 МБ.

Как известно, одиним из не очень приятных моментов при разработке интернет сайта на Sharepoint является его производительность. Но это не вердикт и с этим можно бороться.

В этой статье я коротко опишу основные возможности по кэшированию, используя которые можно существенно ускорить работу портала.

Во-первых можно включать механизмы кеширования страниц Sharepoint через веб интерфейс.

Возможно включать кэширование объектов и использовать кэширование в разработанных вами веб-частях и элементах управления.

Существует BLOB cache и сжатие средствами IIS.

Необходимо делать оптимизацию страниц и мастер страниц, то есть отключать core.js и core.css там, где они не нужны, убирать ненужные элементы управления. Помещать ваши собственные сборки в GAC и обязательно подписывать их. Использовать <SharePointWebControls:ScriptLink runat="server"/> и <SharePoint:CssLink runat="server" />
для подключения css и js вместо аналогов из html.


Теперь давайте по-порядку.

Кэширование возвращаемой страницы (Output caching)

А теперь представим, что нам необходимо, чтобы при изменении какого-либо параметра в строке адреса (query string) страница бралась не из кэша, а отображалась и получала информацию заново. Этого можно достичь написав в поле Vary by Query String Parameters символ “*”

Кэширование файлов (Blob cache)

Blob Cache помещает элементы SharePoint на диск на сервере. Опция отключена. Для включения необходимо отредактировать web.config.

Кэширование запросов и объектов (Object cache)

  • Навигация и структура портала
  • Поля и элементы списков
  • Данные отображаемые в Content by Query web part и д.р.

Сжатие IIS

Добавить сжатие для JS и CSS можно выполнив в командной строке на сервере:

cscript adsutil.vbs set w3svc/filters/compression/gzip/hcfileextensions "htm" "html" "txt" "js" "css"

cscript adsutil.vbs set w3svc/filters/compression/deflate/hcfileextensions "htm" "html" "txt" "js" "css"

Это продолжение цикла статей, посвященного SharePoint для интернет-сайтов. Первые главы вы можете найти по следующим ссылкам:

В прошлой статье мы рассматривали работу с профилями пользователей.

В этой статье мы рассмотрим оптимизацию производительности SharePoint.

Измерение производительности

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

Далее нужно измерять время загрузки страниц, затем оптимизировать SharePoint и повторять эти действия, пока не будет достигнут нужный результат.

Рассмотрим некоторые инструменты для определения производительности веб-сайтов

    – полезный инструмент, позволяющий измерить производительность сайта, выбрав различные браузеры, в т.ч. мобильные. Для тестирования достаточно указать адрес вашего публичного веб-сайта, и после клика на кнопку Test увидеть результат (рис. 1)

Оптимизация производительности

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

Начнем рассматривать оптимизацию SharePoint 2010 с кэширования.

Кеширование

SharePoint 2010 предоставляет три типа кешей, позволяющих повысить скорость загрузки веб-страниц в браузере – кэш BLOB, кеш вывода страниц и кэш объектов.

Кэш BLOB

Для ускорения загрузки файлов и уменьшения нагрузки на сервер баз данных SharePoint 2010 предоставляет кэш на диске, в котором хранятся файлы, используемые веб-страницами. Эти файлы называются большими бинарными объектами (BLOB). По умолчанию кэш BLOB отключен, поэтому для использования этого кэша его надо включить.

Профили кэша вывода страниц

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

Кэш объектов

Кэш объектов снижает объем трафика между веб-сервером и базой данных, сохраняя объекты (например списки и библиотеки, параметры веб-сайта и макеты страниц) в памяти Front End сервера. Для оптимизации использования кэша объектов можно указать размер кэша. Большой размер позволяет повысить производительность, однако увеличивает потребление ОЗУ. По умолчанию кэш объектов включен на уровне семейства веб-сайтов.

В веб-сервере IIS есть возможность сжатия статических (HTML, CSS) и динамических файлов (ASPX), при этом нагрузка при сжатии ложится на ЦПУ.

При использовании сжатия можно снизить время загрузки страницы на 20-30%. При этом нужно иметь в виду, что сжатие картинок (PNG, JPEG, GIF) не даст сильного эффекта.

По умолчанию сжатие включается для каждого веб-приложения. При необходимости настройки сжатия можете почитать официальное руководство по настройке сжатия.

Веб-части

В одной из предыдущих глав этой серии мы говорили о веб-частях, которые добавляются на страницы.

Ищите закрытые веб-части (веб-часть на странице есть, но она не отображается). Можно обнаружить, открыв страницу для редактирования, или просмотрев в SharePoint Designer.

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

Поиск узких места кода и контента

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

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

Полезный инструмент для проверки производительности – панель разработчика. С помощью панели разработчика (рис. 2) можно посмотреть узкие места на странице. При этом в зависимости от цвета рамки можно понять, нуждается ли страница в оптимизации.


Рис. 2. Панель разработчика

SQL Server

Самой важной частью частью SharePoint является SQL Server. Как мы уже говорили выше, можно снизить нагрузку с SQL Server с использованием кэширования. Рассмотрим, какие еще операции могут снижать производительность SQL Server.

Отдельное внимание следует уделить базе данных поиска, которую рекомендуется устанавливать на отдельный сервер в ферме.

Уделяйте внимание задачам по таймеру (Timer Jobs), которые в зависимости от сложности лучше выполнять в нерабочее время, или даже выходные. Например, это может быть синхронизация большого числа пользователей.

При работе с SQL Server уделяйте внимание IOPS ваших жестких дисков, а также конфигурации сети, которая может обеспечить приемлемую пропускную способность.

В заключительной статье про SharePoint 2010 для интернет-сайтов мы говорили об оптимизации производительности SharePoint 2010.

Если вы решили включить кэширование двоичных объектов, то вам необходимо ответить на следующие вопросы:

1. Как часто меняется контент? Если кэшированный контент часто читается и редко меняется, то в таком случае BLOB кэш будет наиболее эффективен. Примером хорошего кандидата на кэширование является логотип сайта, врятли он будет меняться часто. Плохим кандидатом для кэширование будут документы Word, особенно те с которыми происходят постоянные изменения.

2. Насколько велик размер контента? BLOB кэш дает преимущества при работе с файлами разных размеров. Для больших файлов, BLOB кэш экономит полосу пропускания за счет минимизациии передаваемых данных между WFE и SQL, а так же уменьшает параметр «time to first byte» (TTFB). Для небольших файлов кэш говорит клиентскому приложению кэшировать файлы локально, что значительно снижается общее число запросов на SharePoint сервер.

3. Доступен ли контент анонимно? BLOB кэш может обслуживать анонимные запросы без каких либо дополнительных обращений к SQL серверу, в то время как запросы с аутентификацией требуют обращения к SQL для проверки разрешений. Разрешение анонимного доступа может привести к существенному улучшению пропускной способности.

5. Как много элементов будет кэшироваться? Использование памяти кэшем начинает увеличиваться в обьеме и расти при достижении полумиллиона файлов, в таком случае расход составит около 400 мегабайт оперативной памяти. В большиснтве сценариев вам не придется кэшировать такое колличество файлов, но если вам необходимо кэшировать несколько сотен тысяч файлов обязательно прочитайте абзац данной статьи о большом BLOB кэше.

Включение Blob кэша

BLOB кэш включается для каждого веб сайта Internet Information Services (IIS). Если веб-приложение было расширено более чем на одну зону, то веб сайтов IIS у вас будет несколько. BLOB кэш может быть включен и сконфигурирован независимо для каждой зоны на WFE сервере. Для включения данного кэша нужно выполнить следующие шаги:

1. Отредактировать файл web.config для каждого сайта IIS

2. Найти в XML блок с имененем BlobCache

3. Найти атрибут “enabled” и перевести его в состояние “true”

Хотелось бы заметить, что данные действия необходимо выполнить на каждом WFE сервере. Более подробная инсрукция по включению кэша доступна по ссылке.

Настройка пула приложений

Тюнинг BLOB кэша

Атрибуты, которые можно менять:

param1

Значения по-умолчанию параметра Path:

Атрибуты которые не следует менять (за исключением случаев очень большого BLOB кэша):

param2

Управление BLOB кэшем

Для того, чтобы ваш кэш работал эффективно необходимо придерживаться нескольких рекомендаций:

1. Держите весь контент, который должен кэшироваться в отдельной библиотеке, или нескольких библиотеках. Внесение изменений в библиотеку хранящую кэшированные файлы может привести к аннулированию в кэше всех записей библиотеки. Так же существует несколько операций которые приведут к сбросу кэша, естественно этих операций следует избегать:

2. Для того, чтобы кэш работал корректно, не стоит пытаться работать с файлами кэша напрямую:

3. Windows имеет ограничение в длинне пути файла, который не должен быть длиннее 260 символов. По этой причине длинна URL SharePoint не должна превышать 160 символов, т.к на основе URL будет формироваться путь к файлу в папке хранящей кэш.

Очистка Blob кэша

Теперь давате поговорим о том, что делать если BLOB кэш всетаки посыпался. Ниже приведен ряд действий по возврату кэша в работоспособное состояние:

1. Выполните перезапуск IIS (IISReset) на каждом WFE сервере, это приведет к сериализации и реинициализации индекса.

2. Очистите кэш используя обьектную модель. В PowerShell для этого можно вызвать метод Microsoft.SharePoint.Publishing.PublishingCache.FlushBlobCache(). Используя этот метод вы заставляете все WFE сервера очистить свой ​​ BLOB кэш для веб-приложений.

3. Отключить кэш, удалить папку с кэшем, повторно включить кэш.

BLOB кэш большого размера

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

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

MCT/MVP Илья Рудь

Основан на документе “SharePoint Server Caches Overview ”

Читайте также: