Привет. Выловил я таки почему переодически popups лагают. Нарисовал пример.
Суть примера, асинхронно что-то меняется на странице, вызывается update(true), в примере это таймер раз в секунду. В консоле видно что onSize бизейвора не вызывается, фризов нет, все ок. Теперь расскоментируем overflow:hidden;, запустим тот же пример, теперь ситуация поменялась, каждый таймерный update приводит к вызову onSize бихейвора, в котором тоже есть update, что вероятно приводит к микроколлапсу и как следствие фризам. И посмотри в консоль, когда попап активен с какой скоростью генерируется onSize.
Запускаешь пример, правая кнопка — меню, юлозишь по пунктам меню и если overflow:hidden; раскоментирован — увидишь фризы.
<html>
<head>
<style>
body {
padding:0;margin:0;
// overflow:hidden; // <-- UNCOMMENT HERE
prototype: sizer;
context-menu: selector(#context_menu);
}
menu {
font:normal 22px Arial;
behavior:menu;
flow: vertical;
display:none;
margin:0;
padding:10px;
min-width:max-intrinsic; width:auto;
border:1px solid threedshadow;
background-color: window;
color:windowtext;
margin:10 1px;
}
menu li:current
{
background-color:highlight;
color:highlighttext;
}
</style>
<script type="text/tiscript">
self.timer(1000, function() {
self.update(true);
return true;
});
type sizer {
function onSize() {
stdout.printf("onSize: rand=%s\n", rand(100));
this.update(true);
}
}
</script>
</head>
<body>
<popup>
<menu #context_menu>
<li>Some item<li>Some item<li>Some item<li>Some item<li>Some item<li>Some Item
</menu>
<popup>
</body>
</html>