1

您好,我正在做一个学校项目,我有一个带有图像的页面,我正在从 MySQL 数据库中检索它,但是增加图像渲染的任何方法都很慢?

任何帮助都会很棒:)

我的代码

<asp:DataList ID="dlst" runat="server" DataKeyField="ProductID"  DataSourceID="SqlDataSource1" RepeatDirection="Horizontal" RepeatColumns="3" >
        <HeaderTemplate>

        </HeaderTemplate>

        <ItemTemplate>
            <asp:ImageButton ID="btnpopup" runat="server" ImageUrl='<%# "GetImage.aspx?id=" + Eval("ProductID") %>' Width="200px" Height="200px" CommandArgument='<%#Eval("ProductID") %>' CommandName="popup"   CausesValidation="false" BorderStyle="Dotted" BorderColor="WhiteSmoke" />


        </ItemTemplate>

        </asp:DataList>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:smokeshopConnectionString %>" 
            ProviderName="<%$ ConnectionStrings:smokeshopConnectionString.ProviderName %>" 
            SelectCommand="SELECT ProductID, Name, Description, ProductImage FROM products"></asp:SqlDataSource>

我的第二页称为 GetImage

string id = Request.QueryString["id"];

        MySqlDataReader r = db.getImage(id);

        while(r.Read())
        {
            byte[] imgData = (byte[])r["ProductImage"];
            Response.BinaryWrite(imgData);
            Response.Flush();
        }
4

1 回答 1

2
  • 将图像保存在您的 Web 服务器上,并且仅将文件名保存在数据库中。它肯定会加快速度。

  • 浏览器只维护一个有限的编号。与给定子域的连接数,并且您的所有图像都是从同一子域返回的,因此这也可能是渲染缓慢的原因。考虑通过散列图像 id 生成具有不同子域(但对于给定图像相同)的每个图像标签。这将使图像下载并行。例如,static1.yourdomain.com/image1.jpg、static2.yourdomain.com/image2.jpg

  • 由于每个子域都会增加一个 dns 查找开销,因此请务必不要添加太多子域。

  • 不要使用 height 和 width 属性调整 html 中的图像大小,而是保留已保存的 200x200(在您的情况下)图像并进行渲染。
  • 提高服务器上图像的压缩级别(取决于您可能有的图像质量要求)
于 2012-05-13T02:55:11.603 回答