我在firebug中运行了分析器,发现在我们的UI中运行的最耗时的函数是jQuery的.swap()。我可以看到它必须与.css()方法相关联。
以下是我的探查者的图片:
显然,为了提高速度,我需要减少调用.css(),但这就是我用它来设置和纠正不同元素的样式的项目,这必须是完全动态的。
有没有更好的方法来加快速度?
我正在使用jquery.1.4.2。我无法继续使用1.4.4,因为它出于某种原因打破了我的一些脚本。将交换方法从1.4.4扩展到1.4.2会有好处吗?或者这会产生更多的不兼容性?
什么是交换方法?为什么这么贵的时间?
答案 0 :(得分:4)
从我看到的jQuery UI代码来看,.swap()
不是由它直接调用的,jQuery框架本身中唯一直接使用.swap()
的地方是.height()
检索元素的计算高度/宽度时调用.width()
。
如果不能直接从浏览器中获取,那么计算尺寸会暂时将样式换成以下内容:
cssShow = { position: "absolute", visibility: "hidden", display: "block" };
然后在处于改变的样式状态时执行通常的内部getWH()
函数,并恢复。
从jQuery借来的部分代码:
jQuery.each(["height", "width"], function( i, name ) {
jQuery.cssHooks[ name ] = {
get: function( elem, computed, extra ) {
var val;
if ( computed ) {
if ( elem.offsetWidth !== 0 ) {
val = getWH( elem, name, extra );
} else {
jQuery.swap( elem, cssShow, function() {
val = getWH( elem, name, extra );
});
}
// etc.
jQuery UI在任何地方都使用height()
和width()
函数,因此毫无疑问.swap()
函数在配置文件中具有很高的数据。