Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение больших файлов в IE  (Прочитано 12482 раз)
0 Пользователей и 11 Гостей смотрят эту тему.
andrew2008
Гость
« : 20-10-2008 17:07 » 

В дополнение к предыдущей задаче. Прошу прощения у модераторов, но теперь проблема немного в другом, поэтому создал дополнительную тему.
Изначально, у меня стояла задача прочитать и отобразить файл размеров 10 Мб в браузере IE7.
То есть должна быть программка для вызова ее как cgi скрипт.
Я программку написал, под opera все отлично работает и отображает документ полностью секунд за 5.
То есть я вытащил весь файл разом и вывел его в pre тегах.
С IE7 проблема, документ отображается медленно. Вернее начальная загрузка большей части документа быстрая,
но потом он еще долго выдает, фактически построчно, оставшуюся часть файла.
А мне надо чтобы можно было с помощью скроллинга IE перейти в конец  и увидеть конец документа(из файла).
То есть я так понимаю надо как-то обрабатывать события скроллинга в IE7 и выдавать соответствующую часть документа из string в который я прочитал документ и параллельно как-то выгружать этот же самый string полностью в браузер?
По крайней мере требуется именно при передвижении скроллинга в IE7 в конец увидеть конец загружаемого документа.
Помогите, пожалуйста, кто знает как можно это осуществить???
Заранее благодарен за помощь!!!
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 20-10-2008 19:44 » 

Ты хочеш из серверной части приложения управлять клиенским браузером? Если у тебя такой большой файл при выгрузке, подумай, сколько он будет выгружаться в сети? Не легче ли документ разбить на части, и выгружать по частям, как отдельные вэб страници. Собственно так, как правило и делают.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 21-10-2008 04:11 » 

andrew2008, неверный подход. Отрежь на сервере нужную часть файла (ограничься в пределах 100 кБ) и выдай в браузер. Добавь на страницу средства навигации, которые позволили бы выбирать фрагмент в твоем файле. Вот и все.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
andrew2008
Гость
« Ответ #3 : 21-10-2008 07:07 » 

Ты хочеш из серверной части приложения управлять клиенским браузером? Если у тебя такой большой файл при выгрузке, подумай, сколько он будет выгружаться в сети? Не легче ли документ разбить на части, и выгружать по частям, как отдельные вэб страници. Собственно так, как правило и делают.
Нет, я думал  что можно в серверном приложении или при помощи добавления javascript установить обработчик на события скроллинга IE?
Записан
andrew2008
Гость
« Ответ #4 : 21-10-2008 07:15 » 

andrew2008, неверный подход. Отрежь на сервере нужную часть файла (ограничься в пределах 100 кБ) и выдай в браузер. Добавь на страницу средства навигации, которые позволили бы выбирать фрагмент в твоем файле. Вот и все.
То есть при первой загрузке прочитать и выдать только первые 100 Кб файла и навигацию? А при навигации прочитывать соответствующий кусок файла и выдавать его?
А можно спросить тогда насколько частей лучше разбить 10Мб файл? То есть сколько цифорок навигации?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 21-10-2008 07:38 » 

andrew2008, 10 мегабайт = 10485760 байт, 100 килобайт = 102400 байт Количество страниц 102,4 Если округлить до большего, то 103 страници. Арифметика 2 класс начальной школы. Посмотри, как выглядит навигация у нас на форуме, она в принципе стандартная для всех подобных задач. Плюс минус фантазия разработчиков дизайна.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
andrew2008
Гость
« Ответ #6 : 21-10-2008 10:54 » 

andrew2008, 10 мегабайт = 10485760 байт, 100 килобайт = 102400 байт Количество страниц 102,4 Если округлить до большего, то 103 страници. Арифметика 2 класс начальной школы. Посмотри, как выглядит навигация у нас на форуме, она в принципе стандартная для всех подобных задач. Плюс минус фантазия разработчиков дизайна.
Вопрос скорее по сколько все таки лучше выводить? Страница по 100 Кб выйдет конечно быстро вот только хочется чтобы было и качественно и приемлемо быстро а не чтобы разбить файл построчно и вывести его с навигацией в миллион страниц, а пользователь пусть хоть пристрелиться.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 21-10-2008 13:07 » new

