0

这是我的模型:

public class Pitchermodels
{
InsideEdEntities ieEntity = new InsideEdEntities();
PitcherProfileEntities ppEntity = new PitcherProfileEntities();

Pitcher5model p5Mod = new Pitcher5model();
Pitcher6model p6Mod = new Pitcher6model();

public Pitcher5model pitcher5(long? _pid)
    {
        if (p5Mod.exist(_pid) == true)
        {
            p5Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p5Mod.ListP5T1 = ppEntity.ppsproc_newP5_T1(_pid).ToList();
            p5Mod.ListP5T2 = ppEntity.ppsproc_P5_T2(_pid).ToList();
            return p5Mod;
        }
        else
        {
            return null;
        }
    }

 public Pitcher6model pitcher6(long? _pid)
    {
        if (p6Mod.exist(_pid) == true)
        {
            p6Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p6Mod.ListP6T1 = ppEntity.ppsproc_P6(_pid).ToList();
            return p6Mod;
        }
        else
        {
            return null;
        }
    }
}

这是我的控制器:

public ActionResult AllPitchers(long? _pid)
    {
        Pitchermodels pMods = new Pitchermodels();
        return View(pMods);
    }

这是我的观点:

@model MVCdodgersplayerinfohub.Models.Pitchermodels
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>All Pitcher Reports</title>
<link href="~/LA.ico" rel="shortcut icon" type="image/x-icon" />

</head>
<body>
    <div>
        @Html.Partial("Pitcher5",Model.pitcher5(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
    <p style="page-break-before:always;"></p>
    <div>
        @Html.Partial("Pitcher6",Model.pitcher6(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
</body>
</html>

不太好的一件事是加载可能需要 2 分钟以上,并且在用户看来它甚至可能无法加载(鼠标只是旋转)。是否可以放入进度条?我认为大多数用户都喜欢进度条,因为至少他们知道它正在工作,以及需要多长时间。

4

2 回答 2

2

关于浏览器的工作原理,您需要了解以下几点:

  • 如果您正在打开页面,则在关闭连接之前不会显示任何内容。浏览器稍后会解析图像和其他内容,因此它们会在初始页面打开后打开
  • 除非您知道所接收数据的大小,否则无法确定页面打开的当前状态。为此,页面必须开始发送数据,并且您需要确切知道数据有多大。例如,一个文件有一个固定的数据大小,因此您可以使用 Javascript 为其附加进度条。当浏览器仍在等待响应时,所有数据都在服务器上处理。
  • 您将需要在前端(html 端)进行某种跟踪。这意味着您至少需要打开某种基本的页面外壳来跟踪交易。这可以通过使用 AJAX 加载网站的某些部分并粗略估计打开所需的时间量来完成(并将其应用于与时间相关的进度条)。将进度条分解为已加载的段(即已加载 1/4 段,进度条为 1/4)将在此设置中起作用。

我在这里看到的真正问题是您正在寻找一个快速的解决方案,而不是试图射杀房间里的大象。2 分钟对于网站来说是一个非常长的加载时间,这意味着您的控制器中正在发生的事情占据了这段时间。在当今的互联网上,发送 HTML 所需的时间非常快,所以这不是问题的根源。您可以按照以下几个步骤来帮助查找问题:

  • 查看您的数据库调用。您是否多次调用数据库以获得您可能已经拥有的数据?
  • 您正在加载的数据是否非常大。您是在加载整个表格,而不仅仅是您需要的列吗?您要加入非常大的桌子吗?
  • 如果这依赖于一个文件来加载数据,是否还有其他东西在使用该文件并且程序正在等待访问?
  • 看看你的收藏。您是否再次进行排序,重新排序和排序?您是否在不同的集合类型之间进行转换(即 LinkedList 到 Array 到 List 到其他东西)?如果您尝试通过 C# 对大型集合进行排序,您是否可以在其他地方对它们进行排序,例如在数据库查询中?
  • 你的页面在什么情况下会变慢?尽管数据量相同,是否有页面打开得更快?如果是这样,瓶颈可能发生在一个非常具体的地方。
  • 您是否在慢速服务器上运行它,即。在家?这会对性能产生巨大影响。

这些才一点点。2 分钟太长了,随着您进一步开发网站,它会变得更糟。对于处理简单数据收集的简单网站,即使在忙碌的一天,你也不可能在没有一些潜在问题的情况下达到 2 分钟。如果您的网站被大量使用并且您的代码很慢,请查看最常见的代码段并尝试先优化它们;然后继续优化其他较少使用的代码段。

如果您仍然在性能方面遇到很多问题,在优化了绝大多数网站后,请考虑使用带有部分视图的 AJAX。虽然它们不会提高您的总体性能,但它可以让您分段打开网站,提供更多视觉反馈,告诉用户页面仍在加载。

于 2013-09-27T06:12:46.823 回答
0

是的。您可以使用等待弹出窗口来显示组件中的加载时间。例如。如果您使用等待弹出组件,请在.ajaxStart()事件中调用弹出并在AjaxComplete事件中关闭等待弹出。

请检查以下 ajax 事件以供进一步参考。

http://api.jquery.com/category/ajax/global-ajax-event-handlers/

于 2013-09-27T06:16:49.667 回答