`
jindw
  • 浏览: 508395 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

JSI2.1计划

    博客分类:
  • JSI
阅读更多
先回顾历史:
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的思想有点超前了,曲高和寡,不如做点简单的东西,让大众也能接受东西。
分享到:
评论
6 楼 jindw 2008-01-15  
没有测试过IE7

等JSI2.1吧,估计元宵左右能发布。
不过,这个版本会暂时砍掉装饰引擎这类附加功能。
只留下一个简单的内核。文件大约7K。

而且JSI2。1主要目标不是作为运行时框架,而是一种开发模式。
  --在JSI上开发,发布时剥离JSI,导出成普通脚本。
5 楼 hademon 2008-01-15  
哦,补充一下,在服务器模式下,装饰器引擎自动装饰模式 的时候,最后的效果不能显示出来,没有把代码format,但是没有报JS错
4 楼 hademon 2008-01-15  
哦,8好意思,刚才没仔细看你的介绍,IE7在本地访问有问题。

现在放在服务器上进行测试,发现IE7还是有问题…………

发成错误的浏览器:IE7
发成错误的example:异步模式 & 装饰器引擎自动装饰模式
错误现象:不停的跳出alert对话框 内容是"未指明的错误",但是跳过数次以后却可以正常出结果。
IE错误信息:无

测试所用服务器:Tomcat5.5
3 楼 hademon 2008-01-14  
刚才从http://www.xidea.org/project/jsi/网上下载了JSI,直接运行example就报错了

发成错误的浏览器:IE7
发成错误的example:异步模式 & 装饰器引擎自动装饰模式
错误现象:不停的跳出alert对话框 内容是"拒绝访问",但是数次以后IE报告js错误。
IE错误信息:
行:1
Char:1
错误:'name'为空或不是对象
代码:0
URL: file:///C:/JSI/example/code.html

另外,经过测试,所有example在firefox和IE6下全部正常运行
2 楼 hax 2008-01-03  
赞同你的方向。
1 楼 jindw 2008-01-01  
2.1 源码先睹为快。
http://xidea.cvs.sourceforge.net/xidea/JSI2/web/source/boot-core.js?view=markup

经过这次重构,现在的内核源码不到2.0时的一半,压缩后只有5k左右,当能,这里没有异步和延迟装载的代码了。

相关推荐

    JSI, java脚本开发工具

    JSI框架提供一个无侵入的脚本库管理解决方案,和一个全面的前端开发调试、文档解析、模版编译、打包导出环境支持。 作为一个开发期间的脚本管理工具,让开发者在开发期间享受JSI带来的种种便捷,也可以作为一个运行...

    海尔液晶电源 0094001224B JSI-190419-050 JSI-220409-050原理图.pdf

    根据提供的信息,我们可以了解到这份文档是关于海尔液晶电视电源板(型号:0094001224B JSI-190419-050 JSI-220409-050)的原理图。这份原理图详细地展示了电源板的内部电路结构、元件布局及其连接方式等关键信息。...

    JSI-full-2.0

    【JSI-full-2.0】是一个基于JavaScript的项目,主要关注的是JavaScript这门编程语言。这个项目的全称可能指的是JavaScript Interface或JavaScript Integrated,但具体含义需要根据项目的文档来确定。从提供的文件...

    JSI-GAN:JSI-GAN的官方存储库(于AAAI 2020接受)

    这是JSI-GAN(AAAI2020)的官方存储库。 我们提供了培训和测试代码,以及经过训练的权重和用于JSI-GAN的数据集(train + test)。 如果您发现此存储库有用,请考虑引用我们的。 参考: Soo Ye Kim *,Jihyong Oh ...

    jsi-modules:用jsi进行模块学习

    在JavaScript的世界里,JSI(JavaScript Interpreter)是一个用于在运行时执行JavaScript代码的解释器,它为各种应用场景提供了便利,比如在嵌入式系统、服务器端或是其他非浏览器环境中运行JavaScript。"jsi-...

    using使用JSI为React Native提供快速简便的多线程-C/C++开发

    react-native-multithreading using使用JSI的React Native的快速简便的多线程处理。 安装npm install react-native-multithreading npx pod-i react-native-multithreading using使用JSI进行React Native的快速简便...

    海尔液晶电源背光板 0094001274E JSI-320411 原理图.pdf

    ### 海尔液晶电视电源背光板0094001274E JSI-320411原理图解析 #### 概述 本文将详细解析海尔液晶电视电源背光板0094001274E JSI-320411原理图中的关键元件及其功能、电路设计思路与工作原理,帮助读者更好地理解该...

    java推荐算法源码-jsi:Java空间索引

    2.1 或更高版本下发布。 用法 强烈建议首先查看位于 的 jsi-examples 存储库。 简而言之,您需要像这样初始化 RTree: // Create and initialize an rtree SpatialIndex si = new RTree(); si.init(null); 然后添加...

    jsi-wikifier-api

    JSI Wikifier OpenAPI规范 JSI Wikifier API文档存储库。链接文档: : SwaggerUI: ://jsi-eubusinessgraph.github.io/jsi-wikifier-api/swagger-ui/ 看完整规格: JSON YAML 警告:仅当Travis CI完成部署后,以上...

    jsish:Jsi是一个小型的C嵌入式javascript解释器,具有紧密编织的Web和DB支持

    Jsi是带有内置websocket-server,sqlite和C -extensibility的javascript -ish解释器。 | | | 快速开始下载适用于 / 的二进制文件: wget ...

    eccl-jsi.github.io

    eccl-jsi.github.io

    HDT-JSI01

    【HDT-JSI01】项目是一个以JavaScript为核心的开发实践,它可能是一个开源项目或者教程,因为通常在编程领域,这种命名格式常用于版本控制或学习资源。JavaScript是一种广泛使用的编程语言,尤其在网络开发中扮演着...

    轻量系统JS-UI框架子系统

    **轻量系统JS-UI框架子系统详解** OpenHarmony作为一个开源操作系统,旨在为各种智能设备提供跨平台的解决方案。为了方便开发者构建针对轻量级设备的应用,它提供了"轻量系统JS-UI框架子系统"。...

    自定义三种方式进度条

    在Android开发中,自定义控件是提升应用用户体验和界面美观度的重要手段。本文将深入探讨如何使用Canvas来实现自定义的三种方式进度条。Canvas是Android图形绘制的基础,通过它可以进行复杂的图形操作,包括线条、...

    react-native-multithreading:using使用JSI为React Native提供快速简便的多线程

    :thread: 使用JSI的React Native的快速简便的多线程处理。 安装 npm install react-native-multithreading npx pod-install 需要包括的react-native-reanimated版本。 您可以自己打补丁,也可以等到它发布后再...

    Java Spatial Index.zip

    Java Spatial Index(JSI)是一种在Java环境中实现的空间索引技术,主要用于管理和高效查询具有空间属性的数据。在地理信息系统(GIS)、数据库系统、地图应用等领域,这种索引机制是不可或缺的,因为它能帮助快速...

    javascript sfs

    javascript sfs多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加

    react-native-quick-md5:快速C ++实现与MD5的JSI绑定,用于React Native

    通过React 5的MD5的JSI绑定,以极快的速度实现C ++实现。 确认它比在iPhone 11 Pro上使用快10倍,在Essential Phone上快8倍。 您可以在下查看基准测试。 安装 npm install react-native-quick-md5 用法 import { ...

    正泰LQG-0.66型电流互感器.PDF

    正泰LQG-0.66型电流互感器PDF,

    jsi-beginner:条件语句、forforEach 循环和啤酒瓶

    在JavaScript编程语言中,条件语句、for循环和forEach方法是构建动态和交互式Web应用的基础元素。让我们深入了解这些概念。 首先,条件语句,如`if...else`和`switch`,允许程序根据特定条件执行不同的代码块。...

Global site tag (gtag.js) - Google Analytics