В Firefox по моему дольше грузится если стоит "about:blank" а если "javascript:;" то быстрее..
вообще about:blank это для ИЕ и опера, для остальных можно javascript:; прописывать.. П.С. Если не смотреть фаербагом в момент загрузки, должно быть быстрее ) |
Цитата:
Это на моей тестовой страничке. Причем такое ощущение, что опера и сафари плюют на очередность и сначала загружают мелкие картинки, а потом тяжелые. |
Другого варианта по моему просто нет. Всякие там фаербаги и всё такое, ловят открытие соединения внутренними средствами браузера, которые к сожалению(или к счастью) просто так недоступны.
П.С. Даёж событие onconnect :write: |
Ну или onStartLoading )))
|
Веселье продолжается.
<script type="text/javascript">
//Чем раньше ставим этот код, тем лучше
var LoadCounter={};
(function(){
var ERR_TIME = 'pict_load_time';
var LOAD_TIME = 'time';
var id = 'mysite.ru';
var startTime = new Date();
var resultStr = '';
var errorTime;
function now(){
return (new Date).getTime();
}
function sendData() {
if (location.host.search(id) == -1)
return false;
var img = document.createElement('img');
var host = location.host.replace(/^www\./, '');
img.src = 'http://mysite.ru/log_time_download.php?id='+id+'&url='+escape(host)+escape(location.pathname)+resultStr;
img.style.position = 'absolute';
img.style.left = '-5px';
img.style.top = '-5px';
img.style.width = '1px';
img.style.height = '1px';
document.body.insertBefore(img, document.body.firstChild);
}
LoadCounter.isError = function(el) {
errorTime = now();
if (el)
el.src = 'http://mysite.ru/1px.gif?r='+Math.random();
}
LoadCounter.isLoad = function() {
var secondTime = now() - errorTime;
if (resultStr) {
resultStr += '&'+ERR_TIME+'='+secondTime;
sendData();
} else {
resultStr += '&'+ERR_TIME+'='+secondTime;
}
}
LoadCounter.simpleLoad = function() {
var simpleTime = now() - startTime;
if (resultStr) {
resultStr += '&'+LOAD_TIME+'='+simpleTime;
sendData();
} else {
resultStr += '&'+LOAD_TIME+'='+simpleTime;
}
}
})()
</script>
где-нибудь в серединке:
<script type="text/javascript">
document.write('<img src="http://mysite.ru/1px.gif?r='+Math.random()+'" onload="LoadCounter.simpleLoad();" />');
</script>
<img src="about:blank" onerror="LoadCounter.isError(this)" onload="LoadCounter.isLoad(this)" />
pict_load_time - время между onerror и onload первой картинки time - время от скрипта, до загрузки картинки (картинка вставляется с помощью document.write) Т.е. по идее onload происходит один раз и никаких двойных и более времен быть не может. Однако имеем, что имеем (опять же в FF): &time=742&pict_load_time=200&time=2502&pict_load_t ime=1762&time=2597&pict_load_time=1857&time=2650&p ict_load_time=1910&time=2715... Первым делом подумал про аякс, но он не используется на странице, да и не дружит аякс с document.write. Опять же ошибка повторяется не у меня, поэтому потыркаться возможности нету, так что играем в гадалку... Проблему можно решить в лоб, проверяя, первая ли это загрузка, но хочется понять, почему так происходит... |
я так понимаю у тебя не одна картинка загружается так.. а в коде я нигде не увидел, чтоб очищалась "resultStr".. загрузка проходит то один раз.. но параметры добавляются несколько раз.. как можешь заметить у них время разное)
|
В том то и дело, что картинка создается один раз.
По крайней мере в коде это все указано в единственном экземпляре. Ну и если бы она создавалась не один раз - это было бы повальное явление во всех браузерах... А так происходит только в ФФ, да и то не всегда... |
вот я и клоню к тому, что нужно добавить "resultStr = '';" в конец "isLoad", или лучше в sendData :)
|
Ничего не понял.
как это поможет? статистика то продолжит отправляться на все вымышленные onload'ы... В итоге будет не одна строка длинная, а много мелких, которые по сути тоже не верны. =\ Интересна причина, а не последствия. Последствия можно легко устранить так же как в твоем варианте с Оперой. |
Непонятно конечно.. эт надо плотно покопаться %)
|
| Часовой пояс GMT +3, время: 08:22. |