在图像性能DOM的一部分(jQuery的 - WebKit的矛盾与其他浏览器)?(Are imag

2019-09-18 19:20发布

我跑进在Chrome和Safari的问题使用jQuery做用图像的带的宽度一些计算。

当使用我的计算中:

$(document).ready(function() {
    /* some calculations with $("img").width() */
});

一切工作在IE6 +和Firefox就好了,但是它在Chrome和Safari不:$(IMG).WIDTH()为0的图像是否已被高速缓存。

使用:

$(window).load(function() { 
    /* some calculations with $("img").width() */
});

它工作在上述所有浏览器,但问题是当所有图像都完全加载它只是开始。

是WebKit的行为预期的行为,或者是有一些的WebKit / jQuery的错误造成的图像性能不会成为DOM的一部分吗?

如果是用的webkit / jQuery的一个问题:有没有办法解决它,让我的脚本来执行比,上述方案早?

顺便说一句,我不使用的图像尺寸的任何内嵌性能。

Answer 1:

尝试在你的img标签指定大小:

<img src="myimg.jpg" alt="" width="300" height="200" />

这个快速谷歌搜索: http://www.websiteoptimization.com/speed/tweak/size/

什么我推断是因为图像不加载,直到图像已加载的WebKit将简单地返回0为“未知”的大小。 特别说明的大小可能会解决这个问题。



Answer 2:

我觉得这更是黑客十岁上下的方式,但它似乎(从我测试)工作:

function callback(){
    var el = $(this);
    // if this element was processed or width is 0 (for webkit), then skip
    if(el.data('loaded') || el.width() === 0)
        return;
    el.data('loaded', 1); // marked this element as "processed"
    // do whatever you want to do with el.width()
    console.log(el.width());
}
$(function(){
    // Non-webkit-based browsers will call callback() here
    // otherwise, after each image loads, the callback will execute
    // (for webkit browsers), when the size will be correct.
    $('img').load(callback).each(callback);
})

WebKit的浏览器仍然会比其他浏览器稍微慢一些,因为它的每个图像加载完毕后,但它不是等待所有加载图像更快。



Answer 3:

我不卸载任务,应在服务器上处理客户端的粉丝。

真正的解决方案是,当它被添加到数据库,然后用宽度和高度正确地产生所述<img>标签将其发送到客户端之前的属性来计算所述图像的大小。

相比,在第一位置其上传到数据库的过程中的初始计算(并从事后数据库拉动值)发生的任何开销将是微不足道 - 不要在后面提到的它的每个后续检索。

其结果是一个语义上有意义的HTML标签,在你关心的所有浏览器使用jQuery的作品,为什么避免呢?



Answer 4:

我发现指定的图像尺寸时使用.load()动态加载的图像的这种方式中,我使用的图像加载功能与一个回调

loadImage: function(src, callback){
  $("<img alt="" />").attr("src", src).load(callback);
}

然后我可以使用IMG-元件(其报告正确的尺寸)设置回调内部的IMG-属性

$(this).attr({
  id: img,
  width: this.width,
  height: this.height
});

现在我可以得到适当的widht和高度使用,例如,

var contentWidth = $("#img").attr("width");


文章来源: Are image properties part of the DOM (jQuery - webkit inconsistency with other browsers)?