项目的首页是一个类似于Google IG的有很多可以随时拖动和设置的个性化小窗口的页面。
小窗口主要有2部分组成。一部分是一个统一小窗口外观的用户控件(容器),用来控制小窗口的标题,位置,是否展开/收拢等等。每个小窗口都是加载这个用户控件,只是标题,位置等属性的值不同。另外一部分也是用户控件(内容),用来存放小窗口具体的内容,比如表格,日历,提醒等等。这个用户控件的数量可以任意添加,添加一个就多一种类型的小窗口。实际使用的时候,在页面初始化的时候从数据库中获取用户对小窗口属性的的设置和对应的内容,然后构建页面呈现出来。引起速度慢的主要原因在于内容用户控件的速度直接影响了整个页面的加载速速。随着小窗口的数量增多,页面打开的速速越慢。或者某个内容用户控件收集数据的时间过长,也会影响整个打开的速度。总之,需要遍历每个内容用户控件,并且把数据全部收集完以后,页面才会呈现出来。问题当然就出在这里。我曾尝试过把内容小窗口的用户控件换成iframe,这样页面可以很快呈现出来,各个小窗口根据自己的数据量分别呈现互不影响。但是iframe的高度和宽度控制起来很麻烦,小小窗口中的内容很容易造成出现滚动条。还有一种方法就是用初始化时不加载内容用户控件的内容,当内容用户控件的数据收集完以后在页面上相应的位置显示出来。这里的问题是客户端如何知道服务器端已经收集完数据或者服务器端收集完数据以后如何通知客户端更新?