Безопасный scope: Это руководство применимо только к собственным или явно авторизованным QA-, staging- и production-средам. Описаны сценарии диагностики, тестирования и наблюдаемости вашей собственной CAPTCHA-интеграции — не для сторонних сайтов и не для несанкционированных workflow.
Короткий ответ: медиану и P90/P99 считайте сами, минимум на 200 запросах, в своей среде — цифра из чужой статьи описывает чужую сеть и нагрузку, а не вашу. Ниже — методика, шаблон таблицы и скрипт для собственного замера.
Сначала проверьте покрытие типов CAPTCHA
Скорость бессмысленно сравнивать, пока вы не убедились, что провайдер вообще решает нужный вам тип — быстрый ответ по несуществующей поддержке ничего не значит. Прежде чем запускать замер, сверьтесь со списком типов из вашего пайплайна:
- reCAPTCHA v2 и v3 (интерактивные и score-based)
- Cloudflare Turnstile
- GeeTest v3
- image/OCR и BLS
Почему нельзя опираться на чужие цифры
- Сетевая задержка между вашей инфраструктурой и API solver — самый весомый фактор, а она у каждого своя: команда со staging во Frankfurt и команда с серверами в Казахстане или Центральной Азии получат разный RTT на одном и том же провайдере.
- Тип CAPTCHA задаёт разную базовую сложность: image решается быстрее, чем reCAPTCHA v2 с интерактивным challenge.
- Время суток и текущая нагрузка провайдера сдвигают распределение — разовый замер в удобный час не репрезентативен.
- Таймауты, ретраи и параллелизм в вашей интеграции сами по себе меняют итоговое «время ответа», которое видит приложение.
Поэтому цифры из чужих статей стоит считать ориентировочными, а не универсальным обещанием для вашего случая.
Методика измерения на своей выборке
- Зафиксируйте один сценарий: тип CAPTCHA, sitekey, pageurl на staging-странице — не меняйте параметры между провайдерами.
- Соберите минимум 200 успешных запросов на провайдера; ошибки и таймауты считайте отдельным счётчиком.
- Запускайте измерения с одной машины и в одно время суток — иначе сравниваете не провайдеров, а условия сети.
- Считайте медиану, P90 и P99, а не среднее: одна долгая задержка искажает среднее, но почти не двигает медиану.
- Повторите замер в три разных дня и сравните распределения, а не единичные точки.
Скрипт для замера
import os, statistics, time, requests
API_KEY = os.environ['CAPTCHAAI_KEY']
PAGE = 'https://staging.example.com/captcha-demo'
def measure(sitekey: str, n: int = 200) -> dict:
times = []
errors = 0
for _ in range(n):
t0 = time.time()
try:
r = requests.post('https://ocr.captchaai.com/in.php', data={
'key': API_KEY, 'method': 'userrecaptcha',
'googlekey': sitekey, 'pageurl': PAGE, 'json': 1,
}, timeout=30).json()
tid = r['request']
for _ in range(40):
time.sleep(3)
res = requests.get('https://ocr.captchaai.com/res.php',
params={'key': API_KEY, 'action': 'get', 'id': tid, 'json': 1},
timeout=30).json()
if res['status'] == 1:
times.append(time.time() - t0)
break
else:
errors += 1
except Exception:
errors += 1
times.sort()
return {
'n': len(times),
'median': statistics.median(times),
'p90': times[int(len(times) * 0.9) - 1],
'p99': times[int(len(times) * 0.99) - 1],
'errors': errors,
}
Запускайте скрипт по очереди на каждого провайдера с одним sitekey/pageurl — так выборки остаются сравнимыми.
Таблица для записи результатов
| Тип CAPTCHA | Провайдер | Выборка | Медиана, с | P90, с | P99, с | Доля ошибок |
|---|---|---|---|---|---|---|
| reCAPTCHA v2 | A | 200 | ваше значение | ваше значение | ваше значение | ваше значение |
| reCAPTCHA v3 | A | 200 | ваше значение | ваше значение | ваше значение | ваше значение |
| Cloudflare Turnstile | A | 200 | ваше значение | ваше значение | ваше значение | ваше значение |
| GeeTest v3 | A | 200 | ваше значение | ваше значение | ваше значение | ваше значение |
Заполняйте только собственные значения. Это внутренняя выборка, и её не стоит выдавать за универсальное обещание.
От P90/P99 к безопасной публикации результата
Используйте P90/P99 для расчёта таймаутов в продакшене, а медиану — для оценки типичной латентности пользовательского сценария. Никогда не планируйте capacity по среднему значению: одна аномально долгая задержка искажает оценку и приводит к заниженным таймаутам под реальной нагрузкой.
Публикуя результат — внутри команды или во внешней статье — указывайте только собственную методику, размер выборки и ориентировочные значения, без превосходной степени и без обещаний. Отметьте, что результат зависит от типа CAPTCHA, региона, нагрузки и параметров интеграции, и приложите дату замера: цифры устаревают за недели.
Troubleshooting
| Симптом | Что сделать |
|---|---|
| Большой разброс | Увеличьте выборку, повторите в другой день |
| Высокая P99 | Проверьте сетевые таймауты и ретраи |
| Много ошибок | Сверьте sitekey и баланс ключа |
| Разные регионы дают разные цифры | Измеряйте отдельно по каждому региону, не усредняйте |
FAQ
Сколько запросов достаточно для надёжной медианы и P99?
Для медианы хватает 100 запросов, для P90 — около 200, для устойчивого P99 нужно порядка 1000: хвост формируется редкими событиями и на малой выборке не проявляется.
Можно ли использовать бенчмарки из чужих статей вместо своих измерений?
Нет. Опубликованная цифра верна только для сети, региона и момента замера её автора. Берите чужие материалы как ориентир по методике, а не как готовое число для своего SLA.
Как часто повторять измерения после первого замера?
Раз в квартал или после заметного изменения нагрузки, региона деплоя или версии CAPTCHA на целевой странице.
Почему медиана и среднее дают разные выводы на одной выборке?
Среднее чувствительно к редким долгим ответам, медиана показывает «середину» распределения и лучше описывает повседневную скорость.
Связанные руководства
- Быстрый старт CaptchaAI
- QA-тестирование CAPTCHA в авторизованных средах
- Тестирование CAPTCHA API на собственных формах
- Отладка: браузерный тест падает, а API проходит
- Решение reCAPTCHA v2 через API
- Решение Cloudflare Turnstile через API
- Решение GeeTest v3 через API
Готовы измерить CAPTCHA solver в собственной среде? Подключите CaptchaAI.