Background of this Blog
For several CRM projects in China which I am involved, I found the partner have chosen ABAP webdynpro when custom development is necessary. When asked why they do not consider webclient UI as the first choice, they argued that “Webclient ui is slower than ABAP webdynpro.” or “the performance of Webclient UI is bad compared with ABAP webdynpro, since it has additional layers as BOL and Genil”. From my point of view, such conclusion without concrete performance benchmark does not make too much senses.
Let’s do not consider what we can benefit from webclient ui framework( for example better achitecture, cleaner code, better Maintainability, consistent session magement, consistent navigation management etc ) for the moment. I would like to figure out what is the percent of performance loss caused by additional layers introduced in webclient UI framework – the BOL and Genil. So I made the following performance testings.
Test Preparation
I have created one webclient UI component and one ABAP webdynpro component. Both have the exactly the same functionality:
- Click search button to get several BO instance ( Social post) in result table. I choose the new Genil model named CRMSM delivered in CRM7.0 EHP3, as the structure of it is quite simple.
- Click post ID hyperlink of one search request row, then we can navigate to detail page.
- Click Edit button in detail page to switch to change mode, make some changes on post content, click save button to persist the change.
In the webclient UI component, I ensure that the view controller only calls methods defined in BOL interface, like cl_crm_bol_core~query and modify, cl_crm_bol_entity~set_property and get_property, and if_bol_transaction_context~save. In ABAP webdynpro UI component, I directly call the lower layer function modules SOC_POST_SEARCH, SOC_POST_MODIFY and SOC_POST_SAVE in view controller method.
The ABAP webdynpro search page looks like below:
CRM webclient UI Search page:
ABAP webdynpro detail page:
Webclient UI detail page:
Test using STAD
Note: The aim to use STAD for comparison here is not to get the overhead caused by Additional Layer Overhead, but just give the end user a concrete impression that, the performance of the two different UI technology, ABAP Webdynpro and Webclient UI, resides in the same order of magnitude.
Then I compare the response time of both application via STAD. Below is the performance data of Search button click. We observed the memory consumption of webclient UI component is almost twice than ABAP webdynpro. This makes sense since webclient UI framework needs additional memory to store the model metadata in the runtime and also for objects necessary for BOL / Genil framework processing.
And this is the performance data of post ID hyperlink click. Here webclient UI is slower than ABAP webdynpro, however the absolute time is less than 1 seconds, which does not make too much difference from end user point of view.
This performance data is for Edit button click. Again webclient ui is slower, total time less than 1 seconds.
This is for save button click:
Test using SAT
From this rough test, we are still not clear about what is the exact performance loss caused by the additional layers in webclient UI compared to ABAP webdynpro. So I plan to SAT to do more accurate performance testing using the following categories. I choose three Genil Models in CRM, the technical name of the model is CRMSM, PROD and BT accordingly. I want to know the percent of execution time spent in BOL & Genil layer compared with the total execution time of Search, Modify and Save. ( Category Modify means the property of a Genil model node is only changed in buffer. The change will not persisted into database until save call is performed ).
- o(x): Additional Layer overhead of a given BOL model x
- f(x): absolute execution time spent in BOL and GenIL layer
- a(x): absolute execution time of application API
Post Search
I have written the following report to perform Social post search via cl_crm_bol_core~query. Then I can get the exact time spent on a(x)|x=CRMSM and calculate the o(x)|x=CRMSM.
REPORT ZSAT_POST_SEARCH.
PARAMETERS: po_id type socialdata-internal_id,
maxhit type i.
DATA: lo_core TYPE REF TO cl_crm_bol_core,
lo_collection TYPE REF TO if_bol_entity_col,
lo_root_entity TYPE REF TO cl_crm_bol_entity,
lv_view_name TYPE crmt_view_name,
lv_query_name TYPE crmt_ext_obj_name VALUE 'PostSearch',
lt_query_parameter TYPE crmt_name_value_pair_tab.
START-OF-SELECTION.
SHIFT po_id RIGHT DELETING TRAILING space.
IF po_id NE space.
DATA(ls_query_parameter) = VALUE crmt_name_value_pair( name = 'INTERNAL_ID' value = po_id ).
APPEND ls_query_parameter TO lt_query_parameter.
ENDIF.
IF maxhit EQ space.
maxhit = 100.
ENDIF.
ls_query_parameter = VALUE #( name = 'MAX_ROWS' value = maxhit ).
APPEND ls_query_parameter TO lt_query_parameter.
lo_core = cl_crm_bol_core=>get_instance( ).
lo_core->load_component_set( 'CRMSMT' ).
lo_collection = lo_core->query(
iv_query_name = lv_query_name
it_query_params = lt_query_parameter
iv_view_name = lv_view_name ).
DATA(lv_size) = lo_collection->IF_BOL_BO_COL~SIZE( ).
WRITE:/ 'Number of ' , lv_size, ' Posts has been found!'.
Here is the result for Social post search:
Total execution time of post
- search: 934 milliseconds
Overhead in Additional Layer: 218( spent on component set loading) + ( 634 – 234 – 289 ) = 329 ( 35% in total time ).
Considering that the component set load will only be performed once in the application lifetime, and it would be further improved by using share memory to store model metadata, so I do not regard the time spent on component set loading as overhead.
As a result, the final overhead is 329 – 218 = 111 milliseconds, that is 12% of total time.
Post Modify
Total time in Post Modify: 55 Overhead in Additional Layer : 55 – 53 = 2 ( 3.6% )
Post Save
Total time in Save & Commit: 13 + 6 = 19 Overhead in Additional Layer : (13 – 12) + ( 6 – 3 ) = 4 ( 21.1% )
Product Search
Total execution time: 2348 milliseconds Overhead in Additional Layer : 896 – 348 = 548 ( 23.3% )
Total execution time: 58 Overhead in Additional Layer: 58 – 52 = 6 ( 10.3% )
Product Save
Total time in Save & Commit: 282 + 263 = 545 Overhead in Additional Layer : (282 – 280) + ( 263 – 41 – 97 ) = 127 ( 23.3% )
Note: 97 milliseconds spent on program SAPMSSY4 should be deducted since it contains the execution of routines registered on COMMIT, such as middleware logic, the workflow event, update function module etc. Those are nothing to do with BOL & Genil framework processing.
Sales Order search
Total execution time: 1160 milliseconds Overhead in Additional Layer : 658 – 608 = 50 ( 4.3% in total time )
Sales Order modify
Total execution time: 105 Overhead in Additional Layer : 105 – 93 = 6 ( 11.4% )
Sales Order save
Total time in Save & Commit: 6202 + 354 = 6556 Overhead in Additional Layer: (6202 – 6199) + ( 354 – 24 – 175 ) = 158 ( 2.4% )
Conclusion
The testing result about overhead percent for the three Genil Model could be found in below graph:
According to the formula, the more complex the application API is, the less performance loss caused by additional layer overhead in Web client UI. Also in reality, the performance bottleneck resides in application API, not in the call stack of BOL & GenIL delegation. So in my opinion, performance reason should NEVER be used as the excuse when you do not use Webclient UI as the first choice for custom development in CRM.
What we can benefit from BOL& GenIL
- The benefit to use Webclient UI framework in CRM custom development is apparent:
- The object oriented BOL API is simple, generic, uniform and easy to use.
- Your UI components are decoupled from any interface changes in the underlying application specific APIs, it is even not necessary for you to know the detail of underlying API at all; Your application is easier to maintain and sustainable for future development
- Development of WEBCUIF applications is made easy, since the BOL has been designed to work hand in hand with the UI parts of the framework
- The built-in buffer accelerates your applications: Once data it is read, the Object is buffered and could be retrieved in nearly no time. Way faster than calling various function modules again and afterwards preparing the data for business use. Taken these benefits into consideration, in my opinion, the gain outweighs the minor performance overhead in additional BOL & Genil layer, if we always stick to Webclient UI in CRM custom development.
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
WebClient UI是SAP CRM的一个核心组件,提供了一个基于Web的交互界面,使得用户能够访问和操作CRM系统功能,无论他们身处何地。 首先,我们要理解UI Guidelines的重要性。"UI Guidelines for CRM WebClient User ...
在SAP CRM WebUI中创建下拉列表是一个关键任务,特别是在设计用户界面以提供更高效、用户友好的交互时。本教程将引导你通过一系列步骤来实现这一目标,特别是针对SEX(性别)属性创建一个下拉框。 首先,你需要获取...
SAP CRM的基础知识通常包括对于其核心组件的理解,包括主数据(如账户、组织模型、产品等),交易处理、定价、开票、CRM中间件以及CRM WebClient UI。CRM中间件主要负责不同系统组件之间的信息交换,而CRM WebClient...
《SAP CRM基础培训教材详解》 ...总结来说,SAP CRM的基础培训涵盖了WebClient UI的演变及其丰富元素,以及CRM与ERP的集成策略。了解这些知识,有助于更好地理解和使用SAP CRM系统,提升企业的运营效率和服务质量。
Sent: Thursday, April 18, 2013 3:59 PM Subject: 为什么design time时候看到的是ICQR,点了service之后看到02QR的代码被call到 这是cross component navigation在起作用。 Result list是model在ICQR里面,如果点...
UM1001-RT-Thread-WebClient 用户手册1详细介绍了RT-Thread操作系统中的WebClient软件包,这是一个针对HTTP协议的客户端实现,主要用于设备与HTTP服务器之间的通信。该软件包由RT-Thread团队自主研发,旨在为嵌入式...
mopidy-musicbox-webclient, Mopidy音乐服务器的网络客户端和 MusicBox Mopidy-MusicBox-Webclient Mopidy是一个前端扩展和基于javascript的web客户端,特别为 Mopidy编写的。特性同样适用于桌面和移动浏览器的响应...
在SAP CRM基础培训中,WebClient UI(Web客户端用户界面)是一个重要的学习焦点,它是用户与系统交互的主要界面。下面我们将深入探讨WebClient UI的相关知识点。 WebClient UI的发展历程是从GUI(图形用户界面)...
UI Guidelines for CRM WebClient User Interface
yp-ewl-webclient YouPers eWorkLife服务的Web客户端 先决条件 安装的本地mongoDb: : 已安装的nodejs和npm: ://nodejs.org/ 安装的grunt cli:npm install -g grunt-cli 要构建此项目: git clone ...
Sent: Thursday, May 9, 2013 6:30 PM Subject: ON_NEW_FOCUS的用途 ROOT ———————————— Product ID PRODshortText ———————————— Product Description Genil Model hierarchy
使用Vue.js的AWS Chime Webclient。 版本 0.2.0(编码) 依存关系 工具 -Node.js程序包管理器。 -JavaScript模块捆绑器。 建立之前 请参阅 请参阅 请参阅。 您可以构建自定义的AWS Chime客户端。 建造 $ git ...
AirDC ++ Web客户端Docker映像 运行Docker映像。 您必须具有适当知识才能使用此映像。 运行应用程序 docker volume create --name airdcpp ...Web UI将在或。 如果要访问除5600/5601以外的任何其他端口上的We
C# sliverlight 中 WebClient与WebRequest以及HttpWebRequest 的关系
nodejs-irc-webclient 一个基于node.js和socket.io的简单IRC-Webclient。 因此,它将websockets用于node.js服务器与浏览器之间的通信。 大多数功能都实现为在客户端运行。 这样可以确保用户只有在尝试修改客户端时...
Mopidy-MusicBox-Webclient Mopidy MusicBox Webclient(MMW)是前端扩展和基于JavaScript的Web客户端,专门为编写。特征响应式设计在台式机和移动浏览器上同样有效。 浏览任何Mopidy后端扩展提供的内容。 将一...
generator-urban-webclient Yeoman生成器用于Babel和React Web Client npm run build npm run watch npm run serve npm test 工装 babel和browserify将现代JS变成浏览器喜欢的东西 react -JS构建可以很好地处理...
产品建议不仅能在标准订单等销售事务中应用,还能在CRM WebClient UI(交互中心)和Web渠道中实时呈现,帮助销售人员在与客户的互动中快速响应并提供个性化建议。 通过灵活地配置产品联想规则,企业可以设定复杂的...
WebClient是Spring 5中引入的非阻塞,反应式的Web客户端。它是在Project Reactor和Netty基础上构建的,非常适合用于创建高性能的微服务。 WebClient的主要优点是它的非阻塞和反应式的特性,这使得它在处理大量并发...
请注意,实际应用中可能需要处理错误和异常,以及考虑线程同步问题,确保UI线程安全地更新进度条。此外,如果要实现更复杂的功能,比如暂停和恢复下载,可能需要使用更高级的类如System.Net.Http.HttpClient,配合...