超时功能的性能
Perfomance of timeout functions
我有一个JS问题,当列表宽度的li超过最大宽度时,我必须检查水平ul,然后减少这些元素的侧边填充以使所有li都适合。
问题是,当添加li时,我无法激发事件,因为我无法控制将li添加到ul的所有代码。
所以我的选择是每秒循环检查李的总宽度几次,类似于这样:
function UpdateNavBar(initialX) {
var w = 0;
var maxW = 100;
var visibleLis = $(".navigationbar ul li.menuitem");
$.each(visibleLis, function (i, e) {
return w += $(e).width();
});
if (w >= maxW) {
--xPadding;
$(".navigationbar ul li.menuitem a").css({ "padding-left": xPadding, "padding-right": xPadding });
}
w = 0;
setTimeout(UpdateNavBar, 100, initialX);
}
var xPadding = parseInt($(".navigationbar ul li.menuitem a").css("padding-left").replace("px", ""));
UpdateNavBar(xPadding);
我的问题是:有没有其他明显的方法可以实现我所缺少的目标?这样的功能将如何影响网站的性能,记住它是在各种设备上运行的?
非常感谢。
em,因为您不知道何时添加了li,所以settimeout循环是一种不错的方式。
但是你可以做一些优化。
settimeout将向ui线程添加一个处理程序,因此,如果处理程序完成执行的时间足够短,则会获得更好的性能。
所以,我的选择就像上面的代码,也许你可以做得更好
var listLength;
function UpdateNavBar(initialX) {
var w = 0;
var maxW = 100;
var visibleLis = $(".navigationbar ul li.menuitem");
//make a momorize and if no change happen, do nothing
if(length === visibleLis.length){
return false;
}else{
listLength = visibleLis.length;
}
$.each(visibleLis, function (i, e) {
return w += $(e).width();
});
if (w >= maxW) {
--xPadding;
$(".navigationbar ul li.menuitem a").css({ "padding-left": xPadding, "padding-right": xPadding });
}
w = 0;
setTimeout(UpdateNavBar, 100, initialX);
}
var xPadding = parseInt($(".navigationbar ul li.menuitem a").css("padding-left").replace("px", ""));
UpdateNavBar(xPadding);
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 使用正则表达式评估电子邮件地址时出现性能问题
- 超时功能的性能
- 通过单向绑定的过滤功能提高自定义角度下拉菜单中的角度性能
- UIWebView 性能与 JS 点击功能
- JavaScript锁定功能,以防止递归(浏览器冻结/性能)
- 功能位置对整体性能的影响
- javascript性能功能
- 控制器性能比较中的自定义过滤器与过滤器功能
- 每次单击都会将其功能的性能提高到一
- 加速窗口大小调整功能的性能
- 在处理大量元素时,隐藏/显示功能的性能极慢