На момент написания этой записи в дневнике прошло уже 3 месяца с момента выпуска альфа версии LinkMaster. За это время мы сменили 3 алгоритма и дважды переписали двигатель. Последний стал практически самописной реализацией веб-браузера. Взгляните на его параметры:

  1. многопоточность
  2. автоматическое распознавание кодировок KOI8-R, cp1251, iso-8859-1, utf-8 и др
  3. поддержка сжатия страниц в gzip и deflate (выдача некоторых сайтов и поисковиков может быть предварительно упакована для экономии трафика)
  4. возможность обрабатывать редиректы
  5. возможность управления cookies
  6. поддержка прокси с возможностью их предварительного теста на пригодность и автоматической заменой

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

Почему для нас особенно важно строить его на собственных технологиях? Скажем – выбирать не приходится. LinkMaster имеет сложную систему анализа, которая требует большого количества обращений к разным серверам и большого количества трафика. Для справки: на анализ 1 главной страницы сайта с 10 ссылками в среднем утекает 1.2Мб, при анализе 1000 ссылок происходит около 37 000 обращений к поисковикам и сайтам. Попробуйте последовательно открыть в IE или Опере 30 000 сайтов. Поверьте – они все вылетят. Поэтому и был разработан собственный двигатель – в целом очень надежный.

Однако свой окончательный вид он приобрел не сразу. Изначально перед нами стоял следующий вопрос – использовать стандартные решения, как 90% разработчиков других SEO программ или вложить время и средства в разработку своей технологии. Использовать ActiveX компонент Internet Explorerа, как и многие другие, нам показалось как минимум глупо – так как он крайне медленно парсит страницы, является уязвимым и глючным. Пришлось разрабатывать свою технологию.

Сначала двигатель был построен на основе стандартного компонента TClientSocket, входящего в любую поставку Delphi. Был написан некий шаблон функций и он активно использовался при создании различных модулей и потоков. К сожалению, он оказался крайне глючным. Когда мы тестировали простейшие алгоритмы на его основе – все было хорошо. Но после того как алгоритм развился – оказалось, что из-за ошибок в инициализации буфера для приема данных из интернета Windows завершает LinkMaster без всякого предупреждения. Феномен оказался в том, что завершает корректно – словно пользователь сам закрыл окно.

Было решено написать класс для работы с интернетом и обработки http протокола – то есть фактически полноценный движок. За основу мы взяли набор компонентов Internet Direct (Indy) и результатом остались очень довольны.
Во-первых, эти компоненты содержат все мыслимые и немыслимые протоколы интернета, обработчики и вспомогательные функции. Во-вторых, программировать с их помощью – одно удовольствие, большинство функций уже реализованы и при том очень качественно. Время разработки нового движка и реализация на нем нового алгоритма непота оказалось в 2 раза меньше, чем при использовании стандартных компонентов, а стабильность и эффективность – в 2 раза больше.

Работы по совершенствованию LinkMaster ведутся практически каждый день и, несмотря на то, что базовый функционал еще не характеризуется полной стабильностью – основная работа уже завершена – модуль теста на непот работает на 95% правильно и на 98% стабильно. БОльший процент на мой взгляд силами разработчиков обеспечить просто невозможно – программа сильно зависит от поисковиков и сайтов, которые в свою очередь даааалеко не всегда придерживаются стандартов. А предусмотреть все варианты – мы просто не можем.

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