我在修改后的eclipse(Indigo)中将org.eclipse.swt.browser.Browser嵌入到视图中,用作表单编辑器组件的预览窗格。在表单模型更改或元素选择更改时,代码通过vaadin 6呈现表单并将其显示在浏览器组件中。SWT浏览器组件块SWT UI线程
现在,这在大多数情况下就像一个魅力。但对于一些高度复杂的表单,由vaadin生成的HTML + JS会在浏览器上产生很大的压力,使其在几秒钟内无响应。这本身并不是悲剧(1),但只要SWT Browser组件忙于渲染那些东西,整个eclipse UI线程就会被阻塞。
重现此操作的一种简单方法是创建一个阻止JavaScript函数(例如参见https://gist.github.com/creinig/5150747)的HTML页面并将其显示在SWT浏览器中。只要该JS函数正在运行,整个SWT应用程序就不会对任何事情做出响应。
唯一的信息,我已经在这个问题上找到的
- 一个SO question(无分辨率)和
- 一个question on EclipseZone(未回答)。
并不实用:(
的浏览器组件的API docs似乎并没有提供关于其是否呈现由UI线程定期触发任何见解,或者本身引发的东西,块的UI。
有没有办法去耦从SWT UI线程?还是别的什么可以做,以保护日食UI从浏览器挂东西浏览器组件的渲染?
(1):我们需要这种复杂度级别的表单,我们已经在优化渲染性能,并且转向vaadin7很可能也会加快速度。但是问题一定会持续下去,只要降低严重程度。