是否可以使此脚本更有效?

时间:2011-06-22 10:17:45

标签: javascript jquery html flot

我刚刚使用flot和jquery完成了我的脚本。现在我的问题是,它在Opera和Firefox中很快,但它在Internet Explorer中非常缓慢(毫不奇怪),所以这就是为什么我想知道是否有办法让我的脚本更有效率(换句话说也许删除一些“for loops”等)?因此,如果有任何代码专家有空闲时间杀人,请帮助我,因为我自己编写高效代码非常糟糕:P

非常感谢提前=)

可以找到 on this address

3 个答案:

答案 0 :(得分:2)

还有一些提示:

有人指出:

... $(this).attr('id');
... $(this).attr('name');

很贵,你根本不需要$,只需使用:

... this.id;
... this.name;

此外,使用.css(...)是一个巨大的浪费,使用类并将CSS放在样式元素中。

您可以将$('#x')等引用存储在闭包中。同样,您不需要$,使用 document.getElementByid 直接获取元素的引用效率要高得多,而不是:

$('#x').text(pos.x.toFixed(2));

你可以:

x.innerHTML = pos.x.toFixed(2);

使用单个属性访问替换多个函数调用。基本的想法是尽可能多地删除jQuery,保留对事物的引用而不是经常获取它们并使用直接属性访问,而不是函数。

顺便说一句,当我尝试从jsFiddle javascript区域复制时,Safari会冻结。我不是那个网站的忠实粉丝。

答案 1 :(得分:1)

 for(k; k<datasets.length; k++){

每次循环执行时,你都在调用length属性,如果只将它存储在循环开头的变量中,那就更好了,如下所示:

for(var k, len = datasets.length; k < len; k++){

此外,你在浪费资源:

key = $(this).attr("id");
subsystem = $(this).attr("name");

将stich $(this)放入变量中,每次使用$()时都会创建传递元素的克隆。就这样做:

var $this = $(this);

并使用$ this而不是$(this),只有当它成为另一个对象时才重用$(this)。

答案 2 :(得分:1)

首先,使用jQuery选择器,如果使用类名,如果可以使其更具体,则效率更高。例如,而不是

var checkboxContainerFailed = $(".failedCheckboxes");

var checkboxContainerFailed = $("#graph-table-bottom td.failedCheckboxes");

其次,使用[]表示法而不是var subsystemNames = new Array();

通常被认为更好

第三,这里的数据数组中有一个尾随逗号。这可能会导致IE问题:

"test2-a4/",
        ]

最后,尝试通过JSLint运行整个事情来解决任何错误。