在帮助程序中,我有方法,每个方法都调用组件控制器中的 @AuraEnabled 方法。
其中一些调用仅在“init”事件期间进行。从性能的角度来看,我应该在“init”期间只打一次电话。
实现这一目标的优雅方法是什么?
在“init”期间调用的方法返回一个字符串列表、一个小数和一个字符串。
在帮助程序中,我有方法,每个方法都调用组件控制器中的 @AuraEnabled 方法。
其中一些调用仅在“init”事件期间进行。从性能的角度来看,我应该在“init”期间只打一次电话。
实现这一目标的优雅方法是什么?
在“init”期间调用的方法返回一个字符串列表、一个小数和一个字符串。
在您的控制器中定义一个自定义 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
处理程序。您只需要进行一次往返。
我发誓你不需要做任何事情,不需要花哨的编码,SF 会作为 Aura 框架的一部分为你做......
不久前曾经像魅力一样为我工作(事实上,即使是其他方式,肯定是 1 Apex 调用 = 我拥有的所有方法都使用相同的调控器限制,我不得不重新处理一些查询)
$A.enqueueAction(action) 将服务器端控制器操作添加到要执行的操作队列中。所有入队的动作都将在事件循环结束时运行。该框架不是为每个单独的操作发送单独的请求,而是处理事件链并将队列中的操作批处理为一个请求。(...) 框架将队列中的操作批处理为一个服务器请求。请求有效负载包括所有操作及其序列化为 JSON 的数据。请求有效负载限制为 4 MB。
框架在将动作发送到服务器之前将它们排队。当您编写代码时,这种机制在很大程度上对您来说是透明的,但它使框架能够通过将多个操作批处理到一个请求 (XHR) 中来最小化网络流量。动作的批处理也称为 boxcar'ing,类似于将 boxcar 连接在一起的火车。
该框架使用堆栈来跟踪要发送到服务器的操作。当浏览器在客户端完成对事件和 JavaScript 的处理后,堆栈上的入队操作会批量发送到服务器。
如果这不像您描述的那样工作(您可以发布一些代码吗?)并且请求大小小于 4 MB...也许他们破坏了某些东西并且您发现了一个平台错误。您确定您在调试日志中看到了单独的条目?还是在浏览器中进行网络流量监控?
也许你需要玩背景动作。我的意思是这应该可以在 Apex 中无需额外的拐杖将多个调用捆绑到一个中工作,创建复杂的响应包装类,并且每个回调只取消选择它关心的数据,这是很多不必要的代码:/