andrew2008, Пользователь будет стреляться, когда будет качать страницу, с размером 10 мегов. Есть статистика, если страница не открылась в течении 30 секунд, пользователь как правило покидает данную страницу.  RXL дал тебе примерно оптимальный размер файла при формировании страници. Если так хочеш, то можно дать также ссылку на отдельный 10 мегабайтный текстовый файл и тогда пользователь ее скачает, если захочет и будет читать полностью. Но это уже будет его добрая воля Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 21-10-2008 15:45 » 

Я дал не оптимальный, а максимальный размер страницы, на который стоит ориентироваться.

Оптимальный размер целиком зависит от характера информации. Думаю, что тут ничего не поможет, кроме как поставить себя на место пользователя и прочувствовать все неудобства.

Тоже самое с навигацией: не надо делать 103 ссылки на каждую из страниц - это только запутает.

Можно сделать минимум ссылок: 1..3 ссылки к первым страницам, 1..2 страницы перед текущей, текущую, 1..2 после текущей и 1..3 к последним страницам.
Например: 1 ... 10 11 [12] 13 14 ... 103
Это позволит быстро переходить в начало, конец и в ближние к текущей страницы.

Еще типовой способ: "стрелки" вперед-назад. Можно сделать несколько наборов, для перемещения на 1, 10, 100 страниц. Приветствуется возможность задать номер страницы руками.
|< <100 <10 <1 [ 65/103 ] 1> 10> 100> >|

Выводить надо не "первые 100к", а постранично. Желательно, чтобы при просмотре одна и таже страница страница всегда показывала одну и туже информацию. Т.е., к примеру, получаем на сервере параметр "page" (если его нет, считаем его равным 1 - в зависимости от начала нумерации). Высчитываем позицию нужной страницы (как - все зависит от данных), считываем ее и выдает в нужном виде.
« Последнее редактирование: 21-10-2008 15:53 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 21-10-2008 17:11 » 

Плюс, можно поиск по всему файлу с составлением перечня ссылок или чего-то в подобном духе сделать, чтобы пользователю не листать все 10 мб. Разумеется, если такой поиск нужен.
Записан
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 21-10-2008 18:36 » 

Оффтопик: Когда пишите "продолжение к предыдущей задаче", давайте ссылку. людям, которые увидили топик впервые НЕ знают, что за предыдущюю задачу Вы имели ввиду
Записан
andrew2008
Гость
« Ответ #11 : 21-10-2008 19:02 » 

Ребят, всем огромное спасибо!!!
У меня небольшая проблема, при переходе между страницами текст выдается не совсем корректно, то есть на второй странице выдается не продолжение первой:)
Если у кого есть время, посмотрите пожалуйста.
Код:
void readAndDisplayContent( std::ifstream& in ) {
short start = time( NULL );
std::string str;
in.seekg( 0, std::ios_base::end);
std::ifstream::pos_type len = in.tellg();
in.seekg( 0 );
size_t readPart = 102400;
size_t count = len / readPart;

if( len % readPart != 0 )
++count;

char* queryStr = getenv( "QUERY_STRING" );
size_t index = 0;

if( queryStr != NULL )
index = strtol( queryStr + 4 , NULL , 10 );

str.resize( readPart );
in.seekg( index * readPart , std::ios_base::beg);
in.read( (char*)str.data() , readPart );

for( size_t ind = 0; ind < count; ++ind ) {
if( index == ind )
std::cout<<ind + 1<<"  ";
else
std::cout<<"<a href=\"programm.exe?ind="<<ind<<"\">"<<ind + 1<<"</a>  ";
}

std::cout<<"<pre>";
std::cout<<str;
std::cout<<"</pre>";
short end = time( NULL );
//std::cout<<"\n\n\nTIME="<<(end - start);
}
« Последнее редактирование: 21-10-2008 19:12 от RXL » Записан
andrew2008
Гость
« Ответ #12 : 21-10-2008 19:14 » 

Похоже я начинаю понимать почему у меня текст не последовательно отображается при переходе между страницами. Наверно это из-за того что символ перевода строки в windows - 2 символа, только как с этим справиться пока ума не приложу?
Записан
andrew2008
Гость
« Ответ #13 : 21-10-2008 19:20 » 

Не, похоже я просто туплю. Не знаю в чем проблема?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines