Самый эффективный способ загрузить большой буфер в элемент HTML

0

Я создал настраиваемый элемент управления просмотром отчетов, который использовал вывод запроса визуализации 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 секунд?

благодаря

Теги:
asp.net-mvc
reporting-services

1 ответ

0

Я нашел одно решение, но оно использует 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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню