标签 ‘bgjs’

Background JavaScript UI 库发布 2.0.8 版

十一月 3rd, 2009 由 Rock 发表

这次版本修正同时也改变了部分设计.

主要修改 :

1. 优化容器布局,使得在容器显示时才布局.

容器在显示时才布局,使得容器在一些情况下, 最常见的是在Resize后, 忽略对容器布局从而提高整个应用的性能.

由于在显示时才布局,所以一开始就隐藏的容器如果存在子项并不立即渲染,因为对于容器来说,子项的渲染处于容器的 布局过程中触发,所以很多时候要等到容器显示时子项才得以渲染.

这种行为对于非IE浏览器,几乎没什么弊端,因为对于非IE浏览器来说,DOM文档添加结点的操作响应是非常快速的,对于控件渲染时才把结点添加到DOM文档中这操作来说,几乎不影响用户的体验.

但IE浏览器就不同了,即便IE8也是如此,DOM文档添加结点这操作是非常昂贵的,所以在IE下,容器在显示时才布局的弊端就是引发用户操作的短暂停顿,这种方法并不够友好!

可以在IE和非IE浏览器下对比一下这个菜单中,IE下首次显示菜单的时候操作有些少的停顿.

2. 优化类生成函数,实现原型链继承方式,减少类创建时引起的内存消耗.

这个是当前版本中库结构最关键的更新.

先前考虑到类属性查找速度问题,库中类继承是采用属性复制而不是基于原型链的方式实现.

如原库中:

    var ClassA.prototype.key = 'value';

    继承采用:

    extend(ClassB.prototype, ClassA.prototype);

   当前版类继承方式采用:

   var ClassA = function() {};

   //桥接类
   var Bridge= function(){};

   Bridge.prototype = ClassA.prototype;

   ClassB.prototype = new Bridge();

第一种的利弊:

利:运行时查找基类属性可在类自身的原型上找到,并不存在基类形成的原型链.

弊:在类生成过程中复制父类属性会引起时间上的损耗.
并不是真正意义上的继承,即在修改基类原型属性时在子类没法体现出,所以对于类原型的扩展有很大的局限.

第二种利弊刚好与第一种相反,运行时查找属性要遍历原型链,最大可能直至基类原型;在类创建时须新增一个桥接类.

本次采用第二种主要是考虑到能在修改基类原型属性的情况下,在子类可体现出来,便于控件行为与属性的扩展.

3. 以扩展方式增加表格视图统计功能,可向每个视图添加多个统计行.

经建议增加表格统计功能.

4. 新增浮动导航条控件和浮动布局管理器.

新增一个浮动布局管理器,它是依赖浏览器来检测布局,无需设置容器的具体宽高,这点与以往的布局管理器不同,布局速度上更胜一畴. 库中并为该布局设计了一个浮动导航条控件.