Пусть пользователь знает, что страница загружается - PullRequest
0 голосов
/ 18 ноября 2011

У меня проблема со страницей, которая у меня есть. Страница используется для отображения статистики производительности. Он имеет gridview и использует источник данных сервера MySql. При загрузке страницы запрос на заполнение страницы занимает от 30 с до 2 мин. При этом пользователи видят белую пустую страницу. Есть ли способ загрузить мастер-страницу и показать пользователю, что страница загружается?

Вот код страницы:

<%@ Page Title="BSC1" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="BSC1_all.aspx.cs" Inherits="Estat.BSC1.BSC1_all" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <h2>BSC1 Allar Cellur</h2>
        <h2 align="center">
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></h2><br />
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
    AutoGenerateColumns="False" DataKeyNames="cell" DataSourceID="gull_bsc1" 
    HorizontalAlign="Center" CellPadding="3">
    <AlternatingRowStyle BackColor="#EEEEEE" />
    <Columns>
        <asp:TemplateField HeaderText="Cella" SortExpression="cell" FooterText="Cella">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("cell") %>'>  </asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink1" runat="server" 
                    NavigateUrl='<%# Eval("cell","http://intra/OneCellBSC1/OneCellBSC1.aspx?cell={0}") %>'
                    Target="_blank"><%# Eval("cell") %></asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ph_traffic" HeaderText="PH Traffic" 
            SortExpression="ph_traffic" FooterText="PH Traffic" />
        <asp:BoundField DataField="ph_fravisun" HeaderText="PH Frávísanir" 
            SortExpression="ph_fravisun" FooterText="PH Frávísanir" />
        <asp:BoundField DataField="ph_slit" HeaderText="PH Slit" 
            SortExpression="ph_slit" FooterText="PH Slit" />
        <asp:BoundField DataField="avg_traffic" HeaderText="Meðaltals Traffic" 
            SortExpression="avg_traffic" FooterText="Meðaltals Traffic" />
        <asp:BoundField DataField="sum_fravisun" HeaderText="Samtals Frávísanir" 
            SortExpression="sum_fravisun" FooterText="Samtals Frávísanir" />
        <asp:BoundField DataField="sum_slit" HeaderText="Samtals Slit" 
            SortExpression="sum_slit" FooterText="Samtals Slit" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="gull_bsc1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:gull_agg_bsc1 %>" 
    ProviderName="<%$ ConnectionStrings:gull_agg_bsc1.ProviderName %>" 

    SelectCommand="SELECT cell, ph_traffic, ph_fravisun, ph_slit, avg_traffic, sum_fravisun, sum_slit FROM bsc1_aggregete_cell_to_day WHERE timi_tolfraedi LIKE DATE_SUB(CURDATE(),INTERVAL 1 DAY)" 
    CacheDuration="86400" EnableCaching="True">
</asp:SqlDataSource>

1 Ответ

2 голосов
/ 18 ноября 2011

Я рекомендую использовать AJAX для загрузки отчета асинхронно .Таким образом, ваша страница загружается быстро, и пользователь может взаимодействовать с ней, тогда отчет загружается без блокировки пользователя.

Однако у меня есть объяснение, почему вы ничего не видите в вашем случае.AMAIK, когда пользователь заходит на вашу страницу, его / ее браузер отправляет HTTP-запрос на вашу страницу, что означает, что ваш сервер в ответ отправляет HTML-документ (в данном случае) или любой другой тип интернет-медиа (MIME-тип), напримерфайл для загрузки, файл CSS, изображение и т. д.

Браузер начинает загрузку ответа сервера.Тем не менее, большинство браузеров не будут отображать документ, пока он не будет завершен (я не знаю, сколько потоковой передачи, в которой браузеры получают кусок данных и показывают его обратно, затем другой блок, и показывают его обратно, и т.д.on).

Это означает, что, пока ваша сетка загружает данные из базы данных, отправленные обратно пользователю данные HTML не завершены, поэтому браузер не может их отобразить, поэтому пользователь видит пустую страницу.

Также вы должны заметить, что все материалы, загруженные в HTTP-запросе, загружаются синхронно , то есть они блокируют доступ пользователя к веб-странице во время загрузки.Например, если у вас есть веб-страница с 10 большими изображениями, вы обычно не можете взаимодействовать со страницей, в то время как эти изображения загружаются.

То, что вы пытаетесь сделать, является необходимостью в концепции под названием панель инструментов , в которой собрано множество отчетов из миллионов (или миллиардов) записей базы данных.Информационные панели занимают много времени для получения данных.Поэтому обычной практикой для отображения панелей мониторинга является отправка пользователю простой страницы, которая содержит много заполнителей, с последующей асинхронной загрузкой содержимого этих заполнителей с использованием технологии AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...