Скорее всего, окно браузера зависает из-за потребления ресурсов браузером при отображении большой таблицы; и не имеет никакого отношения к вашему внутреннему коду Perl CGI.
Самый простой способ подтвердить это - добавить оператор печати журнала (например, print в STDERR) в самый конец скрипта CGI и распечатать метку времени; затем вы запускаете скрипт и просматриваете журналы вашего веб-сервера, чтобы увидеть, когда скрипт завершится. Почти наверняка вы обнаружите, что все закончилось очень быстро.
Еще один (хотя и менее надежный) показатель того, что узким местом является браузер, отслеживает израсходованную память и ЦП в вашей любимой программе управления процессами в вашей ОС (TaskManager / ProcessExplorer / ps / top)
Теперь, что касается проблем с отображением браузера, Вриккен дал несколько хороших предложений. Если вы можете избежать сложной обработки событий (включая jQuery) на очень больших таблицах, это хорошая идея; по возможности используйте классы вместо идентификаторов.
Некоторые другие будут:
Использовать предопределенную ширину в пикселях для всех столбцов (и в идеале все строки для сделки). Браузеры работают намного быстрее при рендеринге таблицы, когда им не нужно вычислять это на лету для каждой строки.
Рассмотрите возможность переключения на таблицу на основе DIV вместо TABLE. Честно говоря, я не знаю, поможет ли это в скорости или нет - это будет хороший вопрос SO или лучше, попробуйте и сравните. Это может быть не философски чистое решение для представления табличных данных.
Как сказал Вриккен, пагинат. Ни один пользователь не может эффективно обработать таблицу из 3000 строк, даже если она печатает ослепительно быстро, поэтому на самом деле рисовать ее довольно бесполезно, если только она не может быть отфильтрована / спрятана под реальными электронными таблицами.
Есть небольшая другая возможность - часть задержки, ЕСЛИ таблица очень большая, насколько чистый объем HTML-текста, который производится; и ЕСЛИ подключение к сети не быстрое - возможно, из-за необходимости загружать это.
Если это так, то ОЧЕНЬ легко проверить: заключите всю таблицу в тег комментария (<!-- <TABLE> ... </TABLE> -->
, если в вашей таблице нет тегов комментариев). Напечатайте небольшой текст вместо этого. после закрытия тега комментария.
Затем перезапустите страницу.
Если небольшой текст отображается в вашем браузере очень быстро, это означает, что загрузка таблицы НЕ была виновником (а также еще одним подтверждением того, что CGI-скрипт не является узким местом); поскольку вы будете генерировать и загружать один и тот же файл больших таблиц, но не будете отображать реальную таблицу в браузере.
Если, с другой стороны, загрузка страницы с закомментированной таблицей до конца занимает много времени (и CGI подтвердил высокую скорость печати журналов), вам нужно поработать над уменьшением размера страницы - там Есть много способов сделать это, но они слишком велики, чтобы уместиться на полях этого ответа.