Laravel - Excel отнимает много воспоминаний и времени, когда я пытался экспортировать большой файл с использованием фраг ⇐ Php
Laravel - Excel отнимает много воспоминаний и времени, когда я пытался экспортировать большой файл с использованием фраг
В контроллере
$exporter = новый ReportExport($this->validatedData, $this->id); $exporter->queue($file_name, 'галерея', \Maatwebsite\Excel\Excel::XLSX)->chain([ новый ExportEnrollmentsJobWhenDone($this->id), ]); Экспорт отчета
Класс ReportExport реализует FromQuery, WithHeadings, WithEvents, WithCustomChunkSize, MustQueue { используйте экспортируемый; защищенный $прогресс; защищенный $progressIncrement; общественный $totalRows; защищенный $validatedData; защищенный $id; публичная функция __construct($validatedData, $id) { $this->validatedData = $validatedData; $this->id = $id; $this->прогресс = 0; } заголовки публичной функции(): массив { возвращаться [ //Мои заголовки ]; } /** * @return массив */ публичная функция RegisterEvents(): массив { возвращаться [ //Мои события ]; } запрос публичной функции() { //Мои запросы $this->totalRows = $enrollments->count(); $this->progressIncrement = 100 / ceil($this->totalRows / $this->chunkSize()); return $enrollments->orderBy('id', 'desc'); } публичная функция chunkSize(): int { вернуть 5000; } } Журналы терминала:
09.07.2023 13:06:49 Maatwebsite\Excel\Jobs\QueueExport ............. РАБОТАЕТ 2023-07-09 13:06:49 Maatwebsite\Excel\Jobs\QueueExport ....... 117.01ms DONE 2023-07-09 13:06:50 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:06:56 Maatwebsite\Excel\Jobs\AppendQueryToSheet 6822,89 мс ВЫПОЛНЕНО 2023-07-09 13:06:57 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:08 Maatwebsite\Excel\Jobs\AppendQueryToSheet 10715.10ms DONE 2023-07-09 13:07:09 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:23 Maatwebsite\Excel\Jobs\AppendQueryToSheet 14 725,47 мс ВЫПОЛНЕНО 2023-07-09 13:07:24 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 18818,70 мс ВЫПОЛНЕНО 2023-07-09 13:07:44 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:08:07 Maatwebsite\Excel\Jobs\AppendQueryToSheet 22 557,33 мс ВЫПОЛНЕНО 2023-07-09 13:08:08 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:08:34 Maatwebsite\Excel\Jobs\AppendQueryToSheet 26 214,35 мс ВЫПОЛНЕНО 2023-07-09 13:08:35 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:09:05 Maatwebsite\Excel\Jobs\AppendQueryToSheet 29 926,11 мс ВЫПОЛНЕНО 2023-07-09 13:09:06 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:09:40 Maatwebsite\Excel\Jobs\AppendQueryToSheet 33737,76мс ВЫПОЛНЕНО 2023-07-09 13:09:41 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:10:18 Maatwebsite\Excel\Jobs\AppendQueryToSheet 37 834,62 мс ВЫПОЛНЕНО 2023-07-09 13:10:20 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:11:02 Maatwebsite\Excel\Jobs\AppendQueryToSheet 42 433,48 мс ВЫПОЛНЕНО 2023-07-09 13:11:03 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:11:49 Maatwebsite\Excel\Jobs\AppendQueryToSheet 45 406,48 мс ВЫПОЛНЕНО 2023-07-09 13:11:49 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:12:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 53 667,69 мс ВЫПОЛНЕНО 2023-07-09 13:12:44 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:13:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 58882,30 мс ВЫПОЛНЕНО 2023-07-09 13:13:44 Maatwebsite\Excel\Jobs\CloseSheet .............. БЕГ Symfony\Component\ErrorHandler\Error\FatalError Разрешенный объем памяти 536870912 байт исчерпан (пробовал выделить 83886080 байт) в поставщике/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php:395 391▕ } 392▕ $столбец = 0; 393▕ $row = ''; 394▕ sscanf($cellCoordinate, '%[A-Z]%d', $column, $row); ➜ 395▕ $this->index[$cellCoordinate] = (--$row * self::MAX_COLUMN_ID) + Координата::columnIndexFromString((string) $column); 396▕ 397▕ $this->currentCoordinate = $cellCoordinate; 398▕ $this->currentCell = $cell; 399▕ $this->currentCellIsDirty = true; Упс\Исключение\ErrorException Разрешенный объем памяти 536870912 байт исчерпан (пробовал выделить 83886080 байт) в поставщике/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php:395 391▕ } 392▕ $столбец = 0; 393▕ $row = ''; 394▕ sscanf($cellCoordinate, '%[A-Z]%d', $column, $row); ➜ 395▕ $this->index[$cellCoordinate] = (--$row * self::MAX_COLUMN_ID) + Координата::columnIndexFromString((string) $column); 396▕ 397▕ $this->currentCoordinate = $cellCoordinate; 398▕ $this->currentCell = $cell; 399▕ $this->currentCellIsDirty = true; +1 рамка поставщика 2 [внутренний]:0 Упс\Выполнить::handleShutdown() Я пытался экспортировать данные в файл Excel, используя пакет Maatwebsite\Excel в Laravel. Когда я экспортирую большой файл, я замечаю, что каждый AppendQueryToSheet занимает больше времени, чем раньше. Однако во время процесса экспорта я столкнулся с ошибкой нехватки памяти, из-за которой сценарий преждевременно завершил работу.
В контроллере
$exporter = новый ReportExport($this->validatedData, $this->id); $exporter->queue($file_name, 'галерея', \Maatwebsite\Excel\Excel::XLSX)->chain([ новый ExportEnrollmentsJobWhenDone($this->id), ]); Экспорт отчета
Класс ReportExport реализует FromQuery, WithHeadings, WithEvents, WithCustomChunkSize, MustQueue { используйте экспортируемый; защищенный $прогресс; защищенный $progressIncrement; общественный $totalRows; защищенный $validatedData; защищенный $id; публичная функция __construct($validatedData, $id) { $this->validatedData = $validatedData; $this->id = $id; $this->прогресс = 0; } заголовки публичной функции(): массив { возвращаться [ //Мои заголовки ]; } /** * @return массив */ публичная функция RegisterEvents(): массив { возвращаться [ //Мои события ]; } запрос публичной функции() { //Мои запросы $this->totalRows = $enrollments->count(); $this->progressIncrement = 100 / ceil($this->totalRows / $this->chunkSize()); return $enrollments->orderBy('id', 'desc'); } публичная функция chunkSize(): int { вернуть 5000; } } Журналы терминала:
09.07.2023 13:06:49 Maatwebsite\Excel\Jobs\QueueExport ............. РАБОТАЕТ 2023-07-09 13:06:49 Maatwebsite\Excel\Jobs\QueueExport ....... 117.01ms DONE 2023-07-09 13:06:50 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:06:56 Maatwebsite\Excel\Jobs\AppendQueryToSheet 6822,89 мс ВЫПОЛНЕНО 2023-07-09 13:06:57 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:08 Maatwebsite\Excel\Jobs\AppendQueryToSheet 10715.10ms DONE 2023-07-09 13:07:09 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:23 Maatwebsite\Excel\Jobs\AppendQueryToSheet 14 725,47 мс ВЫПОЛНЕНО 2023-07-09 13:07:24 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:07:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 18818,70 мс ВЫПОЛНЕНО 2023-07-09 13:07:44 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:08:07 Maatwebsite\Excel\Jobs\AppendQueryToSheet 22 557,33 мс ВЫПОЛНЕНО 2023-07-09 13:08:08 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:08:34 Maatwebsite\Excel\Jobs\AppendQueryToSheet 26 214,35 мс ВЫПОЛНЕНО 2023-07-09 13:08:35 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:09:05 Maatwebsite\Excel\Jobs\AppendQueryToSheet 29 926,11 мс ВЫПОЛНЕНО 2023-07-09 13:09:06 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:09:40 Maatwebsite\Excel\Jobs\AppendQueryToSheet 33737,76мс ВЫПОЛНЕНО 2023-07-09 13:09:41 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:10:18 Maatwebsite\Excel\Jobs\AppendQueryToSheet 37 834,62 мс ВЫПОЛНЕНО 2023-07-09 13:10:20 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:11:02 Maatwebsite\Excel\Jobs\AppendQueryToSheet 42 433,48 мс ВЫПОЛНЕНО 2023-07-09 13:11:03 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:11:49 Maatwebsite\Excel\Jobs\AppendQueryToSheet 45 406,48 мс ВЫПОЛНЕНО 2023-07-09 13:11:49 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:12:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 53 667,69 мс ВЫПОЛНЕНО 2023-07-09 13:12:44 Maatwebsite\Excel\Jobs\AppendQueryToSheet ...... РАБОТАЕТ 2023-07-09 13:13:43 Maatwebsite\Excel\Jobs\AppendQueryToSheet 58882,30 мс ВЫПОЛНЕНО 2023-07-09 13:13:44 Maatwebsite\Excel\Jobs\CloseSheet .............. БЕГ Symfony\Component\ErrorHandler\Error\FatalError Разрешенный объем памяти 536870912 байт исчерпан (пробовал выделить 83886080 байт) в поставщике/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php:395 391▕ } 392▕ $столбец = 0; 393▕ $row = ''; 394▕ sscanf($cellCoordinate, '%[A-Z]%d', $column, $row); ➜ 395▕ $this->index[$cellCoordinate] = (--$row * self::MAX_COLUMN_ID) + Координата::columnIndexFromString((string) $column); 396▕ 397▕ $this->currentCoordinate = $cellCoordinate; 398▕ $this->currentCell = $cell; 399▕ $this->currentCellIsDirty = true; Упс\Исключение\ErrorException Разрешенный объем памяти 536870912 байт исчерпан (пробовал выделить 83886080 байт) в поставщике/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php:395 391▕ } 392▕ $столбец = 0; 393▕ $row = ''; 394▕ sscanf($cellCoordinate, '%[A-Z]%d', $column, $row); ➜ 395▕ $this->index[$cellCoordinate] = (--$row * self::MAX_COLUMN_ID) + Координата::columnIndexFromString((string) $column); 396▕ 397▕ $this->currentCoordinate = $cellCoordinate; 398▕ $this->currentCell = $cell; 399▕ $this->currentCellIsDirty = true; +1 рамка поставщика 2 [внутренний]:0 Упс\Выполнить::handleShutdown() Я пытался экспортировать данные в файл Excel, используя пакет Maatwebsite\Excel в Laravel. Когда я экспортирую большой файл, я замечаю, что каждый AppendQueryToSheet занимает больше времени, чем раньше. Однако во время процесса экспорта я столкнулся с ошибкой нехватки памяти, из-за которой сценарий преждевременно завершил работу.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение