Проблема с КАПЧОЙ состоит в том, что, когда Вы видите загаженную продажу на Woot, необходимо действовать ОЧЕНЬ быстро как потребитель, если Вы надеетесь получить свой мешок дерьма. Так, если Вы собираетесь использовать форму КАПЧИ, это должно быть очень быстро для клиента.
, Что, если у Вас было большое изображение, скажите 600 x 600, который был просто белым фоном и точками различных цветов или шаблонов, случайным образом помещенных в изображение. Изображение имело бы карту изображения на нем. Этой карте отобразили бы ссылку на маленькие блоки изображения. Скажите, блоки 10 x 10. Пользователь должен был бы просто нажать на определенный тип точки. Это было бы быстро для конца пользователь, и это будет несколько трудный для разработчика бота кодировать. Но это одно не может быть настолько трудно для хорошего создателя бота закончить. Я добавил бы зашифрованные URL.
я разрабатывал систему некоторое время назад, которое зашифрует URL. Если каждый URL на этих страницах зашифровывается со случайным IV, То они все, кажется, уникальны для бота. Я разрабатывал это, чтобы перепутать ботов зондирования. Я еще не завершил технику, но мне действительно кодировали небольшой сайт, это функционировало в этом поместье.
, В то время как эти предложения не являются полным решением, они сделали бы путем тяжелее для создания рабочего бота все еще будучи легкими для человека использовать.
Попробовал немного проб и ошибок, чтобы выяснить, почему SCons работает медленно, пока некоторые выводы (точные результаты, конечно, будут зависеть от структуры и сложности скрипта SCons):
CacheDir ()
не оказывает заметного отрицательного воздействия. Decider ()
оказывает очень незначительное влияние, не стоит беспокоиться. variant_dir
/ VariantDir ()
увеличивает время сборки примерно на 10%. SConstruct
занимает около 10% всего вызова scons. Возможные решения:
scons -u
вместо scons -D
). SConscript
необязательными, чтобы его можно было перестроить только при ручном вызове. Используйте флаг компилятора -isystem
для включения библиотеки вместо -I
, одно это изменение снизило для меня время сборки с 10,5 до 6 с, это можно легко сделать с помощью небольшого вызова sed:
env.ParseConfig ('pkg-config --cflags --libs gtkmm-2.4 | sed "s / -I / -isystem / g" ')
Не совсем уверен, почему это работает, я предполагаю, что это сокращает зависимости, которые выводит gcc
, и, таким образом, в свою очередь зависимости, которые ] scons
треков.
Использование CacheDir ()
и scons -j N
, конечно, также настоятельно рекомендуется, но только ускоряет фактическое построение, а не оценку самого скрипта SCons.
scons md5-sums файлы, чтобы выяснить, что они изменились, поэтому md5 суммирует все ваши файлы.
Вы можете указать ему использовать только временные метки, чтобы решить, что восстанавливать, а не приходится каждый раз суммировать все файлы по MD5, как это делает make, что должно ускорить процесс. Может быть, более хрупкий. например, если файл был изменен в течение 1 секунды после последнего создания, scons этого не заметит. Используйте
env.Decider('timestamp-newer')
Также есть MD5-timestamp, который сначала проверяет временную метку, а затем сравнивает контент с помощью Md5, если он действительно изменился, если временная метка более новая.
env.Decider('MD5-timestamp')
Еще один простой способ ускорить процесс - запустить параллельное построение с помощью Параметр -j.
scons -j 2
На моем 2-ядерном компьютере -j 3 обычно дает наибольшее ускорение.
(Похищено прямо с http://www.scons.org/wiki/GoFastButton )
Команда 'scons --max-drift = 1 - implicit-deps-unchanged 'выполнит вашу сборку как можно быстрее.
ИЛИ:
Еще одна уловка для ускорения работы - избегать повторного связывания программ, когда общая библиотека была изменена, но не перестроена. См. SharedLibrarySignatureOverride