|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.08.2012, 21:53 | #11 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
Код:
Попытайтесь получить всю информацию как можно за меньшее число запросов (это на веб-сервере) нужно менять (т.е. без цикла). Если не получится ищите способ выполнять их асинхронно, т.е. параллельно. Возможно это в какой-то из упомянутых библиотек реализовано. Если не ошибаюсь типичный веб-сервер (в зависимости от настроек) позволяет одновременно до 20-35 соединений. Т.е. ваши 600 запросов можно разбить на пачки, скажем, по 25 запросов и так их выполнять. В несколько раз ускорите. ---- PS: в прошлом сообщении я дописал пост, если Вы не обратили внимания ))
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. Последний раз редактировалось InternetStranger; 01.08.2012 в 21:55. |
02.08.2012, 04:16 | #12 | ||||||
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
Цитата:
Цитата:
Благодарю! Цитата:
С 1-ой странички: Я не знаю, как вообще принято, много ли это информации? (я конечно же имею ввиду в сравнении получения кода других сайтов) С 600 страниц будет порядка 63мб. Полагаю для уменьшения объема получения информации нужно применять сжатие, но это пока что не столь важно, в дальнешем попробую разобраться, после решения текущей проблемы. Цитата:
Цитата:
Самое что интересное, такое чувство что подобная проблема только у меня возникла или я так и не научился пользоваться поиском. Я с потоками честно говоря мало знаком - пока еще не было необходимости ими пользоваться. Но вот так навскидку, если я правильно понимаю вашу мысль и то для чего потоки предназначены - они здесь не нужны. Или я ошибаюсь ? Цитата:
P.S. Опробовал только что Synapse. Также запихал в цикл (хоть и знаю что не правильно, но так, для сравнения) - по времени вышло даже больше. Последний раз редактировалось Базиля; 02.08.2012 в 04:24. |
||||||
02.08.2012, 08:02 | #13 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Базиля, советую еще раз внимательно перечитать тему, особенно то, что пишет InternetStranger.
И обратите внимание на следующие моменты: 1. Если полный цикл состоит из: - получения информации, - ее обработки, - передачи дальше (например, в memo), то для того, чтобы хоть как-то соптимизировать, нужно иметь четкое представление, на котором именно из перечисленных этапов происходят наибольшие задержки. Например, если 1-й этап занимает 98% времени, а остальные по 1%, пытаться ускорять 2 и 3 этапы совершенно бессмысленно. 2. Единица информации "страница" применяется исключительно в бумажном делопроизводстве. В программировании принято использовать байт и его производные. Это необходимо для постановки диагноза. А без диагноза, как известно, лечение невозможно. 3. Судя по Вашим оценкам, 21 Мбайт информации (200 страниц) Вы получаете за 18 секунд, что соответствует скорости передачи 1.2 Мбайт/с или около 10 Мбит/с. Если у Вас скорость соединения 10 Мбит/с, то, по сути Вы достигли потолка пропускной способности канала. В этом случае единственное, что может помочь - сжатие информации. Если же ширина канала много больше 10 Мбит/с, то можно говорить об оптимизации какими-то другими средствами. Например, о сокращении количества запросов или их асинхронной обработке. 4. Кроме получения из И-нет тормоза могут быть и в других местах. Но для этого нужна диагностика. |
02.08.2012, 15:46 | #14 | |||
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
s-andriano
Благодарю за отзыв! Цитата:
Цитата:
В итоге получил такой резкий прыжок вниз со 107кб до 15 кб И скорость загрузки 100 страниц упала на 2 секунды Но все-таки, вот хотелось бы ознакомиться с: Цитата:
|
|||
04.08.2012, 11:52 | #15 | |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
Ну вот и выходные, погода прекрасная, попробую подытожить вышесказанное и кое-что пояснить (если где ошибусь, просьба поправить). Вдруг кто-то что-то новое для себя откроет ))
Во вложении пример как браузер запрашивает файлы для отображения текущей страницы (изображена временная шкала). Всего данная страница потребовала 41 запрос. Обратите внимание, что он шлет запросы "пачками" по ~5 штук (не всегда конечно). Пока пачка не прогрузилась, загрузка следующих блокируется (серая полоса). На самом деле обычно сервера (как уже было сказано) поддерживают 20-35 запросов параллельно с одно адреса, браузер видимо перестраховывается, к тому же много соединений одновременно - это довольно большая нагрузка на веб-сервер (актуально при высокой посещаемости). Более-менее продвинутый webdev-народ знает об этом, и обходит данное ограничение с помощью CDN. Из картинки можно извлечь несколько полезных мыслей (попробую их структурировать): 1) Представьте, если бы браузер слал запросы последовательно (в цикле, как это делаете Вы), то ждать пришлось открытия страницы бы раз в 5 дольше как минимум (примерно). 2) Каждый запрос состоит из кучи действий, рекомендую изучить их внимательно. Видно, как файлы размера и 1 Кб, и 32 Кб загружаются почти одинаковое время. Скорость интернета позволяет получить их непосредственно чуть-ли не мгновенно. Зато при запросе каждого файла "Ожидание" и "Подключение" занимают ~ 0.5 сек. В данном случае 100 последовательных запросов длились бы минимум 50 сек. 3) Таким образом, скорость открытия данной страницы уже давно не упирается в скорость (широкополосного) интернета пользователей. В данном случае проблема сервера + неоптимизированность дизайна. Основных выходов отсюда два: 1) Уменьшить количество загружаемых файлов. В случае веб-сайтов: css и js-файлы (где возможно и картинки тоже) объединяются в один. Общий размер остается тот же (иногда даже увеличивается), зато запросов требуется меньше. 2) Загружать данные параллельно. Готовых библиотек найти как-то не удалось. Реализовывать придется видимо только с помощью потоков. PS: Цитата:
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. Последний раз редактировалось InternetStranger; 04.08.2012 в 11:54. |
|
04.08.2012, 15:18 | #16 |
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
InternetStranger
Спасибо большое за информацию! Уже пытаюсь решить свою проблему через потоки. Видимо, как вы уже и сказали, других способов нет |
06.08.2012, 20:12 | #17 |
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
В общем, вроде как начинаю разобираться с потоками.
И пришел к такому выводу. Или я не до конца все еще понял и не разобрался или же так оно и есть. Я свою задачу не смогу выполнять многопоточным приложением. У меня стоит цель считывать одну за другой 200 страниц, при этом мне необходимо последовательно в одном порядке забирать с них информацию. Правильно ли я понимаю что потоки тут не применить для ускорения работы программы? P.S. И еще, пользуяюсь случаем - хочу узнать (прощу прощения за оффтоп). Возможно ли реализовать, чтобы класс форма (гланый поток получается) пораждала два потока которые будут работать одновременно, в независимости друг от друга? (выполнять свои независимые от других потоков задачи) Не будет ли производить это нагрузку? Код:
Благодарю |
07.08.2012, 06:27 | #18 |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
А с чем это связанно? Нельзя скажем загрузить сразу пять страниц и потом уже по порядку их обработать? И так далее..
|
07.08.2012, 09:39 | #19 | |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
Ну да. Если нужно считывать с сервера страницы в строгом порядке - то тут действительно ничего не ускоришь, а вот если нужно только обрабатывать в необходимом порядке, то потоки самый раз сгодятся. Т.е. считываешь страницы хоть задом наперед, да через одну. Потом складываешь все в массив, сортируешь и уже последовательно обрабатываешь.
Цитата:
Нагрузку они разумеется будут производить, система сама разберется кому сколько процессорного времени выдать. При этом по возможности сама раскидает по разным ядрам многоядерного процессора. Работу потоков можно в диспетчере задач понаблюдать. ps: Понимаю твои затруднения, не сразу удается переключить мышление с последовательных алгоритмов, на асинхронные, событийные. Сам, помню, не сразу воткнулся.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
|
07.08.2012, 15:51 | #20 | ||||
Участник клуба
Регистрация: 03.12.2009
Сообщений: 1,013
|
bakanaev
InternetStranger Цитата:
Цитата:
Но вот пока что слабо представляю как это реализовать, буду думать InternetStranger Цитата:
Цитата:
Благодарю! |
||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопрос о работе с IdHTTP | knopkodaf | Работа с сетью в Delphi | 0 | 26.05.2012 19:02 |
Вывод информации memo с компонентом (idhttp) | Arsenx777 | Работа с сетью в Delphi | 4 | 17.03.2011 13:19 |
Вопрос быстродействия | _Денис | C++ Builder | 1 | 14.11.2009 17:00 |
[Вопрос] IdHttp в несколько потоков | TilerDerton | Работа с сетью в Delphi | 3 | 22.09.2009 22:14 |
Вопрос по IdHTTP клиент | DHK | Работа с сетью в Delphi | 4 | 12.01.2009 22:05 |