JSI2.1计划

先回顾历史:
JSI1(2006-2007)是个简单的框架,只有脚本级别的依赖管理,只有阻塞同步装载模式。

JSI2 (2007-2008)是个庞然大物,同步装载,异步装载,延迟装载,装饰引擎。。。。。
网撒的太宽,而且学习曲线也非常陡峭。

JSI2.1 新的2008,JSI2也打算做点改进。
时至今日, JSI已经有两年多的历史了,自己也在大大小小的项目中有了不少实践,普遍的反映是。内核庞大。依赖管理复杂,难以掌握。

确实,JSI的依赖管理非常复杂,而且内核源码的组织也不够完美。装饰引擎,异步装载,等等,全部混合在一起,别说他人,我自己看着也头晕。当时的借口:压缩优化。得了,为了压缩损失代码的可读性,实在是有点笨。改吧:
初步决定的重构点如下。

1。新的定位
以前都吧JSI定位成运行时的脚本管理,经过一年多的实践,发现,让他作为开发期的脚本管理更有价值。因其无侵入的特征,开发结束后,导出脚本就是。光脚的不怕穿鞋的,没有装载器的束缚,跑的更快。

2。去除js.*.*包,内核不包括任何托管脚本。
JSI2中有些包是内核用到的,比如异步装载就需要队列管理(js.util.TaskQueue)。
还有,总想写一些大家能公用的基础包,实事证明,没那个必要,保留框架的简单最重要,这次重构的目标之一就是吧引导文件控制在10k以内(补充一下第一 条,我虽然吧JSI做成开发期的脚本管理框架,运行时同样支持,10k的附加引导文件,轻微的装载开销,我想还是能被大多数用户接受的)。

3。把装饰引擎和异步装载延迟装载从内核中剥离。
JSI的一个重要目标是无侵入,当时这个已经给依赖管理变得复杂了,而我们还吧这一堆东西困在一起,导致一个core.js就达到了2000行的代码,实在有点过。重新规划。

boot-core.js

简单内核

boot-lazy.js

扩展简单内核中的import函数,令其支持异步和延迟两种装载模式

boot-decorator.js

装饰引擎支持。


后两个脚本是可选的,如opoa中,我们理当吧全部脚本打包在一起,这时,就完全没有异步装载和延迟装载的必要。而装饰引擎更是没必要强行推销。

4。删除CSS导入功能,删除内置日志功能。
JSI的内核已经够庞大了,这些不常用的功能就不要给我添乱了^_^

5。重构脚本定义函数
原来用于脚本管理的函数有:
this.addScript(file,objects)
this.addObjectDependence(object,
dependenceObject,
isBeforeLoadDependence);
this.addScriptDependence(script, dependenceScript, isBeforeLoadDependence);
this.addObjectScriptDependence(object, dependenceScript, isBeforeLoadDependence);
this.addScriptObjectDependence(script, dependenceObject, isBeforeLoadDependence);
 

好复杂啊,重构成:
this.addScript(file,objects,beforeLoadDependences,afterLoadDependences)
this.addDependence(object,
dependenceObject,
isBeforeLoadDependence);

 

重构理由:
把添加脚本和添加依赖放在一起,更加简单方便了。不过,这样我们只能添加整个脚本的依赖,如果要添加单个对象的装载后依赖(很少见),还是的借助addDependence函数。
四个添加脚本依赖函数,没必要吧?到底是脚本依赖还是对象依赖完全可以自动探测,何必给用户添加麻烦。

6。脚本定义时*模式的支持(调试模式)。
很多人都认为JSI的包定义语法有些复杂,比如我们定义一个脚本,还需要指出我脚本里面的元素名称,那些东西我都在源文件里var function什么的都申明了啊!!
确实,如果你只是想吧你在源文件中申明的东西全部暴露出来,我们一直都没有一个简单有效的办法,现在,我们将引入*模式。
包定义实例:

 

this.addScript('youscript.js','*')
关于实现,这确实是个大问题,我们需要用脚本分析你的js文件,找出你定义的全部变量、函数。是个较大的开销。所以,我们只能在调试模式下支持该功能,产品发布时,可以在脚本编译时计算出准确的变量名称数据。

7。异步装载和延迟装载的优化。
首先,我决定取消包的非即时装载功能,理由,包定义文件本来就很小,没必要。而且一旦放开了这一枷锁,实现将简单很多很多。

8。调试支持附加功能
调试支持涉及到很多的内容。
1。IE7原生XHR不支持本地文件访问。这样一来无法本地调试,所以,我们还要为IE7做特殊处理。
2。延迟装载的调试时最友好的,应为它不是用eval装载的脚本,可以很方便的找到出错位置。但是,这需要编译支持的,我们不能修改后马上见效。这样,我们就可以借助非ie浏览器支持的data协议,脚本内编译预装载脚本。
。。。。
这些东西,开发期的东西,写的大一点,多一点,升值性能低一点,无所谓。上线时踢出了照常运行^_^




此外,我还打算支持一些其他装载模式。

比如,我们可以吧JSI以最简单的方式工作,如,不需要装载单元的隔离。
不需要依赖管理
这样虽然有点退化的感觉,不过也是一种普及JSI的办法,JSI的思想有点超前了,曲高和寡,不如做点简单的东西,让大众也能接受东西。
JSI框架提供一个无侵入的脚本库管理解决方案,和一个全面的前端开发调试、文档解析、模版编译、打包导出环境支持。 作为一个开发期间的脚本管理工具,让开发者在开发期间享受JSI带来的种种便捷,也可以作为一个运行时的脚本管理框架,让类库编写者能够自己管理好自己编写的类库的相关依赖,让类库的最终用户从繁琐的依赖管理中解脱出来,提高类库的易用性。 JSI 拥有一套完善有效的模块隔离机制,方便重用、组织第三方脚本,避免它们带来的命名污染问题。JSI极力追求简单,不加入特殊语法,被管理的脚本框架依赖。 开发便捷 * 自动隔离 不用自己编写闭包隔离脚本冲突,JSI自动处理。 * 无需名称空间 JSI有隐式的名称空间,既有名称空间的好处,又没有名称空间的麻烦和性能损失,还可以方便重构(修改报名无需修改代码)。即:你的脚本放在哪个目录下,他就自动属于哪个名称空间 * 优化脚本组织 可以按包(目录)组织您的脚本,划分模块。 * 增量定义依赖 支持功能全面的依赖管理,同时,依赖增量定义。如果有新的类库需求,只许吧新的程序包扔进相关目录,不需修改已有代码。 * 打包部署 部署的内容可以不再是零碎的文件,你可以部署程序包(zip文件) * 自动化导出合并 文件合并,自动隔离冲突,自动压缩等等,都可以自动化,你只许指定你需要到处的元素即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值