Skip to content

Commit

Permalink
[ML] Data Visualizer: Optimize initial load bundles. (elastic#199029)
Browse files Browse the repository at this point in the history
## Summary

Part of elastic#194171.

The `dataVisualizer` plugin loads quite some bundle chunks on the first
Kibana load. On `main` it currently looks like this on page load:

![CleanShot 2024-11-05 at 17 51
35@2x](https://github.com/user-attachments/assets/7b2fcc7e-08fb-48b8-a1d9-03063b555e38)

This PR refactors how embeddables and UI actions get initialized to
avoid loading any additional async bundles on page load.

![CleanShot 2024-11-06 at 10 51
36@2x](https://github.com/user-attachments/assets/019c3c79-49b5-4e63-9b94-3d7b02963a9b)

### Checklist

- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [x] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)
  • Loading branch information
walterra authored Nov 11, 2024
1 parent d27f241 commit aa4f430
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 15 deletions.
2 changes: 1 addition & 1 deletion packages/kbn-optimizer/limits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ pageLoadAssetSize:
dataViewFieldEditor: 42021
dataViewManagement: 5300
dataViews: 65000
dataVisualizer: 27530
dataVisualizer: 30000
devTools: 38637
discover: 99999
discoverEnhanced: 42730
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,22 @@
* 2.0.
*/

import React from 'react';

import { i18n } from '@kbn/i18n';
import type { PresentationContainer } from '@kbn/presentation-containers';
import { tracksOverlays } from '@kbn/presentation-containers';
import type { EmbeddableApiContext } from '@kbn/presentation-publishing';
import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public';
import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public';
import type { CoreStart } from '@kbn/core-lifecycle-browser';
import { toMountPoint } from '@kbn/react-kibana-mount';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import React from 'react';
import { isDefined } from '@kbn/ml-is-defined';
import { COMMON_VISUALIZATION_GROUPING } from '@kbn/visualizations-plugin/public';
import { ENABLE_ESQL } from '@kbn/esql-utils';
import { FIELD_STATS_EMBEDDABLE_TYPE } from '../embeddables/field_stats/constants';

import type { DataVisualizerStartDependencies } from '../../common/types/data_visualizer_plugin';
import type {
FieldStatisticsTableEmbeddableApi,
FieldStatsControlsApi,
} from '../embeddables/field_stats/types';
import { FieldStatsInitializerViewType } from '../embeddables/grid_embeddable/types';
import type { FieldStatsInitialState } from '../embeddables/grid_embeddable/types';
import { getOrCreateDataViewByIndexPattern } from '../search_strategy/requests/get_data_view_by_index_pattern';
import { FieldStatisticsInitializer } from '../embeddables/field_stats/field_stats_initializer';

const parentApiIsCompatible = async (
parentApi: unknown
Expand Down Expand Up @@ -57,6 +50,21 @@ async function updatePanelFromFlyoutEdits({
initialState: FieldStatsInitialState;
fieldStatsControlsApi?: FieldStatsControlsApi;
}) {
const [
{ getOrCreateDataViewByIndexPattern },
{ FieldStatisticsInitializer },
{ tracksOverlays },
{ toMountPoint },
{ KibanaContextProvider },
{ isDefined },
] = await Promise.all([
import('../search_strategy/requests/get_data_view_by_index_pattern'),
import('../embeddables/field_stats/field_stats_initializer'),
import('@kbn/presentation-containers'),
import('@kbn/react-kibana-mount'),
import('@kbn/kibana-react-plugin/public'),
import('@kbn/ml-is-defined'),
]);
const parentApi = api.parentApi;
const overlayTracker = tracksOverlays(parentApi) ? parentApi : undefined;
const services = {
Expand Down Expand Up @@ -148,6 +156,16 @@ export function createAddFieldStatsTableAction(
);
},
async execute(context) {
const [
{ IncompatibleActionError },
{ FIELD_STATS_EMBEDDABLE_TYPE },
{ FieldStatsInitializerViewType },
] = await Promise.all([
import('@kbn/ui-actions-plugin/public'),
import('../embeddables/field_stats/constants'),
import('../embeddables/grid_embeddable/types'),
]);

const presentationContainerParent = await parentApiIsCompatible(context.embeddable);
if (!presentationContainerParent) throw new IncompatibleActionError();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@
import type { CoreStart } from '@kbn/core-lifecycle-browser';
import type { UiActionsSetup } from '@kbn/ui-actions-plugin/public';
import type { DataVisualizerStartDependencies } from '../../common/types/data_visualizer_plugin';
import { createAddFieldStatsTableAction } from './create_field_stats_table';

export function registerDataVisualizerUiActions(
uiActions: UiActionsSetup,
coreStart: CoreStart,
pluginStart: DataVisualizerStartDependencies
) {
import('./create_field_stats_table').then(({ createAddFieldStatsTableAction }) => {
const addFieldStatsAction = createAddFieldStatsTableAction(coreStart, pluginStart);
uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addFieldStatsAction);
});
const addFieldStatsAction = createAddFieldStatsTableAction(coreStart, pluginStart);
uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addFieldStatsAction);
}

0 comments on commit aa4f430

Please sign in to comment.