有可能使这个脚本更有效率吗

Is it possible to make this script more efficient?

本文关键字:有效率 脚本 有可能      更新时间:2023-09-26

我刚刚使用flot和jquery完成了我的脚本。现在我的问题是,它在opera和Firefox中速度很快,但在internet explorer中速度慢得令人痛苦(这并不奇怪),所以这就是为什么我想知道是否有办法让我的脚本更高效(换句话说,也许可以删除一些"for循环"等)?因此,如果有任何代码大师有一些空闲时间可以消磨,请帮助我,因为我自己在写高效代码方面很糟糕:P

非常感谢提前=)

可以找到在这个地址

更多提示:

有人指出:

... $(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会冻结。我不是那个网站的铁杆粉丝。

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

每次下一次执行循环时,您都在调用length属性,最好只在循环开始时将其存储在变量中,如下所示:

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

同样在这里,你在浪费资源:

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

只需将$(this)粘贴到一个变量中,因为每次使用$()都会创建一个已传递元素的克隆。就这样做吧:

var $this = $(this);

并且从那时起使用$this而不是$(this),只有当它变成不同的对象时才重用$(this)。

首先,对于jQuery选择器,如果使用类名,如果可以使其更具体,则效率会更高。例如,代替

var checkboxContainerFailed = $(".failedCheckboxes");

尝试

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

其次,通常认为使用[]表示法而不是var subsystemNames = new Array(); 更好

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

"test2-a4/",
        ]

最后,尝试通过JSLint运行整个过程以查找任何错误。