开发提示

开发提示

如果您要开发酷Q应用(尤其是要分享给他人使用时),建议您详细阅读本提示。

这些提示有什么好处?

  • 稳定:为了让酷Q能够长时间地稳定运行,不因为应用出错而崩溃。
  • 高效:为了让应用能够高效地运行,尽可能做到回复零延迟。

如果您的应用能够尽可能遵循这套规范,相信这款应用能受到机器人玩家的喜爱,也一定能为大家的AI增添色彩。

注意事项

新手开发者在开发过程中,常常会出现一些疏忽,在我们开发应用过程中,应该避免这些疏忽。

注重稳定性

在开发过程中,IDE常常会指出一些错误,通过IDE的错误定位,我们可以及时改正错误。

但更多的时候,IDE并不能帮我们指出一部分错误,如运行时的数组越界、内存泄漏,或因网络波动造成的接口失效等,正因为无法及时发现,这些错误的危害比前一种更大。这就要靠我们在开发时,本着谨慎的态度去撰写代码,考虑运行中的多种情况,切忌“能运行就好”。

如果真的发生了如上错误,可以多输出调试数据,帮助我们定位错误位置。

测试环境≠实际环境

在测试环境中,应用被调用的次数是有限的,而在实际使用中,消息的压力往往会突增突减,应用需要持续运行的时间也会很长。在测试过程中,除了简单的测试性调用外,我们也应该注意应用的长时间、高频率、多群同时调用。还要注意开发中的应用是否会对其他应用造成影响(如误拦截消息等)。

不要使用“优化内存”(SetProcessWorkingSetSize)等优化命令

使用此类命令,仅仅会使酷Q的内存数据从高速的内存中转移到低速的虚拟内存中。这不仅无法实际释放内存,还会使酷Q运行效率更低,因此在应用中绝对禁用此类命令

开发过程中,应该更多防范内存泄漏的问题,而不是如何去“释放”内存。

重要规范

以下规范通常是不可违背的。否则可能造成应用无法读取崩溃/致命错误,或严重的消息卡顿

启动&初始化

不要在 _启动子程序()(易语言SDK)、AppInfoInitialize 中加入除SDK原有代码以外的初始化代码

执行这几个函数时,酷Q仍在初始化阶段,如果此时进行多余的操作,可能会造成酷Q启动卡顿,或直接崩溃。

如有初始化代码,可以在 _eventStartup(酷Q启动事件)、_eventEnable(应用启用事件)等事件中添加。

不要在 _eventStartup(酷Q启动事件)中弹窗

酷Q刚启动时,用户需要一个安静的环境,此时不应该随意弹窗。如果确实需要提供窗口用于设置等,可以在应用说明中,引导用户使用应用菜单打开相应的窗口。

使用指定的应用储存目录

在SDK的 _eventStartup 事件中,已经获取了应用的储存目录,并且设置了全局变量。在储存数据、配置等内容时,务必将数据储存到该目录下。

事件处理

仅使用需要的事件

酷Q在SDK中提供了很多事件供开发者使用。如果某个事件不需要用到,请在 app.json 中删除这个事件,并且删除对应的函数。 多余的事件会造成酷Q对应用进行无意义的调用,可能会造成消息处理的延迟(尤其在消息相当多的时候)。

先判断,后处理

为了避免无意义的处理所带来的卡顿,在任何时候,应用都应该先判断用户是否需要执行命令(或执行什么命令),再决定忽略或是进行进一步的消息处理。

易语言示例:

错误

函数 _eventGroupMsg() {
    要回复的消息 = 访问网页(“https://cqp.cc/api?chat”) ' 通过网页访问,获取要回复的消息
    如果真 (寻找文本 (msg, “测试命令”, , 假) ≠ -1) { '如果用户的消息中,包含“测试命令”,就回复消息
        CQ.发送群消息 (fromGroup, 要回复的消息)
        返回 (#消息_拦截)
    }
    返回 (#消息_忽略)
}

正确

函数 _eventGroupMsg() {
    如果真 (寻找文本 (msg, “测试命令”, , 假) ≠ -1) { ' 如果用户的消息中,包含“测试命令”
        要回复的消息 = 访问网页(“https://cqp.cc/api?chat”) ' 这时候再通过网页访问,获取要回复的消息
        CQ.发送群消息 (fromGroup, 要回复的消息) ' 然后再将消息发送出去
        返回 (#消息_拦截)
    }
    返回 (#消息_忽略)
}

在错误案例中,一旦应用接收到一条消息,就会立即“访问网页”,获取一句要回复的消息。

粗看似乎并没有问题。但是开发者忽略了一种情况,当发言者没有发送“测试命令”时,应用也会去获取一句消息。而网页访问通常是相当耗时的,这会造成酷Q处理所有群消息时,产生严重的延迟(在接收到大量消息时,应用会因为来不及处理产生卡顿,甚至崩溃)。

注意线程安全

酷Q的消息处理均在多线程处理,同一个函数可能会被多条线程同时执行。请在进行非线程安全的操作时(如操作全局变量、全局数组变量等),加上临界区(易语言中称为许可证)。具体用法可以参考网上的资料。

同时,如非必要,也请尽可能减少使用全局变量(包括易语言中的程序集变量),而改用局部变量。

开发技巧

在开发中,使用适当的技巧,可以让开发过程更加快速,同时使代码可读性、可维护性更强。

代码重用

在酷Q Pro中,为了方便应对不同消息的处理,所有事件被分为了不同的函数。如果一个应用要同时支持多种消息类型的回复,为了提高代码的可维护性,应该注意代码重用

比如开发一个“讲笑话”应用,应该将“获取笑话”作为单独的一个函数,然后在好友、群、临时、讨论组事件中调用“获取笑话”函数。而不应该将获取笑话函数复制四遍,放入这四个事件中。

如果对不同类型的消息处理有细微不同的话,可以将消息类型等作为参数传入“获取笑话”中,再使用“如果”、“判断”等函数进行区分。