ZhangLiHai.Com

关于:JSVM

2005-11-26 1:55:45

 

JSVM (JavaScript Virtual Machine 的缩写) 是一个面向 JavaScript 开发领域的基础框架。

该软件是自由软件,2003年底由万常华(wch3116)发起, 目前是2.0,采用的是 BSD License 授权协议。

JavaScript的开发长期以来停留在基于function,面向过程的开发模式。这种模式的缺点是无组织无纪律,代码不宜复用。近些年出现了不少JS框架,但多数专注于某些应用领域,比如 bindows 侧重 UI , 而一些 Ajax 框架则主要关注于通讯层。这些框架的目的是提供一套工具库给开发人员使用,而如果想进一步扩展其功能进行二次开发则比较困难。发展发展规模都受到了一些限制。

JSVM 出现将改变这种状况,它不是针对特定某个应用领域,而是在代码组织结构和开发规范上作了很多努力。开发人员只要遵循jsvm的规范进行JavaScript开发,产出物不用作任何改动就能直接被其他人使用,不用担心文件名的冲突,变量函数名的冲突,他们之间的依赖关系是怎样的。劳动成果共享(代码重用)就变得非常简单。对于多人团队开发这一点格外重要。这既是jsvm的根本目的和核心价值。

jsvm2其实就是定义了js开发规范,把传统function集合js文件的开发方式,改成了面向对象-类的开发模式。我们写好一组有某些功能的类,其他人拷过去,部署到合适位置,就能直接通过 import 方式加载后直接使用而不用担心定义冲突,以及文件之间的依赖关系。

JSVM 的规范很简单:就是基于类(Function)的开发。所有的模块都以类的方式进行定义。类名采用类java的命名规范 (包名.)+(类名) 例如:com.homolo.example.HelloWorld, 每一个独立的类必须存成单个文件(扩展名.jsc),路径采用:\(包名\)+(类名.jsc) 例如:\jsvm2\classes\com\homolo\example\HelloWorld.jsc。注意: 定层必须直接定义在window对象下,例如:com.homolo.example.HelloWorld 类中的 com 包,必须定义成 window.com = new Package(); 这样我们在任何地方根据包名+类名的方式就可以访问到这个类。当然开发人员写代码的时候不用这么麻烦,只需通过API函数 _$pakcage("com.homolo.example"); 就可以了。


我们在 JSVM1.x 中尝试了一种较传统方式不同的 JavaScript(基于web中的JS) 开发模式。一年多的时间中,得到了大量积极有效的反馈和建议,在这些基础上今天我们正式推出 JSVM2

JavaScript 一直以来扮演着Web小脚本的角色,开发者用它来在web上制作一些动态特效,  以及表单提交前对数据的预校验等等,随着客户端处理能力日益提升,DHTML在表示层的动态特征和丰富表现力,以及XmlHttp,XmlDomHTTP工具的出现, 另外一种应用模式开始引起人们的关注:基于 JavaScript + DHTML + XML + XmlHttp/XmlDom RIA (Rich Internet Application),更确切地说,应称为:RWA (Rich Web Application)。这类应用给用户带来的良好体验远胜于传统 Web 中依赖 Form 提交数据的方式,并且较大程度减小了服务器的负载和网络流量,提高了系统综合性能。后来一个老外提出了 Ajax 这个名词,关于这个概念我不再冗余复述。

如今Ajax Framework 像雨后春笋一般涌现很多,其中不乏优秀之作。但在此并不多作介绍。 因为 JSVM 和他们定位不同,JSVM不仅仅是一个 Ajax 框架,也并非仅仅为了实现 Ajax 而产生。它作为一个更底层更抽象的 JavaScript 框架,为我们实现类似Ajax应用提供了一个基础平台。我曾经拿jsvm151js上与许多js爱好者共同讨论,其中有两种比较典型的不同看法是:

1.     JavaScript 需要框架吗,是不是把简单的事情复杂化了? 短小精干才是脚本之道。

2.     非要借鉴 JAVA 的架构吗?是否有更好的解决方案。

对于第一种意见,我认为某种条件下还是有道理的。例如:我仅仅是想打印一句 Hello, world!

直接 alert()就可以了,何必要弄一个 Framework 出来,岂非劳民伤财,小题大做。 确实,对于一些简单的web应用,js 在整个体系中充当的角色很小,我觉得是可以不用框架的。但对于一个RIA模式的Web应用,尤其是企业级的应用,系统复杂程度和JS代码规模相当庞大的情况下,没有框架带来的后果是可以预见的。对于第二种观点:赞成框架的必要性,但对jsvm一些模仿”java的做法抱有怀疑态度。我不能说这种看法不对,也许确实有更好API架构。但是,本人认为这个不是关键所在,jsvm提供了对多种语法解析器的支持,有兴趣的人完全可以根据自己喜好在jsvm下开发出另外一套API。类C#,VB的语法都可以实现。

简单的说,JSVM 根本目的是为了规范浏览器端JavaScript脚本开发,更好的实现代码复用。传统面向过程型的JavaScript开发方式已经明显不能满足大规模软件开发的需要。大部分迹象表明  随着 RIA 的发展,客户端都将承担更多的逻辑处理工作,企业级应用的代码规模和复杂度都是相当大的。有效的代码组织结构,合理的模块粒度,低耦合高内聚的设计原则等等如何引入到JavaScript的开发上来?相信当你了解 JSVM2 之后,会有一些答案。

作为一个框架,JSVM要解决的问题不是提供某一种应用的解决方案,而是针对各种场景提供广泛的支持。另外一个需要说明的是:jsvm2并不是jsvm1的一个升级版,几乎是在jsvm1上完全重构。且不提供对原jsvm1.x中的类的支持。(当然,原jsvm1.x下的类需要经过做一些小改动即能在jsvm2下正常工作)较jsvm1.xjsvm2 有了几处明显的变化:

  • 性能上有了明显的提升。
  • 每个类文件拥有独立的语法域。
  • 几种常见的web运行模式在Framework中将直接被支持。
  • 编译引擎支持多语法解析器,并缺省提供了一个名为"jsvm2"的语法解析器。从语法层面提供了一些OO关键字的支持,使jsvm下的面向对象的javascript开发更为直观和方便。
  •  具有更灵活的扩展性。二次开发者可以很方便的扩展其功能。
  • 目前jsvm2支持的平台有 ie5+ , firefox1+.


    网站地址:http://jsvm.homolo.com/forums/

    目前最新版本下载:http://jsvm.homolo.com/forums/107/ShowPost.aspx