Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Firefox上的这个页面速度这么慢?_Javascript_Jquery_Html_Firefox_Google Chrome - Fatal编程技术网

Javascript 为什么Firefox上的这个页面速度这么慢?

Javascript 为什么Firefox上的这个页面速度这么慢?,javascript,jquery,html,firefox,google-chrome,Javascript,Jquery,Html,Firefox,Google Chrome,这是我的意思。尝试点击链接(添加侧/轨道,删除),你可以看到我自己的研磨添加/删除一些输入文本 铬:没问题 使用IE(7):没有问题 对于Firefox(4):哦,天哪,整个界面都很慢 Javascript/jQuery代码(如您所见)非常短,没有什么比这更复杂的了。 为什么会出现这种行为?我尝试了Firebug插件的YSlow插件。我突然想到的一件事是: 降低DOM元素数量的F级 页面上有3203个DOM元素 一个复杂的页面意味着需要下载更多的字节,这也意味着在JavaScript中访问DOM

这是我的意思。尝试点击链接(添加侧/轨道,删除),你可以看到我自己的研磨添加/删除一些输入文本

  • 铬:没问题
  • 使用IE(7):没有问题
  • 对于Firefox(4):哦,天哪,整个界面都很慢
  • Javascript/jQuery代码(如您所见)非常短,没有什么比这更复杂的了。
    为什么会出现这种行为?

    我尝试了Firebug插件的YSlow插件。我突然想到的一件事是:

    降低DOM元素数量的F级

    页面上有3203个DOM元素

    一个复杂的页面意味着需要下载更多的字节,这也意味着在JavaScript中访问DOM的速度较慢。减少页面上DOM元素的数量以提高性能

    阅读更多:


    也许在页面加载后在javascript中构建DOM元素会有所帮助。

    评测表明克隆速度非常慢。您是否尝试过使用固定的DOM字符串手动创建元素(而不是使用
    .clone()
    )并使用委托进行事件处理?在任何浏览器中,这可能会大大提高整体性能

    编辑:我所说的手动,是指:

    var newElem = $('<div class="trackOn">...</div>');
    
    等等


    编辑#2:阅读文档总是有回报的,这里也是:说在jQuery 1.5.0中,复制事件和数据的默认值被错误地设置为
    true
    。在1.5.1和friends中又回到了
    false
    ,所以请尝试使用jQuery 1.6.0或1.5.2。这可能也会有所帮助。您还可以修改clone()调用,手动将
    false
    指定为第一个也是唯一一个参数,以避免再次发生这种情况。

    对我来说不要慢,尝试禁用扩展Linux上的Firefox 3.6没有问题。升级到jQuery 1.6.1(最新版本)而改用1.5.x将提高速度。。。但这一切都取决于浏览器中的脚本引擎,请记住,FF在后面做了很多事情(我们不需要)。Chrome和Safari是最快的。我试过FF 4.0.1,很好。。。您使用的是哪个版本?刚刚在Firefox 4和Chrome中测试了页面,没有发现任何差异(它们都一样快)。是的,但这很可笑,对于单个克隆来说,性能太慢了()。有些地方不对劲……你说的“用固定的DOM字符串手动创建元素”是什么意思?我克隆的一个HTML元素大约有50-60行,很难把它放在一个字符串中:(它必须克隆所有的子元素,并且每行都有大量的选择,因此这些选择会使它们变慢(因为它必须检查每一行上的事件等)。真的,试着创建一个静态字符串,然后从中重新生成DOM,速度会快得多。没有什么能阻止您使用变量和for循环将所有这些元素串在一起,而不会在页面中留下一个巨大的静态字符串。:-)试过了,jQuery 1.6.1没有任何变化。老实说,是的,我应该使用你的提示加载元素,没有克隆。但这不是我剧本的错(真的,它太慢了)。我在Firefox上看到页面/etc的其余部分非常慢。例如,只需将页面从顶部滚动到按钮,它就会捕捉到:O我认为这是与此版本的兼容性问题。我要试试老一点的。。。
    tracklistOnElem.delegate('.trackBotton .addSide', 'click', function() { addSide(this); return false; });
    tracklistOnElem.delegate('.trackBotton .addTrack', 'click', function() { addTrack(this); return false; });