在闪电中执行单个服务器呼叫,而不是多个呼叫

时间:2019-07-20 15:51:48

标签: salesforce apex aura-framework

在助手中,我有一些方法,每个方法都在组件控制器中调用@AuraEnabled方法。

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

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

在“ init”期间调用的方法将返回一个字符串列表,一个十进制数以及一个字符串。

2 个答案:

答案 0 :(得分:0)

在控制器中定义custom Apex class,该控制器将您希望从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处理程序。您只需要进行一次往返。

答案 1 :(得分: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)。动作的批次是   也称为棚车,类似于将棚车耦合在一起的火车   在一起。

     

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

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

也许您需要玩background actions。我的意思是,这应该在Apex中不需要多余的拐杖就能工作,以将多个调用捆绑为一个,创建复杂的响应包装器类,并且每个回调仅提取其关心的数据,这是很多不必要的代码:/