2016-04-03 3 views
0

У меня есть программа генерации отчетов PHP, которая раньше работала нормально. Я использовал две сторонние библиотеки в программе: библиотека графических карт Google (возвращает изображение, если я поставляю значения в url) и tcpdf (для создания pdf). Я использую mysql не mysqli для запросов. На странице есть много запросов и циклов.TCPDF занимает 10 минут, чтобы сгенерировать 40-страничный pdf-файл

Прежде чем использовать для создания отчета менее 3 минут, я использую вызов ajax для генерации отчета, который дает заполненное сообщение после завершения создания файла. Эта программа сохраняет PDF-файл в папке, и у меня есть ссылка с тем же именем, чтобы загрузить файл.

Недавно, когда я проверил, что он не работает должным образом.

Ошибка была TCPDF неспособной получить изображение. Это произошло из-за того, что библиотека графиков google не вернула изображение должным образом. Когда я получаю доступ к графику url в браузере, он дает мне изображение без каких-либо проблем, но если я дам его в изображении src внутри php-файла, его не покажут. Поэтому я решил сохранить файл в папке с помощью таких функций, как file_get_contents, file_put_contents и связать их с изображением src. Эта часть теперь работает правильно. Я вижу изображение.

Но теперь проблема заключается в том, что для создания отчета требуется много времени, даже в локальной среде. Я попытался создать отчет без графика, но даже тогда его время. В промежутке времени было всего 25 минут, и теперь он приблизился к 10 минутам, чтобы создать 40-страничный pdf-файл.

Я действительно не знаю, почему его так много времени. Все это отлично работало до этого и теперь не работает. Единственное, что изменилось, это библиотека графических карт Google, но теперь даже без нее (прокомментировала эту часть и проверила), что также потребовало времени.

Как ускорить это? Есть ли способ проверить, какая часть программы медленная.

Пробовал xdebug, но его выходной файл более 400 мб, а webgrind не может его обработать.

Пожалуйста, помогите.

+0

С уважением, вы не дали нам много работы в этом вопросе. Пожалуйста, подумайте над редактированием, чтобы дать более подробную информацию. –

+0

Пожалуйста, проверьте сейчас. Спасибо. –

ответ

0

Отсортировано.

Проблема с базой данных, одна из таблиц содержит более 120000 записей. Удаленные нерелевантные записи, а не постоянное решение, но теперь он генерирует то же самое в течение 2.1 минут.

Теперь я не могу сделать то же самое на своем производственном сервере. Я хотел бы получить ваши данные о том, как оптимизировать базу данных.

Thank you

+0

Все еще недостаточно для работы. Пожалуйста, предоставьте 'SHOW CREATE TABLE' и' SELECT', который собирает данные. –

+1

Это, вероятно, будет разрешено с хорошо подобранными индексами MySQL. Вы можете добавлять, изменять и удалять индексы MySQL, не затрагивая данные на сервере. Прочтите этот http://use-the-index-luke.com/, а затем, если вам все еще нужна помощь, задайте другой вопрос. Как сказал Рик, вам нужно будет дать нам плохо выполняемые запросы, определения таблиц и результаты EXPLAIN. из этих запросов. –

1

Ваш следующий шаг - устранение неполадок производительности.

Является ли TCPDF большой работой, которую вам не нужно делать? Предположительно, вы видели советы от автора TCPDF по повышению производительности и применяете их на практике. http://www.tcpdf.org/performances.php

Некоторые из ваших запросов MySQL неэффективны? Получите интерактивное соединение с вашим сервером MySQL, используя phpMyAdmin или аналогичный инструмент командной строки. В то время как ваш процесс PDF-создание работает, повторно выполнить команду

SHOW FULL PROCESSLIST 

Он представляет собой INFO столбец, показывающий активный запрос MySQL для каждого соединения. Он также показывает, что каждый запрос заканчивается time в миллисекундах. Если у вас есть запросы, которые выполняются в течение многих сотен миллисекунд, вы можете использовать команду MySQL EXPLAIN для анализа этих запросов. Часто добавление соответствующего индекса в таблицу MySQL может значительно ускорить процесс.

Не работает ли ваша программа PDF на оперативной памяти? использовать монитор производительности, как * nix top или Windows perfmon, чтобы посмотреть.

Является ли ваш 40-страничный отчет, просто поставленным, огромной работой по созданию? Если это так, вы можете подумать о переходе на более быструю программу создания отчетов, чем PHP + TCPDF.

+0

Hi Ollie, Я рассмотрел все пункты, перечисленные в http://www.tcpdf.org/performances.php, до сих пор не повезло. Часть MySQL Я должен попробовать ваши предложения, но эти запросы были там и раньше. Спасибо –