Я создал настраиваемый элемент управления просмотром отчетов, который использовал вывод запроса визуализации ssrs. У меня возникают трудности с совпадением скорости управления ssrs ReportViewer. Отчет составляет 2,5 мб.
Я наблюдаю за запросом и ответами по проводу и вижу, что он занимает примерно 2,8 секунды, чтобы получить буфер содержимого из ssrs. Однако для отображения содержимого внутри элемента html в моем текущем представлении требуется 10-15 секунд.
Проблема заключается в том, что я непосредственно вхожу в диспетчер ssrs и отчитываю отчет, который требуется столько же времени, чтобы обрабатывать отчет, но требуется всего лишь 3 секунды для визуализации в средстве просмотра отчетов ssrs.
Первоначальный дизайн заключался в том, чтобы разместить html как полезную нагрузку на ответ ajax. Тогда я подумал, что сериализация/десериализация json может быть узким местом, поэтому я добавил возможность сохранять вывод в временную папку на сервере как html и load load (html)... никаких улучшений.
Я использую приведенный ниже код для загрузки содержимого на моей странице из Ajax.BeginForm
успеха Ajax.BeginForm
:
function setReportContent(content, isUrl) {
if(isUrl)
$('#reportContent').load(content);
else
$("#reportContent").html(content);
showReportWaitIndicator(false);
$("#reportContent").show();
}
Я не могу понять, почему существует такое огромное несоответствие в времени рендеринга между средством просмотра отчетов ssrs и тем, как я загружаю.
Существует ли более эффективная техника для загрузки большого контента, отличного от .load(url);
?
Изменить: я загрузил html файл и открыл его непосредственно в браузере, и разметка была отображена мгновенно. Почему добавление содержимого в дом занимает до 20 секунд?
благодаря
Я нашел одно решение, но оно использует IFrame, и я уверен, но это соответствует скорости просмотра отчета ssrs. В двух словах загрузка IFrame не содержит некоторых накладных расходов на размещение содержимого в dom. Сделал небольшую настройку для настройки, и он работает.
function setReportContent(content, isUrl, renderInIFrame) {
if (isUrl) {
if (renderInIFrame)
$("#reportContent").html("<iframe id='reportFrame' scrolling='yes' onload='resizeReportFrame();' src='" + content + "'\></iframe>");
else
$("#reportContent").load(content);
}
else {
if (renderInIFrame) {
$("#reportContent").html("<iframe id='reportFrame' scrolling='yes' onload='resizeReportFrame();'\></iframe>");
$('#reportFrame').contents().find('html').html(content);
}
else
$("#reportContent").html(content);
}
showReportWaitIndicator(false);
$("#reportContent").show();
}