From 32d7a4d33afade50d47953c84ca92d01b1c30b1a Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 21 Apr 2020 14:42:27 -0700 Subject: [PATCH] TablePanel: avoid toArray for memoizedData (#23744) --- packages/grafana-ui/src/components/Table/Table.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/grafana-ui/src/components/Table/Table.tsx b/packages/grafana-ui/src/components/Table/Table.tsx index ae80aa28e41..04980907f75 100644 --- a/packages/grafana-ui/src/components/Table/Table.tsx +++ b/packages/grafana-ui/src/components/Table/Table.tsx @@ -72,7 +72,18 @@ export const Table: FC = memo((props: Props) => { // React table data array. This data acts just like a dummy array to let react-table know how many rows exist // The cells use the field to look up values const memoizedData = useMemo(() => { - return data.fields.length > 0 ? data.fields[0].values.toArray() : []; + if (!data.fields.length) { + return []; + } + + // Check if an array buffer already exists + const buffer = (data.fields[0].values as any).buffer; + if (Array.isArray(buffer) && buffer.length === data.length) { + return buffer; + } + + // For arrow tables, the `toArray` implementation is expensive and akward *especially* for timestamps + return Array(data.length).fill(0); }, [data]); // React-table column definitions