为了让用户更高效地编写和执行JS脚本,我们在Total Control脚本环境中集成了 RingoJS 框架,用户可在脚本中直接引入并使用RingoJS的库。
有的用户不清楚RingJS是什么,其实Ringo是一个构建在Java虚拟机上的JS平台, RingoJS具有大量的内置模块。
ECMA Java规范将该语言描述为面向对象的编程语言,用于在主机环境中执行计算和处理计算对象。每个用Java编写的应用程序都需要一个主机环境,它提供特定于环境的对象和API来执行I / O。 Ringo为Java提供了这样一个环境,并附带一组模块以使应用程序开发更容易。由于其作为通用编程语言的特性,Java可以用来解决各种各样的问题,而Ringo可以帮助您这么做。利用Ringo,编写命令行工具,复杂的Web应用程序甚至基于Java UI技术的GUI应用程序都很容易。
脚本语言如Java需要一个引擎来解释和执行程序。 Ringo没有自己的引擎。相反,它使用Mozilla Rhino,一种Java中的Java实现。犀牛的最初发展始于Netscape时代,并一直持续到现在。基本思想是将Java程序编译为Java字节码,Java字节码可以由Java虚拟机(JVM)执行。犀牛还提供了对Java标准类库和其他每个Java类的轻松访问。这使得将现有的Java库集成到新的Java应用程序变得很容易。例如:Ringo不是编写自己的I / O系统,而是使用现有的Java I / O类,并将它们封装起来以提供从Java更容易的访问。
Ringo在服务器或专用机器上执行Java,而不是在Web浏览器上下文中执行。如果您已经从基于HTML的应用程序中了解Java,则这是主要区别。没有什么像一个窗口对象,你没有一个DOM来操纵HTML对象。尽管如此,很多事情会像你从浏览器中知道的那样。您可以使用console.log()调试到控制台,但也有专用的日志记录模块可用于更复杂的日志记录。
Ringo最大的优势之一就是模块系统。 Ringo并没有自己构建代码,而是拥有一个易于使用的模块系统。它基于CommonJS模块,这是用于保持代码可互换的服务器端Java环境的规范。如果您了解Node.js的模块,您还知道如何在Ringo中编写模块。一个模块封装了Java方法和变量,并将它们与其他模块隔离。
多线程Java
典型的命令行应用程序和Web应用程序不需要Ringo的多线程模型的任何特殊知识。使用Ringo并不意味着明确的多线程,初学者不需要编写并行的Java代码。但是,如果某个程序需要特殊的并行执行,或者在后台运行耗时的计算任务,开发人员可以选择使用多线程。
Ringo不是在单线程事件循环中运行每个程序,而是使用JVM线程并行执行Java。为了彼此隔离线程,每个正在运行的程序或模块都被工作者包装。工作人员是程序的执行上下文,具有自己的一组模块和数据。这将工作人员彼此隔离,并防止典型的多线程问题,如并发修改共享数据。 Ringo的工作人员受W3C Web Worker API的影响,并使用异步消息传递进行工作间通信。像W3C Web Workers一样,每个Ringo工作者都有自己的事件循环,保证在单个线程中运行,这意味着只有在没有其他代码运行时才会处理预定功能和外部事件。虽然Ringo工作人员都有自己的一套模块可供使用,但他们的确使用标准的构造函数和原型来共享全局对象。这是安全的,因为Ringo中的全局对象实际上扮演只读角色。
RingoJS具有大量的内置模块。非常实用,只是其框架一直是英文语言,所以大家不熟悉,我们特地将其翻译成中文语言,供大家学习和使用,