惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
D
DataBreaches.Net
腾讯CDC
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
月光博客
月光博客
MyScale Blog
MyScale Blog
U
Unit 42
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
G
Google Developers Blog
博客园 - 【当耐特】
D
Docker
I
InfoQ
雷峰网
雷峰网

博客园 - K_Reverter

甘南-青海湖九日游(一.出发) Jla框架介绍(五) 设计模式:模块和实例管理 Jla框架介绍(四) 配置管理模式 Jla框架介绍(三) 资源引用和Sprite模式 Jla框架介绍(一) 导言和发展历程 解散了地图接口讨论群 重新趋于稳定 黄山游记(三.总结和经验) 黄山游记(二) 黄山游记(一) 杭州西湖长线暴走行程 在杭州的日子 求助:关于IE之中获取鼠标位置 离开腾讯了 谁在频繁的访问我的服务器接口?请和我联系 - K_Reverter - 博客园 我的网站已经全部运行在GAE下 想离开腾讯了 关于geohash的简单探讨 在GAE数据库之中保存文件
Jla框架介绍(二) 核心和基本规范 - K_Reverter - 博客园
K_Reverter · 2011-01-15 · via 博客园 - K_Reverter

    这一篇将介绍Jla框架的核心,在此之前,先要介绍"Jla"这个名称,全称是"JavaScript Lazy App",这个框架的核心是将一系列代码单元组合起来,在页面上按需加载,也就是通俗提到的"懒载入",这也就是这个名字的由来。

    当我们来仔细审视JavaScript相对于其他语言的特点时,我们会发现,安全性和对懒载入的支持是我们不能忽视的特性,安全性是指用户通常会信任JavaScript脚本的运行,因此运行的平台非常广泛,而懒载入则使得我们在开发之中,可以灵活的控制程序单元从服务端流向客户端的过程,这样,就为使用JavaScript进行大型项目的开发提供了可能。

    在现在,越来越多的桌面应用程序正在改为BS模式,原来的程序可能是几十兆甚至上百兆,这种情况下,如果通过BS模式一次加载所有的功能到页面上,会给客户端带来非常不好的用户体验,对服务器的压力也挺大,而且其中的大部分功能未必用户真正能用得上,因此我们最好是将程序进行分拆,任何功能都是在需要的时候再加载,例如点击按钮之后执行的操作等。

    Jla框架正是为解决这个问题而设计的框架,我们先看看该框架是怎么定义的:

    在Jla框架之中,一个程序由众多的代码单元组成,每个代码单元应该是这样的模式:

 1     Jla.require(["namespace.ClassA","namespace.ClassB"],2,function(ClassA,ClassB)
 2     {
 3         //code of ClassD start
 4         function App()
 5         {
 6         }
 7         App.prototype.onClick=function()
 8         {
 9             Jla.require(["namespace.ClassC"],1,function(ClassC)
10             {
11                 //调用ClassC.完成点击之后执行的操作
12             })
13         }
14         //code of ClassD End
15         Jla.set("namespace.ClassD",App);
16     })

    从上面的代码单元来看,这个代码单元是定义了一个类,这个类的命名空间是namespace.ClassD,通过Jla.set来向框架之中注册这个命名空间,这个类使用到了两个Jla.require方法,代表这个类在运行时会依赖其他的类。

    当一个类需要调用其他类的时候,要求使用Jla.require模式,该模式有三个参数:

    参数1是一个命名空间数组,代表需要调用哪几个类

    参数2是依赖的类型,有三种类型:

        值1代表应该立即去获取该类,并在获取完成之后执行回调函数,主要用在需要懒载入的情况,例如点击按钮之后执行的函数等

        值2代表的含义和1相同,但是进一步建议在代码发布时应该将这几个类也打包在一起(意味着依赖程度太高,不建议使用动态加载),主要用在一个类必须引用另一个类才能运行的情况下

        值0代表不需要主动去加载该类,但假如该类已经加载或者后面被其他的类引用加载,则执行回调函数,用的比较少,主要用在一些事件绑定过程上。

    参数3是回调函数,在需要的类都加载完成后,会自动执行回调函数,而且会将需要的类列表作为回调函数的参数传递,这样就可以直接使用那些类,而不需要再次执行

    虽然以上的代码非常简单,实际上也就使用了Jla.require和Jla.set两个函数,但这段代码已经完整表达了Jla框架的核心规范,我简单的描述一下这个核心所定义的规范:

    1.不要直接调用一个类,对外部类的引用都应该通过Jla.require来引用,虽然你可能直接通过命名空间或者Jla.get(namespace)调用到那个类,因为这样就破坏了规范,而且如果你调用的时候该类还没有加载完成,就会出现异常;

    2.每个代码单元都应该明确在实现自己的逻辑的过程中需要依赖哪几个类,依赖程度如何,只有对这些能明确下来,才能保证最后应用程序只会载入需要的逻辑单元;

    3.每个类都只应该关心自己实现的逻辑,而不需要关注最终的程序是什么样子的,这样才能保证每一个代码单元的重用性。

    这个框架规范比较简单,仅仅拿着这个框架去开发会遇到一些麻烦,但是实际上这已经是一个完整的开发框架,后面我继续描述的内容比较多,但都是依赖这个框架的应用,并不是对这个框架的补充。