有思俱乐部学习园地

从编程框架看系统


补全现有js语言不足之处。任何语言都有不足之处,C语言是基础语言,为了方便使用,快速开发,以降低系统速度的代价,编写了一系列的可供调用的api。于是有了诸如C++,Java,PHP等其他语言,这些语言无一例外,均为C语言编写。每种语言还出了很多框架,让编程更加便捷,但付出的代价是:系统速度的降低。UForm框架是在编写云操作系统时,对不断形成的api进行的整理工作。为了照顾速度,ufrom采用了原生javascript加上选择器的方法。选择器会拖慢速度,但如果利用得好,可以减轻开发负担。

uform框架补全的内容如下:

1、UForm框架主要扩展了String,Number,Array,Object,Guid,json,Date等七种数据类型的方法,还有一些html5的数据类型,但暂未使用,整理框架时需列出以上数据类型的补全方法。

1)、          值类型的补全。Number

2)、          字符类型补全。String

3)、          数组类型补全。Array

4)、          Object类型补全。未使用,Object为js的基础类,补全消耗资源太多。

5)、          Guid类型补全

6)、          json数据类型补全

7)、          Date类型补全

2、UForm有丰富的正则表达式

3、UForm框架有自己的选择器,类似jquery,为了对元素进行更良好的操作,如动画,选择元素,制作了选择器

4、全兼容ie6以上浏览器,Chrome浏览器,Safari浏览器,Firefox

5、键盘事件,要求支持复合键

6、鼠标事件

7、$选择器

8、对常用的方法进行封装,形成了一系列可供调用的api,例如:U.UF.M.Addobj(obj.attr),给对象添加属性的方法

......

基于以上描述,特安排如下工作:

1、多份实例的写法

对应示例在U.UI.js文件中

功能:弹出提示框,为了同时弹出多个提示框,为多份实例对象

      1、可以像java语言的用法,用new调用多份,例如:var a=new U.AlertB();

      2、也可以省略new的步骤,直接U.Alert(),出来的结果为多份。

参数一:

参数二:

返回值:

示例:

结果:

U.Alert = function (UTH, UTI) {
    if (this !== window) { new U.AlertB(UTH, UTI); }
    else { U.AlertB.call(this); }
}

为了多份实例,另外建立一个类似类的函数。

this.TI = ((UTI == null || UTI < 0) ? 1000 : UTI);

this.UDOD = $($$("div", { 

    "innerHTML": UTH,

    "className": "USalert",

    "style": { "cssText": "z-index:9999;left:" + (US.Width / 2 - 160) + "px;top:" + (US.Height / 2 - 100) + "px" }, 

    "onclick": U.UF.M.apply(this, [[this.DAlert, [true]]] }, $("body")[0]).animate({ "top": US.Height / 2 - 80 + "px" }, 300, U.UF.M.apply(this, this.AsynAmAlert));

}));

为了减少内存消耗,把方法写在原型中。

//init: function (UTH, UTI) {    //创建alert "id": "USalert",
U.AlertB.prototype =
{
//this.TI = ((UTI == null || UTI < 0 ) ? 1000 : UTI); 
//this.UDOD = $($$("div", { 
//                  "innerHTML": UTH, 
//                  "className": "USalert", 
//                  "style": { "cssText": "z-index:9999;left:" + (US.Width / 2 - 160) + "px;top:" + (US.Height / 2 - 100) + "px" },
//                  "onclick": U.UF.M.apply(this, [[this.DAlert, [true]]] }, $("body")[0]).animate({ "top": US.Height / 2 - 80 + "px" }, 300, U.UF.M.apply(this, this.AsynAmAlert));
//},

AsynAmAlert: function () {//等待动画

    this.UTI = setTimeout(U.UF.M.apply(this, this.AmAlert), this.TI || 1000); //异步等待

},

AmAlert: function () {//结束动画

    (this.UTI) && (clearTimeout(this.UTI)); var _UDOD = $(this.UDOD);

    (UDOD.Parent() == document.body) &&  (_UDOD.animate({ "top": US.Height / 2 - 70 + "px" }, 100, U.UF.M.apply\(this, this.DAlert)));

},

DAlert: function (UTF) { //移除alert

    if (this.TI || UTF) { $(this.UDOD).remove(); }

}

2、()()闭包立即执行的写法,改成正规的命名空间。

every: (function () {//判断是否大于制定的数字
    if (!Array.prototype.every) { //是否存在

    return function (UCB, UTI) { return this.forEach(UCB, UTI, "every"); }

}

else { return Array.prototype.every; }
})()

修改为:

every: Array.prototype.every ? Array.prototype.every : function (UCB, UTI) {
    return this.forEach(UCB, UTI, "every");
}
            

3、对消耗资源的类似jquery的写法,予以重新编码。让程序跑的更快,写法更加通熟易懂。对消耗资源不大或者不经常使用的jquery写法,予以保留,并编写api文档。

例如:

优化$("#aaa")的执行速度。

优化$(.aaa")的执行速度。速度太慢,尽量少用。

优化$("div")的执行速度。

系统运行流程是看懂一套系统的根基,是提纲挈领的关键所在。