有没有更好/更快的方法来实现这一目标?
是的:在服务器上而不是在浏览器中进行。这还具有您可以执行一次并重复使用信息的优点。
但假设由于某种原因这是不可能的:
您可以做的第一件事是停止进行数百万次不必要的函数调用,每个循环只执行$(this)
一次:
.....each(function () {
var $this = $(this);
words.push({
"page": pagenumber,
"content": word,
"hpos": $this.attr("HPOS"),
"vpos": $this.attr("VPOS"),
"width": $this.attr("WIDTH"),
"height": $this.attr("HEIGHT")
});
});
通常重复这样做没什么大不了的(尽管我还是会避免这样做),但如果你这样做一又一百万次......
如果所有这些属性真的是属性,您可以通过将 jQuery 从中间删除来完全避免调用:
.....each(function () {
words.push({
"page": pagenumber,
"content": word,
"hpos": this.getAttribute("HPOS"),
"vpos": this.getAttribute("VPOS"),
"width": this.getAttribute("WIDTH"),
"height": this.getAttribute("HEIGHT")
});
});
jQuery 的attr
功能很棒,可以通过某些属性解决各种跨浏览器的麻烦,但我认为这四个中的任何一个都不需要特殊处理,即使在 IE 上也不需要,所以你可以直接使用 DOM getAttribute
。
接下来是一些 JavaScript 引擎的执行push
速度比分配到数组末尾要慢。这两个语句做同样的事情:
myarray.push(entry);
// and
myarray[myarray.length] = entry;
但是其他引擎的处理push
速度与分配一样快或更快(毕竟,这是一个成熟的优化目标)。因此,您可能会查看 IE 是否执行push
得更慢,如果是,请改用赋值。