From add83f5b944c8de73848fd05f604ca5a65386119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Hud=C3=A1k?= Date: Sun, 21 Feb 2021 11:29:01 +0100 Subject: [PATCH] Repo overview performance improvements (#4541) * Repo overview performance improvements * Rework map_repo_list_to_overview * Reduce usages of get_key * Fix inline data * Don't load package descriptions in repo overview the select is expensive * suppress titles for non-favorite repositories * lint * Update src/ui/zcl_abapgit_gui_page_repo_over.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * optimize render_repo_palette * Optimize gui_router * Update zcl_abapgit_gui_page_repo_over.clas.abap * Update zcl_abapgit_migrations.clas.abap * remove unused variable Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Lars Hvam --- src/repo/zcl_abapgit_repo.clas.abap | 3 +- src/repo/zcl_abapgit_repo_srv.clas.abap | 4 +- src/ui/zcl_abapgit_gui_chunk_lib.clas.abap | 24 ++++++---- .../zcl_abapgit_gui_page_repo_over.clas.abap | 47 +++++++++---------- src/ui/zcl_abapgit_gui_router.clas.abap | 10 ++-- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/repo/zcl_abapgit_repo.clas.abap b/src/repo/zcl_abapgit_repo.clas.abap index 991e36619..df1347544 100644 --- a/src/repo/zcl_abapgit_repo.clas.abap +++ b/src/repo/zcl_abapgit_repo.clas.abap @@ -5,6 +5,8 @@ CLASS zcl_abapgit_repo DEFINITION PUBLIC SECTION. + DATA ms_data TYPE zif_abapgit_persistence=>ty_repo READ-ONLY. + METHODS bind_listener IMPORTING !ii_listener TYPE REF TO zif_abapgit_repo_listener . @@ -144,7 +146,6 @@ CLASS zcl_abapgit_repo DEFINITION DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt . DATA mt_remote TYPE zif_abapgit_definitions=>ty_files_tt . DATA mv_request_local_refresh TYPE abap_bool . - DATA ms_data TYPE zif_abapgit_persistence=>ty_repo . DATA mv_request_remote_refresh TYPE abap_bool . DATA mt_status TYPE zif_abapgit_definitions=>ty_results_tt . DATA mi_log TYPE REF TO zif_abapgit_log . diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index 3e5f96db9..70248fb6a 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -87,7 +87,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. LOOP AT mt_list INTO lo_repo. - IF lo_repo->get_key( ) = io_repo->get_key( ). + IF lo_repo->ms_data-key = io_repo->ms_data-key. IF lo_repo = io_repo. RETURN. ENDIF. @@ -279,7 +279,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. refresh( ). ENDIF. LOOP AT mt_list ASSIGNING . - IF ->get_key( ) = iv_key. + IF ->ms_data-key = iv_key. ro_repo = . RETURN. ENDIF. diff --git a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap index 5eb94dec2..74cc768e4 100644 --- a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap @@ -721,24 +721,28 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION. METHOD render_repo_palette. - DATA li_repo_srv TYPE REF TO zif_abapgit_repo_srv. + DATA lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list. DATA lt_repo_list TYPE zif_abapgit_persistence=>ty_repos. DATA lv_repo_json TYPE string. DATA lv_size TYPE i. - FIELD-SYMBOLS LIKE LINE OF lt_repo_list. + DATA ls_repo_data LIKE LINE OF lt_repo_list. + + FIELD-SYMBOLS: + LIKE LINE OF lt_repo_list, + LIKE LINE OF lt_repo_obj_list. + + lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ). + LOOP AT lt_repo_obj_list ASSIGNING . + ls_repo_data = ->ms_data. + ls_repo_data-local_settings-display_name = ->get_name( ). + APPEND ls_repo_data TO lt_repo_list. + ENDLOOP. - li_repo_srv = zcl_abapgit_repo_srv=>get_instance( ). - lt_repo_list = zcl_abapgit_persist_factory=>get_repo( )->list( ). lv_size = lines( lt_repo_list ). + SORT lt_repo_list BY local_settings-display_name AS TEXT. CREATE OBJECT ri_html TYPE zcl_abapgit_html. - " Sort list by display name - LOOP AT lt_repo_list ASSIGNING . - -local_settings-display_name = li_repo_srv->get( -key )->get_name( ). - ENDLOOP. - SORT lt_repo_list BY local_settings-display_name AS TEXT. - ri_html->add( 'var repoCatalog = [' ). " Maybe separate this into another method if needed in more places LOOP AT lt_repo_list ASSIGNING . lv_repo_json = |\{ key: "{ -key diff --git a/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap b/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap index 6ce1d3c09..db1f2c1b0 100644 --- a/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap @@ -67,8 +67,6 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION ct_overview TYPE ty_overviews, map_repo_list_to_overview - IMPORTING - it_repo_list TYPE zif_abapgit_persistence=>ty_repos RETURNING VALUE(rt_overview) TYPE ty_overviews RAISING @@ -117,7 +115,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION. METHOD apply_filter. @@ -182,31 +180,31 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. METHOD map_repo_list_to_overview. - DATA: ls_overview LIKE LINE OF rt_overview, - lo_repo_srv TYPE REF TO zcl_abapgit_repo, - lv_date TYPE d, - lv_time TYPE t. + DATA: ls_overview LIKE LINE OF rt_overview, + lv_date TYPE d, + lv_time TYPE t, + lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list. - FIELD-SYMBOLS: LIKE LINE OF it_repo_list. + FIELD-SYMBOLS LIKE LINE OF lt_repo_obj_list. + lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ). - LOOP AT it_repo_list ASSIGNING . + LOOP AT lt_repo_obj_list ASSIGNING . CLEAR: ls_overview. - lo_repo_srv = zcl_abapgit_repo_srv=>get_instance( )->get( -key ). ls_overview-favorite = zcl_abapgit_persistence_user=>get_instance( - )->is_favorite_repo( -key ). - ls_overview-type = -offline. - ls_overview-key = -key. - ls_overview-name = lo_repo_srv->get_name( ). - ls_overview-url = -url. - ls_overview-package = -package. - ls_overview-branch = -branch_name. - ls_overview-created_by = -created_by. + )->is_favorite_repo( ->ms_data-key ). + ls_overview-type = ->ms_data-offline. + ls_overview-key = ->ms_data-key. + ls_overview-name = ->get_name( ). + ls_overview-url = ->ms_data-url. + ls_overview-package = ->ms_data-package. + ls_overview-branch = ->ms_data-branch_name. + ls_overview-created_by = ->ms_data-created_by. - IF -created_at IS NOT INITIAL. - CONVERT TIME STAMP -created_at + IF ->ms_data-created_at IS NOT INITIAL. + CONVERT TIME STAMP ->ms_data-created_at TIME ZONE mv_time_zone INTO DATE lv_date TIME lv_time. @@ -214,10 +212,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. ls_overview-created_at = |{ lv_date DATE = USER } { lv_time TIME = USER }|. ENDIF. - ls_overview-deserialized_by = -deserialized_by. + ls_overview-deserialized_by = ->ms_data-deserialized_by. - IF -deserialized_at IS NOT INITIAL. - CONVERT TIME STAMP -deserialized_at + IF ->ms_data-deserialized_at IS NOT INITIAL. + CONVERT TIME STAMP ->ms_data-deserialized_at TIME ZONE mv_time_zone INTO DATE lv_date TIME lv_time. @@ -433,7 +431,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. ENDMETHOD. - METHOD render_table_header. CLEAR mt_col_spec. @@ -574,7 +571,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. METHOD zif_abapgit_gui_renderable~render. - mt_overview = map_repo_list_to_overview( zcl_abapgit_persist_factory=>get_repo( )->list( ) ). + mt_overview = map_repo_list_to_overview( ). apply_order_by( CHANGING ct_overview = mt_overview ). apply_filter( CHANGING ct_overview = mt_overview ). diff --git a/src/ui/zcl_abapgit_gui_router.clas.abap b/src/ui/zcl_abapgit_gui_router.clas.abap index 3a2ece027..7e35fa85a 100644 --- a/src/ui/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/zcl_abapgit_gui_router.clas.abap @@ -141,7 +141,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION. +CLASS zcl_abapgit_gui_router IMPLEMENTATION. METHOD abapgit_services_actions. @@ -234,21 +234,19 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION. DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key, lv_last_repo_key TYPE zif_abapgit_persistence=>ty_repo-key, - lt_repo_list TYPE zif_abapgit_persistence=>ty_repos. - + lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list. lv_key = ii_event->query( )->get( 'KEY' ). CASE ii_event->mv_action. WHEN zcl_abapgit_gui=>c_action-go_home. lv_last_repo_key = zcl_abapgit_persistence_user=>get_instance( )->get_repo_show( ). - lt_repo_list = zcl_abapgit_persist_factory=>get_repo( )->list( ). - + lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ). IF lv_last_repo_key IS NOT INITIAL. CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_repo_view EXPORTING iv_key = lv_last_repo_key. - ELSEIF lt_repo_list IS NOT INITIAL. + ELSEIF lt_repo_obj_list IS NOT INITIAL. CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_main. ELSE. rs_handled-page = zcl_abapgit_gui_page_tutorial=>create( ).