Главный вывод: SDK SmartSlim экспортирует динамическую библиотеку через стандартный C ABI и поддерживает интеграцию с Python, Java, C# и Rust. Основной поток вызова состоит из четырёх шагов: инициализация SDK, создание конфигурации сжатия, выполнение сжатия и освобождение ресурсов. Сжатие одного PDF-файла объёмом 100 МБ занимает около 0,8 секунды, задержка проверки лицензии — менее 5 мс. В этой статье — полные примеры интеграции для трёх языков, таблица параметров API и рекомендации по оптимизации производительности, а также демо пакетного сжатия. Ниже мы начнём с архитектуры SDK и подробно разберём интеграцию для каждого языка.
Если вам нужно вызывать сервис сжатия через HTTP, а не через SDK, рекомендуем сначала прочитатьПрактика вызова Compression API: подробная документация RESTful-интерфейса。
1. Архитектура SDK и принципы интеграции
В основе SDK SmartSlim лежит движок сжатия на Rust, экспортируемый через стандартный C ABI (Application Binary Interface) в виде динамической библиотеки (.so/.dylib/.dll). Любой язык с поддержкой FFI (внешнего интерфейса функций) может загрузить и вызвать её. Преимущества архитектуры: ядро движка пишется один раз на Rust, и одна и та же бинарная библиотека используется многими языками — нет необходимости заново реализовывать логику сжатия.
| Компонент | Технология | Назначение | Выходной артефакт |
|---|---|---|---|
| Ядро движка сжатия | Rust | Выполнение алгоритма сжатия | Статическая библиотека .a/.lib |
| Слой экспорта ABI | Rust #[no_mangle] | Экспорт функций с C-совместимым интерфейсом | Динамическая библиотека .so/.dylib/.dll |
| Языковой слой привязок | FFI каждого языка | Обёртка над вызовами нативного кода | Пакеты/библиотеки для каждого языка |
| Модуль лицензирования | Rust + шифрование | Проверка лицензионного ключа | Встроен в динамическую библиотеку |
| Управление конфигурацией | Rust struct | Управление параметрами сжатия | JSON/TOML-конфигурация |
SDK поставляется с предкомпилированными библиотеками для 6 платформ, охватывающими основные ОС и архитектуры процессоров. Готов к использованию без сборки Rust-кода.
| Платформа | Динамическая библиотека | ОС | Архитектура CPU | Сценарий |
|---|---|---|---|---|
| linux-x64 | libsmartslim.so | Linux | x86_64 | Сервер / десктоп |
| linux-arm64 | libsmartslim.so | Linux | aarch64 | ARM-сервер / Raspberry Pi |
| macos-universal | libsmartslim.dylib | macOS | x86_64+arm64 | Intel + Apple Silicon |
| windows-x64 | smartslim.dll | Windows | x86_64 | Windows-десктоп / сервер |
| linux-server-x64 | libsmartslim.so | Linux | x86_64 | Оптимизированная серверная сборка |
| linux-server-arm64 | libsmartslim.so | Linux | aarch64 | Оптимизированная ARM-серверная сборка |
2. Подробное описание параметров основного API
Основной API SDK делится на четыре группы: инициализация, конфигурация, сжатие и освобождение ресурсов. В таблице ниже перечислены основные функции API и описания их параметров.
| Функция API | Параметры | Возвращаемое значение | Описание |
|---|---|---|---|
| smartslim_init | license_key: String | handle: Handle | Инициализация SDK, проверка лицензии |
| smartslim_create_config | format, level, quality | config: ConfigHandle | Создание конфигурации сжатия |
| smartslim_compress | handle, input, output, config | result: ResultCode | Сжатие одного файла |
| smartslim_compress_batch | handle, files[], config, workers | results[]: ResultCode | Пакетное сжатие (с параллелизмом) |
| smartslim_get_info | handle, filepath | FileInfo: struct | Получение информации о сжатии файла |
| smartslim_free_config | config: ConfigHandle | void | Освобождение ресурсов конфигурации |
| smartslim_free | handle: Handle | void | Освобождение экземпляра SDK |
Параметры конфигурации сжатия поддерживают 4 уровня сжатия (low/medium/high/ultra) × 15 сценариев × 5 режимов производительности (ultrafast/fast/balanced/quality/optimal) — итого 300 комбинаций, покрывающих практически любые задачи.
| Параметр | Допустимые значения | По умолчанию | Описание |
|---|---|---|---|
| format | pdf/image/video/office/ofd | Автоопределение | Тип файла |
| level | low/medium/high/ultra | medium | Уровень сжатия |
| quality | 1–100 | 75 | Фактор качества (изображения/PDF) |
| performance | ultrafast/fast/balanced/quality/optimal | balanced | Режим производительности |
| workers | 1–16 | 4 | Число параллельных потоков |
| security | DISABLED/LOW/MEDIUM/HIGH/MAXIMUM | MEDIUM | Уровень безопасности |
3. Примеры кода интеграции для трёх языков
Ниже приведены полные примеры интеграции на Python, Java и C# — все для сжатия одного PDF-файла.
1. Интеграция на Python (ctypes)
Python загружает динамическую библиотеку и вызывает экспортируемые функции через модуль ctypes. Код ниже выполняет полный цикл: инициализацию SDK, создание конфигурации, сжатие PDF и освобождение ресурсов. Сжатие PDF объёмом 100 МБ занимает около 0,8 секунды.
| Шаг | Код Python | Описание |
|---|---|---|
| 1. Загрузка библиотеки | lib = ctypes.CDLL('./libsmartslim.so') | Загрузка динамической библиотеки |
| 2. Инициализация | handle = lib.smartslim_init(b"YOUR_LICENSE") | Передача лицензионного ключа |
| 3. Создание конфигурации | config = lib.smartslim_create_config(b"pdf", b"medium", 75) | PDF / medium / q75 |
| 4. Выполнение сжатия | lib.smartslim_compress(handle, b"in.pdf", b"out.pdf", config) | Сжатие файла |
| 5. Освобождение ресурсов | lib.smartslim_free_config(config); lib.smartslim_free(handle) | Освобождение памяти |
2. Интеграция на Java (JNI)
Java вызывает динамическую библиотеку через JNI (Java Native Interface). Сначала нужно объявить native-методы, затем загрузить библиотеку. Код ниже показывает основной поток вызова и подходит для интеграции в Java-бэкенды вроде Spring Boot.
| Шаг | Код Java | Описание |
|---|---|---|
| 1. Загрузка библиотеки | System.loadLibrary("smartslim") | Загрузка DLL/SO |
| 2. Объявление метода | native long smartslim_init(String key) | Объявление JNI-метода |
| 3. Инициализация | long handle = smartslim_init("YOUR_LICENSE") | Получение дескриптора экземпляра |
| 4. Создание конфигурации | long config = smartslim_create_config("pdf","medium",75) | Параметры конфигурации |
| 5. Выполнение сжатия | smartslim_compress(handle, "in.pdf", "out.pdf", config) | Сжатие файла |
| 6. Освобождение ресурсов | smartslim_free_config(config); smartslim_free(handle) | Освобождение памяти |
3. Интеграция на C# (P-Invoke)
C# вызывает динамическую библиотеку через P/Invoke (Platform Invocation Services). Внешние функции объявляются атрибутом DllImport; подход подходит для проектов на .NET / .NET Core. Код ниже работает как на Windows, так и на Linux.
| Шаг | Код C# | Описание |
|---|---|---|
| 1. Объявление функции | [DllImport("smartslim")] static extern IntPtr smartslim_init(string key) | Объявление через P-Invoke |
| 2. Инициализация | IntPtr handle = smartslim_init("YOUR_LICENSE") | Получение дескриптора |
| 3. Создание конфигурации | IntPtr config = smartslim_create_config("pdf","medium",75) | Параметры конфигурации |
| 4. Выполнение сжатия | smartslim_compress(handle, "in.pdf", "out.pdf", config) | Сжатие файла |
| 5. Освобождение ресурсов | smartslim_free_config(config); smartslim_free(handle) | Освобождение памяти |
4. Оптимизация производительности и пакетное сжатие
Оптимизация производительности при интеграции SDK ведётся в трёх измерениях: параллелизм, память и пакетная обработка. В таблице ниже сравнивается эффект разных стратегий.
| Стратегия оптимизации | Время на файл | 100 файлов — общее | Потребление памяти | Подходящая лицензия |
|---|---|---|---|---|
| Однопоточный режим | 0,8 с | 80 с | 50 МБ | Trial (1 поток) |
| 4 параллельных потока | 0,8 с | 22 с | 180 МБ | Standard (4 потока) |
| 8 параллельных потоков | 0,8 с | 12 с | 320 МБ | Professional (8 потоков) |
| 16 параллельных потоков | 0,8 с | 7 с | 600 МБ | Enterprise (16+ потоков) |
| Потоковый режим | 1,2 с | 95 с | 15 МБ | Любая лицензия |
Для пакетного сжатия рекомендуется встроенный в SDK интерфейс smartslim_compress_batch: передаёте список файлов и число параллельных потоков, а SDK использует асинхронную диспетчеризацию задач на Rust — это эффективнее, чем самостоятельная реализация многопоточности в каждом языке. Ниже — данные производительности демо пакетного сжатия 100 PDF-файлов.
| Кол-во файлов | Средний размер файла | Исходный общий объём | Объём после сжатия | Время при 8 потоках | Степень сжатия |
|---|---|---|---|---|---|
| 100 PDF | 15 МБ | 1,5 ГБ | 320 МБ | 12 с | 78,7% |
| 100 PNG | 8 МБ | 800 МБ | 180 МБ | 8 с | 77,5% |
| 100 DOCX | 5 МБ | 500 МБ | 120 МБ | 6 с | 76,0% |
| 100 MP4 | 50 МБ | 5 ГБ | 1,8 ГБ | 45 с | 64,0% |
Если хотите узнать о сравнении алгоритмов библиотек сжатия на Rust, см. статьюСравнение библиотек сжатия на Rust: почему мы выбрали Rust для движка。Если нужно развернуть сервис сжатия в контейнере Docker, см. статьюРазвёртывание сервиса сжатия в Docker。
5. Часто задаваемые вопросы (FAQ)
В1: Какие языки программирования поддерживает Compression SDK?
SDK SmartSlim экспортирует динамическую библиотеку через стандартный C ABI и поддерживает интеграцию с четырьмя языками: Python (ctypes), Java (JNI), C# (P-Invoke), Rust (FFI). Поставляется с предкомпилированными библиотеками для 6 платформ (linux-x64/arm64, macos-universal, windows-x64 и др.) — готов к использованию без сборки. Языки, поддерживающие вызов C ABI (Go, Node.js, PHP и т.д.), также могут интегрироваться через собственные механизмы FFI.
В2: Каков поток вызова API Compression SDK?
Стандартный поток вызова состоит из четырёх шагов: 1) вызов smartslim_init для инициализации SDK и передачи лицензионного ключа; 2) вызов smartslim_create_config для создания конфигурации сжатия (формат, уровень, режим производительности); 3) вызов smartslim_compress для выполнения сжатия (входной и выходной путь); 4) вызов smartslim_free для освобождения ресурсов. Сжатие одного PDF объёмом 100 МБ занимает около 0,8 с, задержка проверки лицензии — менее 5 мс.
В3: Как реализовать пакетное сжатие в Compression SDK?
Есть два способа пакетного сжатия. Первый — цикл с вызовом интерфейса сжатия одиночного файла в сочетании с многопоточностью (в Python — concurrent.futures, в Java — ThreadPoolExecutor). Второй — встроенный в SDK интерфейс пакетного сжатия smartslim_compress_batch, которому передаются список файлов и число потоков, а диспетчеризация задач идёт на Rust внутри SDK. Рекомендуется второй способ: лицензия Standard поддерживает 4 потока, Professional — 8, Enterprise — 16 и более.
В4: Что делать при ошибках интеграции Compression SDK?
Типичные ошибки и решения: 1) UnsatisfiedLinkError (Java) или сбой загрузки DLL — проверьте путь к динамической библиотеке и совпадение архитектуры системы; 2) сбой проверки лицензии — проверьте правильность и срок действия ключа; 3) переполнение памяти — уменьшите число потоков или включите потоковый режим; 4) формат не поддерживается — проверьте, поддерживает ли версия SDK нужный формат. Для диагностики рекомендуется включить отладочное логирование или обратиться в техподдержку SmartSlim.
Заключение
SDK SmartSlim благодаря стандартному C ABI обеспечивает подход «пишем один раз — вызываем из любого языка» и поддерживает интеграцию с Python, Java, C# и Rust. Основной поток вызова состоит из четырёх шагов: инициализация, создание конфигурации, выполнение сжатия, освобождение ресурсов. Сжатие одного PDF 100 МБ занимает 0,8 с, пакетное сжатие 100 файлов при 8 потоках — всего 12 с. Оптимизация ведётся в трёх измерениях: параллелизм (4–16 потоков), память (потоковый режим снижает потребление на 75%), пакетная обработка (встроенный batch-интерфейс).
Запомните три момента: во-первых, выбирайте предкомпилированную библиотеку, соответствующую архитектуре системы (6 платформ); во-вторых, для пакетного сжатия предпочтительнее встроенный batch-интерфейс, а не самописная многопоточность; в-третьих, в производственной среде рекомендуется лицензия не ниже Professional (8 потоков) — баланс производительности и стоимости. Если вы предпочитаете вызов через HTTP, а не через SDK, см. практику вызова Compression API.
Похожие материалы
Нужно сжать файлы? Попробуйте SmartSlim
На основе собственного движка сжатия на Rust поддерживает PDF, изображения, видео, Office, OFD — более 40 форматов в 10 категориях; локальное сжатие без передачи данных за периметр.