Как я могу избежать повторной обработки входных данных, которые уже были обработаны в моем Perl-скрипте?

#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 вместе с остальными.