Files
progcode/editorial/reviews/2018-07-draft.md
T
huncode 7c53ffe6bc
Build and deploy / deploy (push) Successful in 14s
revise July and August 2018 articles
2026-07-31 09:41:53 +03:00

12 KiB

Июль 2018 — тройное ревью: таймауты веб-интеграции

Статус: принят в публикационный слой 31 июля 2026 года. Пакет не перезаписывает web/data/articles.json: web/data/editorial-revisions.mjs сопоставляет три ревизии только по стабильным slug.

Партия:

  • editorial-2018-07-practice-http-timeouts
  • editorial-2018-07-mechanism-http-timeouts
  • editorial-2018-07-field-http-timeouts

Карта покрытия

Перспектива Главный вопрос Основной текст без источников Артефакт
Практика Как задать бюджет одного PHP cURL-вызова 7 963 знака конфигурация cURL, временная шкала и правило повтора
Механизм Чем отличаются connect, total и low speed 8 813 знаков матрица стадий, временные поля cURL и условия повторов
Поле Как разобрать зависание по наблюдаемым стадиям 9 588 знаков trace, локальный тестовый сервер и дерево диагностики

У каждой ревизии есть 8, 9 и 9 заголовков второго уровня соответственно, одна доступная таблица с thead и scope, один рисунок с непустым alt и подписью, 2–3 блока кода, нумерованный порядок действий, ограничения и точный заголовок <h2>Проверяемые источники</h2>.

1. Факты и техника — пройдено

Границы cURL

  • Официальная документация libcurl сверена для CURLOPT_CONNECTTIMEOUT, CURLOPT_TIMEOUT, LOW_SPEED_LIMIT, LOW_SPEED_TIME и curl_easy_getinfo.
  • Текст не называет общий CURLOPT_TIMEOUT «read timeout». В нём он ограничивает весь перенос; пара LOW_SPEED_LIMIT и LOW_SPEED_TIME описана как граница средней скорости ниже порога за период.
  • Указано, что connect phase включает DNS и протокольные переговоры до установленного соединения, а connect timeout находится внутри общего timeout. Бюджеты не складываются.
  • CURLE_OPERATION_TIMEDOUT (28) используется только как итог достижения условия таймаута. Статьи требуют записывать пороги, HTTP-код и временные отметки, а не угадывают по одному коду ошибочную стадию.

Повторы и HTTP

  • Для исторической точности сверены RFC 7231, раздел 4.2.2, действовавший в 2018 году, и актуальный RFC 9110, раздел 9.2.2.
  • Ни одна статья не советует «просто повторить запрос». GET и HEAD получают только один ограниченный повтор в остатке бюджета. Изменение состояния требует постоянного ключа операции и документированной дедупликации у партнёра либо проверки статуса. Без этого результат обозначается неопределённым.
  • Примеры с локальной задержкой помечены как учебные. В текст не добавлены вымышленные метрики, пользователи, результаты инструментов или состояние внешнего сервиса.

Исполнимость кода

  • Примеры используют синхронный PHP cURL, доступный для эпохи 2018 года: curl_exec, curl_getinfo, CURLOPT_CONNECTTIMEOUT, CURLOPT_TIMEOUT и базовые временные поля.
  • Код читает диагностику до curl_close, отделяет transport error от HTTP-кода и не записывает в обязательный trace токен, тело запроса или ответ партнёра.

Вердикт первого прохода: утверждения о cURL, HTTP и повторах имеют первичную опору; ложных обещаний и небезопасного автоматического повтора нет.

2. Редактура и голос — пройдено

  • Первый абзац каждой статьи называет симптом и цену ошибки: занятый пул PHP, шестидесятисекундное ожидание или неизвестное состояние синхронизации.
  • Каждая статья держит один главный вопрос. Практика строит бюджет, механизм разделяет настройки, поле ведёт расследование по trace. Три текста не пересказывают друг друга.
  • Речь соответствует М1 2018 года: PHP, cURL, HTTP, DNS, TLS, журнал и локальный тест. Автор ведёт читателя через «сначала проверяем — затем меняем», без позднего жаргона SLO, распределённой трассировки или неподтверждённых показателей.
  • Технический ход сохраняется в каждом разделе: симптом → граница → проверка → действие → ограничение. Общие вводные и слова без проверяемого объекта не использованы.
  • В конце есть критерий результата: trace указывает на стадию, одно ограничение меняется после проверки, а безопасный повтор определяется контрактом операции.

Вердикт второго прохода: объём находится в интервале 5 000–15 000 знаков, голос не опережает 2018 год, а плотность текста не держится на общих оценках.

3. Визуал и выпуск — пройдено для черновика

  • Повторный независимый strict-проход остановил практическую статью: первые 800 знаков содержали конкретный сценарий и цену, но не явный маркер симптома. Первое предложение исправлено на Симптом: карточка товара...; сценарий, причина и цена ошибки сохранены.
  • Созданы три разные SVG: временной бюджет запроса, границы таймаутов и дерево полевого разбора. Каждая схема передаёт решение из соответствующей статьи, а не повторяет заголовок.
  • Все SVG прошли xmllint --noout. Затем они были реально растрированы через sharp в исходном размере и на ширине 343 px. Проверены границы canvas, контраст и читаемость ключевых заголовков.
  • В первой визуальной версии длинные строки в схеме механизма заходили на цветные плашки, а нижние решения в схеме полевого разбора не помещались в карточки. Перед этим вердиктом подписи разбиты по строкам, карточки увеличены; повторный рендер не показывает обрезанных элементов.
  • На узкой ширине схема остаётся внутри контейнера. Её подробный смысл продублирован непустыми alt и figcaption; таблицы имеют существующий контейнер прокрутки .table-scroll в общих стилях.
  • После интеграции основной редактор повторно прогнал strict audit всех трёх slug и production build. Сборка прошла и сгенерировала 374 статические страницы.

Реально выполненные проверки

  1. node --check web/scripts/upgrade-2018-07.mjs — успешно.
  2. node web/scripts/upgrade-2018-07.mjs --print-revisions — успешно; в stdout выводится только JSON трёх ревизий, stderr пуст.
  3. Безопасный import выполнен отдельной командой; модуль экспортирует revisions, не печатает Usage и не меняет exit code.
  4. Структурная проверка экспортированных HTML подтвердила для всех трёх ревизий объём, число h2, figure, table, thead, code, нумерованный список, единый раздел источников, внешние ссылки и непустой alt.
  5. xmllint --noout для трёх SVG — успешно.
  6. Растровый рендер SVG через sharp проверен в исходном размере и на ширине 343 px; после исправления нет визуального выхода за canvas.
  7. git status --short по зоне задачи подтвердил, что до добавления этого ревью появились только четыре разрешённых июльских файла; web/data/articles.json и редакционные общие файлы этой партией не менялись.

Итоговый вердикт: пакет принят к публикации после независимого интеграционного ревью. Commit и push — отдельный выпускной шаг основного редактора.