Многие системные администраторы и разработчики 1С сталкиваются с неприятной ситуацией: при подключении к базе данных через Тонкий клиент скорость работы интерфейса вполне приемлемая, но стоит пользователям открыть ту же самую базу через веб-браузер (веб-клиент), как система начинает безбожно тормозить. Открытие простейших документов или журналов может занимать по несколько секунд, что вызывает волну недовольства со стороны операторов, занимающихся активным вводом первички.
В этой статье мы подробно разберем, почему возникает эта проблема, и рассмотрим комплексные методы оптимизации связки 1С + Apache. Мы выясним, как настроить веб-сервер, параметры публикации и клиентские машины, чтобы приблизить скорость работы в браузере к производительности полноценного тонкого клиента.
Для начала проанализируем ситуацию с технической точки зрения. Веб-клиент 1С — это сложнейшее веб-приложение. Современный интерфейс «Такси» на стороне браузера представляет собой колоссальный объем динамически генерируемого кода на JavaScript.
Когда пользователь работает в веб-клиенте, выполняются следующие процессы:
Тонкий клиент лишен большинства этих недостатков, так как он скомпилирован на C++, эффективно использует многопоточность процессора и напрямую работает с оперативной памятью компьютера. Тем не менее, веб-клиент можно заставить работать быстро. Разберем по шагам, как это сделать.
Одним из первых шагов для ускорения работы является управление сжатием данных. Платформа 1С позволяет регулировать этот процесс с помощью параметров командной строки веб-клиента. Если у ваших пользователей медленный интернет, имеет смысл принудительно указать низкую скорость соединения.
Рассмотрим структуру URL-адреса для запуска веб-клиента с оптимизированными параметрами. Мы можем передавать специальные ключи непосредственно в адресной строке браузера:
https://trade.demo.1c.ru/trade/ru_RU/?O=Low&TComp=Deflate
Разберем, что означают эти параметры:
O=Low — указывает платформе, что используется низкая скорость соединения. В этом режиме система минимизирует количество декоративных элементов и оптимизирует сетевые пакеты. Если скорость интернета хорошая, можно использовать O=Normal.TComp=Deflate — принудительно включает сжатие трафика. Если на сервере процессор не перегружен, сжатие значительно ускоряет отклик за счет уменьшения объема передаваемых данных. Если же процессор сервера слабый, сжатие может вызвать микрофризы — в таком случае попробуйте отключить его, передав параметр TComp=None.Каждый раз при открытии форм веб-клиент запрашивает у Apache файлы стилей, картинок и скриптов. Если кэширование на сервере не настроено, браузер будет постоянно отправлять запросы на сервер для проверки актуальности этих файлов. Даже получая в ответ код 304 Not Modified, система тратит драгоценное время на сетевые задержки (RTT).
Чтобы избежать этого, настроим жесткое кэширование статики на уровне Apache. Для этого откроем конфигурационный файл веб-сервера httpd.conf и включим модули mod_expires и mod_headers. Добавим в конфигурационный файл следующие строки:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 31 days"
ExpiresByType text/javascript "access plus 31 days"
ExpiresByType application/javascript "access plus 31 days"
ExpiresByType application/x-javascript "access plus 31 days"
ExpiresByType image/png "access plus 31 days"
ExpiresByType image/gif "access plus 31 days"
ExpiresByType image/jpeg "access plus 31 days"
</IfModule>
После перезапуска Apache браузеры пользователей будут мгновенно брать все тяжелые скрипты и элементы оформления из своего локального кэша, вообще не обращаясь к серверу при открытии новых окон.
Помимо настроек самой 1С, критически важно сжимать текстовый трафик (HTML, XML, JSON, JS, CSS) силами самого веб-сервера. Это снижает объем сетевого трафика в 3–5 раз.
Для этого в файле httpd.conf раскомментируем или добавим модуль mod_deflate:
LoadModule deflate_module modules/mod_deflate.so
И настроим правила сжатия для типов данных, которые активно используются веб-клиентом 1С:
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# Сжимаем только текстовые форматы и скрипты
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
# Исключаем сжатие для изображений и архивов, которые уже сжаты
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|tgz|bz2|sit|rar)$ no-gzip dont-vary
</IfModule>
При каждом интерактивном действии веб-сервер Apache должен быстро передать запрос в кластер 1С. Если под каждый запрос будет создаваться новое сетевое соединение с базой, пользователь будет постоянно ловить секундные задержки на авторизацию и создание сеанса.
Чтобы этого избежать, мы должны настроить пул соединений в файле публикации вашей базы данных. Этот файл называется default.vrd и обычно находится в каталоге публикации базы на веб-сервере. Нам необходимо отредактировать параметры внутри тега <point>:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/base_name"
ib="Connect=Srvr="server_name";Ref="base_name";">
<ws enable="true"
pointJobsMaxCount="10"
poolSize="20"
poolTimeout="60"/>
</point>
Рассмотрим ключевые параметры пула соединений:
poolSize — определяет количество постоянно поддерживаемых «горячих» соединений с базой данных 1С. Запросы пользователей будут обрабатываться мгновенно через уже открытые каналы связи.poolTimeout — время (в секундах), в течение которого неиспользуемое соединение удерживается в пуле перед закрытием.По умолчанию Apache часто работает по устаревшему протоколу HTTP/1.1, который накладывает жесткие ограничения на количество одновременных запросов к серверу от одного клиента. Из-за этого браузер строит «очередь» из запросов на получение картинок и скриптов формы.
Протокол **HTTP/2** поддерживает мультиплексирование, позволяя передавать множество запросов параллельно по одному-единственному TCP-соединению. Это кардинально ускоряет отрисовку сложных интерфейсов 1С.
Для активации HTTP/2 в Apache:
httpd.conf подключите модуль:
LoadModule http2_module modules/mod_http2.so
Protocols h2 http/1.1
Если веб-клиент в браузере по-прежнему не удовлетворяет вашим требованиям по скорости, но у вас нет возможности организовать прямое подключение к серверу 1С по локальной сети через TCP, используйте компромиссный вариант — запуск Тонкого клиента через HTTP/HTTPS.
Для этого при добавлении информационной базы в стартере 1С выберите тип подключения «На веб-сервере» и укажите адрес вашей публикации (например, https://server.ru/base). Для автоматизации такого запуска подойдёт лаунчер для 1С с поддержкой запуска тонкого клиента через веб-сервер.
Преимущества такого подхода:
Поскольку обработка интерфейса веб-клиента сильно завязана на однопоточную производительность процессора (как на ПК пользователя при рендеринге JS, так и на веб-сервере при обработке запросов), критически важно исключить задержки на переключение частот процессора.
Рекомендуется выполнить следующие настройки:
Применив эти настройки в комплексе, вы сможете добиться от веб-клиента 1С высокой отзывчивости и скорости работы, сопоставимой с классическим Тонким клиентом.