Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрая загрузка страницы без ее отображения, загрузить страницу со всеми элементами 
V
    Опции темы
M1ndAction
Дата 8.1.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.1.2008

Репутация: нет
Всего: нет



Добрый день, 
суть программы: нужно через определенные промежутки времени загружать страницу, причем в n-ом количестве потоков (естественно, страницы разные), при этом саму страницу отображать совершенно не обязательно. Самое главное, что при загрузке странице, загружались и все ее элементы (баннеры, счетчики).
Как сейчас реализовано у меня: приложение на базе TPageControl, через меню создается очередная вкладка, в которой вводим адрес, после чего запускается отдельный поток, в котором и происходит загрузка. Загрузка происходит через TWebBrowser. Но приложение достаточно сильно подтормаживает, если сайт имеет более-менее развитую структуру (точней, если при обновлении страницы приходится много качать).
Может проблема в самом потоке:

Код

unit SurferThreadUnit;

interface

uses
  Forms, SysUtils, Classes, TabFormUnit, SHDocVw;

type
  TSurferThread = class(TThread)
  private
    _url: OleVariant;
    formSheet: TfmTab;
    maxcounter: Integer;
    counter: Integer;
  protected
    procedure Execute; override;
    procedure LoadPage;
    procedure RefreshPage;
    procedure ShowCounter;
  public
    constructor Create(CreateSuspennded: Boolean; const AformSheet: TfmTab);
  end;

implementation

uses MainUnit;

constructor TSurferThread.Create(CreateSuspennded: Boolean;
                                                const AformSheet: TfmTab);
begin
  inherited Create(CreateSuspennded);
  formSheet := AformSheet;
end;

procedure TSurferThread.LoadPage;
begin
  formSheet.wbSite.Navigate(_url);
  while (formSheet.wbSite.ReadyState <> READYSTATE_COMPLETE) do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end;
end;

procedure TSurferThread.RefreshPage;
var
  refconst: OleVariant;
begin
  refconst := REFRESH_IFEXPIRED;
  formSheet.wbSite.Refresh2(refconst);
  while (formSheet.wbSite.ReadyState <> READYSTATE_COMPLETE) do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end;
end;

procedure TSurferThread.ShowCounter;
begin
  formSheet.lblCounter.Caption := 'Показов: ' + IntToStr(counter);
end;

procedure TSurferThread.Execute;
var
  r: Integer;
begin
  _url := formSheet.edtLink.Text;
  Synchronize(LoadPage);
  Randomize;
  r := StrToInt(formSheet.edtTime.Text)*1000;
  counter := 1;
  Synchronize(ShowCounter);
  maxcounter := StrToInt(formSheet.edtShow.Text);
  if maxcounter=0 then
  begin
  while not Terminated do
  begin
    Sleep(Random(r));
    //Synchronize(LoadPage);
    Synchronize(RefreshPage);
    Inc(Counter);
    Synchronize(ShowCounter);
  end;
  end
  else
  begin
  while (not Terminated) and (counter<=maxcounter) do
  begin
    Sleep(Random(r));
    //Synchronize(LoadPage);
    Synchronize(RefreshPage);
    Inc(Counter);
    Synchronize(ShowCounter);
  end;
  end;
end;

end.


ну и процедура запуска потока:

Код

procedure TfmTab.btnStartClick(Sender: TObject);
begin
  fmMain.pcSites.ActivePage.Caption := Copy(edtLink.Text, 8,
                                                        Length(edtLink.Text)-7);
  //btnStart.Enabled := False;
  SurferThread := TSurferThread.Create(True, Self);
  SurferThread.FreeOnTerminate := True;
  SurferThread.Resume;
end;


Вообще странное дело с потоками творится, вроде все правильно делаю, но работают они как-то ненадежно, неустойчиво.
Может кто-то сможет предложить более лучший и быстрый вариант программы? 
Если страницу закачивать GET, через idHttp, к примеру, то закачивается лишь html-текст страницы, а все ее элементы нет, соответственно счетчиками этот заход не учитывается. Если посмотреть сниффером загрузку страницы браузером, то видно, после GET сайта, происходит куча GET-ов элементов: картинок и пр., следовательно и мне надо аналогичное поведение программы.
Может можно как-то отключить визуальную часть TWebBrowser, может тогда быстрей будет работать (пробовал просто вызывать метод Hide - но не помогло)?

В общем надеюсь, кто-нибудь сможет мне подсказать пути решения smile
PM MAIL   Вверх
darkmamba
Дата 12.1.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: 1
Всего: 1



Не понятно одно, Зачем закачивать все элементы ?
PM MAIL   Вверх
M1ndAction
Дата 12.1.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.1.2008

Репутация: нет
Всего: нет



Необходимо, чтобы счетчики учитывали посещение, поэтому, я думаю, проще закачивать все элементы, нежели выбирать только нужные (все-таки надежнее).
Спасибо, что не прошли мимо, но вопрос пока можно считать снятым с обсуждения.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.