Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Можно ли с помощью javascript узнать "вес" страницы. (https://javascript.ru/forum/misc/34493-mozhno-li-s-pomoshhyu-javascript-uznat-ves-stranicy.html)

Tek 07.01.2013 14:25

Можно ли с помощью javascript узнать "вес" страницы.
 
Собственно задача сделать процентный показ загрузки страницы. Для этого нужно узнать сколько весит страничка в целом и сколько загружено сейчас...

Deff 07.01.2013 17:14

Цитата:

Сообщение от Tek
Можно ли с помощью javascript узнать "вес" страницы.

На самом деле задача имхо некоректно поставлена - прием страницы обычно составляет малое время, по сравнению с отражением в браузере,(если конечно не грузим большие объемы флеш)
Если страница грузится аяксом - легко получить длину Data
и по таймированию смотреть процесс отображения
Или у Вас флешь ?
Тады в получаемом файле флеш должна быть длина

DjDiablo 07.01.2013 17:47

моё имхо.
проценты помоему лучше всего считать в файлах а не размере файлов

приблихительно юзать так.
var ldr=new loadManager();
ldr.load('бла бла', function(){})
ldr.load('бла бла', function(){})
alert( ldr.procent ) количество процентов загруженных на данный момент


а кодить так :)
loadManager=function(){
    var count=0,
          load=0,
          me=this; 
              
    //метод добавляющий загрузку
    this.load=function(url, callback){
         count++;
         $.ajax({
             url:url,
             success:function(data){
                 load++;

                 //считаем %
                 me.procent=(100/count)*load;

                 callback(data);
             }
        })
    };
}


для учёта размеров файла, success - нужно написать немножко подругому (если я правильно понял то deff говорил об этом же)
success:function(data){
    load+=data.lenght;
    callback(data);

    //считаем %
    me.procent=(100/ общее ожидаемое количество символов)*load;
}


если бы речь шла о картинка и аудио в придачу, то возможно проще передать размер файла, функции load а неполучать его из lenght или откудато ещё, к томуже ожидаемый размер можно былобы посчитать динамически, зная ожидаемый размер каждого файла.
вместо одного load нам бы понадобилось множество разных функций.
{
   loadImg:function(){url, ожидаемыйРазмер, callback};
   loadSound:function(){url, ожидаемыйРазмер, callback};
   loadData:function(){url, ожидаемыйРазмер, callback};
}


Ирония в том что если даже удасться получать динамически размеры загруженных файлов всех типов, то это неизбавит от необходимости, предсказывать их размер :) так что передача размера через Load как мне кажется не самы глупый вариант :)

менеджер я для примера показал, со страницей всё можно хитрее сделать. Записываю информацию о размере файла в атрибут тега filesize="вес", и контролировать onload у тегов имеющих только атрибут filesize. Хм, помоему родиласт идея для прикольного плагина :)

Deff 07.01.2013 17:49

DjDiablo,
:) А ежели на странице ток картинки, а текста практически нет ?

DjDiablo 07.01.2013 18:24

ну и что.

атрибут filesize="вес картинки", для каждой картинки

скрипт сложит ожидаемый вес всех картинок имеющих атрибут filesize,
при загрузке кажой картинки считаем "суммарный вес уже загруженных картинок"+=вес только что загруженной картинки
проценты = 100/общий ожидаемый вес * суммарный вес уже загруженных картинок

конечно неудобно в теге указывать вес картинки но как иначе посчитать "общий ожидаемый вес" ?
в javascript видимо никак, о весе файла ещё до загрузки, знает только сервер имеющий прямой доступ к файловой системе.

Deff 07.01.2013 18:26

Цитата:

Сообщение от DjDiablo
filesize="вес картинки",

Увидел - Сорри

Deff 07.01.2013 18:32

Цитата:

Сообщение от DjDiablo
помоему родилась идея для прикольного

Из камней есть длинно/широко многоячеистые таблицы и так же фреймы

godofjavascript 08.01.2013 00:15

посылаешь аякс запрос на текущий урл и смотришь вес текста который придет в ответ))))

devote 08.01.2013 15:58

а еще в новой реализации XMLHttpRequest есть событие progress где есть ProgressEvent в котором обычно и хранится инфа о загруженном количестве и о том скока всего... Но как сказал Дзен-трансгуманист, при заголовке chunked браузер не даст сумму скока всего. Но даст узнать скока загружено.

что-то вроде этого:
var req = new XMLHttpRequest();

req.addEventListener("progress", function (event) {

    var progress = 0;

    if (event.lengthComputable) {
        progress = event.loaded / event.total;
    }

    console.log(event.loaded, progress);

}, false);

req.open('GET', 'http://history.spb-piksel.ru/');

req.send(null);

Но честно скажу, я не тестил, пока не нужно было это.

devote 08.01.2013 16:05

ну вот, зашел в спецификацию, и понял что накатал чухню.. поправил код. Вроде работает, смотрите консоль.


Часовой пояс GMT +3, время: 15:24.