0

在帮助程序中,我有方法,每个方法都调用组件控制器中的 @AuraEnabled 方法。

其中一些调用仅在“init”事件期间进行。从性能的角度来看,我应该在“init”期间只打一次电话。

实现这一目标的优雅方法是什么?

在“init”期间调用的方法返回一个字符串列表、一个小数和一个字符串。

4

2 回答 2

0

在您的控制器中定义一个自定义 Apex 类,该类将您希望从init事件的单个调用中获取的所有信息封装起来:

public class InitializationWrapper {
    @AuraEnabled 
    public List<String> myStringList {get; set;}
    @AuraEnabled 
    public Decimal myDecimal {get; set;}
    @AuraEnabled 
    public String myString {get; set;}
}

从您的服务器端 Apex 调用返回此包装类的实例到您的init处理程序。您只需要进行一次往返。

于 2019-07-20T17:31:38.813 回答
0

我发誓你不需要做任何事情,不需要花哨的编码,SF 会作为 Aura 框架的一部分为你做......

不久前曾经像魅力一样为我工作(事实上,即使是其他方式,肯定是 1 Apex 调用 = 我拥有的所有方法都使用相同的调控器限制,我不得不重新处理一些查询)

https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/controllers_server_actions_call.htm

$A.enqueueAction(action) 将服务器端控制器操作添加到要执行的操作队列中。所有入队的动作都将在事件循环结束时运行。该框架不是为每个单独的操作发送单独的请求,而是处理事件链并将队列中的操作批处理为一个请求。(...) 框架将队列中的操作批处理为一个服务器请求。请求有效负载包括所有操作及其序列化为 JSON 的数据。请求有效负载限制为 4 MB。

https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/controllers_server_actions_queue.htm

框架在将动作发送到服务器之前将它们排队。当您编写代码时,这种机制在很大程度上对您来说是透明的,但它使框架能够通过将多个操作批处理到一个请求 (XHR) 中来最小化网络流量。动作的批处理也称为 boxcar'ing,类似于将 boxcar 连接在一起的火车。

该框架使用堆栈来跟踪要发送到服务器的操作。当浏览器在客户端完成对事件和 JavaScript 的处理后,堆栈上的入队操作会批量发送到服务器。

如果这不像您描述的那样工作(您可以发布一些代码吗?)并且请求大小小于 4 MB...也许他们破坏了某些东西并且您发现了一个平台错误。您确定您在调试日志中看到了单独的条目?还是在浏览器中进行网络流量监控?

也许你需要玩背景动作。我的意思是这应该可以在 Apex 中无需额外的拐杖将多个调用捆绑到一个中工作,创建复杂的响应包装类,并且每个回调只取消选择它关心的数据,这是很多不必要的代码:/

于 2019-07-21T07:42:04.997 回答