客户端环境

在前面的章节中,是假定脚本运行在领域的服务器上,这种代码被称为服务端。
而与服务端相对应的,就是客户端环境。客户端环境指的是在用户的设备上执行代码。你可以在“客户端脚本组件”中编写运行在客户端环境的代码。
下面我们来介绍一下这两种环境的差异:
服务端环境
优点:是领域默认的执行环境,简单、易于理解、方便操作;可以直接操作领域的数据。
缺点:每个用户执行脚本的时长有一定限制。不过大部分应用往往触及不到这个限制。
客户端环境
优点:没有运行时长限制;具有更灵活的编程模型,如果用户不离开页面,可以一直保留临时变量和其它状态;运行频率上限很高,达到每秒几十次以上,以至于可以编写游戏。
缺点:客户端的执行结果不可信赖,如果没有规划好代码,客户端有作弊可能;编程复杂度较高,不适合脚本初学者;不能直接访问领域的数据,需要通过通道和对外接口函数和领域进行交互。

运行环境

在客户端环境中,脚本没有办法直接访问领域数据,包括属性、物品、数据库等。如果想要获取这些数据,需要通过参数传值(具体请看 客户端脚本组件 章节)或通道发送信息(具体请看 通道 章节)。
此外,其它一些功能也可能发生变化或缺失,具体以代码编辑器的提示和实际运行情况为主。

全局函数

客户端脚本不能调用普通的全局函数。在函数页面,需要将函数的类型调整为“客户端”或“对外接口”。
“客户端”函数可以被客户端脚本调用,运行在客户端环境中。它适合整合一些客户端脚本都会用到的功能。
“对外接口”函数也可以被客户端脚本调用,但它会将调用请求发送给服务器,最后运行于服务端环境中,因此可以像服务端脚本一样读取各类领域数据。但是,对外接口函数不能有返回值,同时也具有运行时长的限制。它适合通知服务器进行一些操作,例如保存客户端的数据等。
需要注意,不能相信“对外接口”的参数,它有可能是任何用户发送的任何值。在执行关键操作前,要查看用户是否拥有权限。

回调函数

在客户端环境中,比较常见的一种代码是“回调函数”。从字面上来看,回调函数指的是“回过来调用的函数”。也就是说,你会将一个函数作为参数传入,过一段时间后,可能因为触发了什么事件(例如接收到了通道的信息、点击了某个按钮或修改了输入框等),这个函数才会被执行。例如:
输入框.当内容改变时((内容) => {
    提示('你输入了新的内容:' + 内容);
})
当输入框的内容被用户改变时,才会执行被传入的函数,向用户发出提示。
注意,此处函数指的是 JavaScript 中的一种变量类型,不是 Realm 的全局函数。(参数) => {} 是函数的另一种写法, 和 function (参数) {}差不多。具体可以查看该章节中的“函数”小节。
Realm 领域手册
Realm·该手册将介绍如何通过 Realm 构建领域,从最基本的操作,到代码编程知识。
https://realm.host/to/guide/page/%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B

安全

理论上,客户端的数据、代码都可以被查看和修改。因此,要充分怀疑客户端发来的数据,把数据发给客户端时也要小心,不能把不想被看到的数据发送过去。
在设计客户端的功能时,也得考虑这一点。例如,编写商店的交易功能时,让客户端告诉服务端自己要花多少钱,而不是自己有多少钱。
此外,客户端环境有时也可能不太稳定。例如,断网、意外中止、因为有限的设备性能导致界面卡顿。