先回顾历史:
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的思想有点超前了,曲高和寡,不如做点简单的东西,让大众也能接受东西。
分享到:
相关推荐
2.1 或更高版本下发布。 用法 强烈建议首先查看位于 的 jsi-examples 存储库。 简而言之,您需要像这样初始化 RTree: // Create and initialize an rtree SpatialIndex si = new RTree(); si.init(null); 然后添加...
该代码是开源的,并根据GNU 宽通用公共许可证2.1 或更高版本发布。用法强烈建议首先查看 jsi-examples 存储库https://github.com/aled/jsi-examples。简而言之,您需要像这样初始化 RTree// Create and initialize ...
文学翻译的文化传递、语言风格保持与读者接受度提升
,,Phase_Shift_T:基于MATLAB Simulink的移相变压器仿真模型,可实现-25°、-15°……25°的移相。 变压器副边实现36脉波不控整流,变压器网侧电压、阈侧电压以及移相角度可直接设置。 仿真条件:MATLAB Simulink R2015b ,核心关键词: 1. 移相变压器仿真模型 2. MATLAB Simulink 3. 移相 4. 36脉波不控整流 5. 网侧电压 6. 阈侧电压 7. 设置 8. MATLAB Simulink R2015b,MATLAB Simulink中实现宽范围移相与多脉波整流的变压器仿真模型
管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息。商品分类管理页面,此页面提供给管理员的功能有:查看已发布的商品分类数据,修改商品分类,商品分类作废,即可删除。商品信息管理页面,此页面提供给管理员的功能有:根据商品名称进行条件查询,还可以对商品数据进行新增、修改、查询操作等等。商品资讯管理页面,此页面提供给管理员的功能有:查看已发布的商品资讯数据,修改商品资讯,商品资讯作废,即可删除。2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 2.3 Mysql数据库介绍 4 3 系统分析 6 3.1 系统可行性分析 6 3.1.1 技术可行性分析 6 3.1.2 经济可行性分析 6 3.1.3 运行可行性分析 6 3.2 系统性能分析 7 3.2.1 易用性指标 7 3.2.2 可扩展性指标 7 3.2.3 健壮性指标 7 3.2.4 安全性指标 8 3.3 系统流程分
当前资源包含初中高级闯关习题
,,欧姆龙PLC螺丝机程序(含触摸屏程序) 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释、非常适合用来欧姆龙plc新手学习,包括欧姆龙plc程序和威纶触摸屏程序。 是新手入门级欧姆龙PLC电气爱好从业人员借鉴和参考经典案列。 ,欧姆龙PLC; 螺丝机程序; 触摸屏程序; 程序成熟可靠; 注释详尽; 新手学习; 经典案例。,欧姆龙PLC螺丝机程序详解:成熟可靠的新手学习经典案例
,,c# mqtt高性能服务器端源代码。 你还在使用第三方服务软件吗?不如试试这个开发框架,助你一臂之力,无限制,无全开源,无版权约束,全是自主开发。 开源框架包括服务器和客户端,支持mqtt3.0及5.0。 可嵌入到自己的服务系统及软件客户端中,不受第三方约束。 你要问我稳定性如何?我能回答的是已经运行了三年有余无任何问题。 如果你要问能接入多少终端,我可以明确回答,不敢往多的说,单节点支持100万并发量无压力。 这是一个关于C# MQTT高性能服务器端源代码的描述。如果我重新表述一下,可以这样说:你是否还在使用第三方服务软件?为什么不尝试一下这个开发框架呢?它可以为你提供强大的支持,没有任何限制,完全开源,没有版权约束,全部都是自主开发的。 这个开源框架包括服务器和客户端,支持MQTT 3.0和5.0协议。你可以将它嵌入到自己的服务系统和软件客户端中,不受第三方的限制。 你可能会问它的稳定性如何。我可以很自信地告诉你,它已经运行了三年多,没有出现任何问题。 如果你想知道它可以接入多少终端,我可以明确地回答,单节点支持100万并发连接,毫不费力。 从这段话中,我们可以提取出以
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,matlab程序,复现,基于改进粒子群算法的混合储能系统容量优化,关键词,超级电容,混合储能,粒子群算法。 拿之前问清楚 可以运行看结果,出不 不 ,MATLAB程序; 复现; 改进粒子群算法; 混合储能系统容量优化; 超级电容; 粒子群算法。,MATLAB复现:混合储能系统优化策略研究,基于改进粒子群算法的超级电容容量配置
,,k—medoids 聚类方法的MATLAB源代码,导入数据部分和画图部分已经用中文给出了注释。 这儿选取一个对象叫做mediod来代替上面的中心 的作用,这样的一个medoid就标识了这个类。 ,k-medoids聚类方法; MATLAB源代码; 导入数据部分; 画图部分; 对象; medoid; 类标识。,基于K-Medoids聚类方法的MATLAB源代码及中文注释解析
自驾游中如何保护自然环境
qt 一个基于Qt Creator(qt,C++)实现中国象棋人机对战.
项目资源包含:可运行源码+sql文件+文档; python3.7+django+mysql5.7+vue 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 系统是一个很好的项目,结合了后端服务(django)和前端用户界面(Vue.js)技术,实现了前后端分离。 当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。在个人中心页面可以输入个人信息进行更新信息操作,还可以对我的订单、我的地址和我的收藏进行详细操作。 管理员进入主页面,主要功能包括对首页、个人中心、用户管理、商品类别管理、热卖商品管理、投诉建议、系统管理、订单管理等进行操作。用户进入系统后台,主要功能包括对个人中心和我的收藏管理进行操作。
漫画作品与节日庆典结合
自驾游中的手机APP推荐
,,该套程序是电芯上料机,空料仓和满料仓都是步进电机,搬运模组是松下A6脉冲控制伺服电机,该套程序是已经在量产程序,图四是上料机设备全局图,标准程序框架,其他设备也可套用。 ,电芯上料机; 步进电机; 满料仓; 松下A6脉冲控制伺服电机; 标准程序框架; 设备全局图; 其他设备通用,电芯上料机程序:松下A6伺服电机驱动的步进式料仓管理系统
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,Matlab代码-基于拉格朗日电力系统参数辨识 对电力系统中存在多个不良参数进行辨识,以IEEE14节点系统进行仿真验证。 ,基于拉格朗日; 电力系统参数辨识; 不良参数辨识; IEEE14节点系统仿真验证。,基于拉格朗日算法的电力系统多参数辨识及IEEE14节点仿真验证
它利用图像预处理、车牌字符分割、字符识别等相关处理技术,对小型车辆的蓝底白字车牌进行车牌号识别。车牌定位是利用HSV色彩定位法,这种方法可大大缩短后续处理时间,字符分割采用阈值限定分割,字符识别则采用模板匹配法。在拍摄角度不过度倾斜情况下识别精度较高,白天照片预处理、分割效果较晚间好。