#perl #performance
#perl #Производительность
Вопрос:
У меня есть огромный Perl-скрипт (более 1500 строк), выполнение которого занимает около 8 часов.
Он генерирует SQL из HTML, который затем импортируется на веб-сайт. По сути, это перепроектирование целого форума в новый (у меня есть разрешение).
Скрипт запускается с самого начала каждый раз при разборе HTML, который не менялся годами, затем он сохраняется в памяти в виде массивов хэшей, пока не будет проанализирован весь HTML, генерируется SQL.
Я бы хотел, чтобы он предварительно загрузил результат с прошлого раза в память, а затем обработал только изменения, но как это можно сделать?
Ответ №1:
Ну, вы можете использовать YAML, JSON, Data::Dumper или даже Storable для сброса / восстановления структур данных perl произвольной сложности.
(Ну, Storable — это двоичный формат, нечитаемый человеком и с ограниченными возможностями совместимости, но иногда это хорошо).
Вы также можете использовать perl -d:DProf ./myscript.pl ; dprofpp
для выявления реальных слабых мест. (Не делайте этого с 8-часовой версией — dprofpp
тогда это будет длиться вечно).
Комментарии:
1. YAML и JSON :: XS не являются частью установки по умолчанию, поэтому для меня это не лучший выбор, поскольку скрипт должен быть легко переносимым.
Ответ №2:
Ответ №3:
Многое зависит от того, как именно вы это делаете. Однако, если вы работаете с детализацией HTML-файла, то простым способом было бы сохранить таблицу файлов и время их последней обработки. Затем, когда вы просматриваете файлы, проверьте, не было ли время последней обработки раньше времени модификации файла перед обработкой данного файла.
Таблицу можно сохранить различными способами: смотрите, например, DB_File.
Комментарии:
1. Полезно, я думаю, что я сохраню путь к файлу и временную метку в другом массиве хэшей, а не с помощью DB_File. Затем я могу перенести это на диск, используя Storable вместе с остальными.