Asp.net 预取策略?
Asp.net prefetch strategy?
在 /pages/dashboard/default.aspx 的 header 中,我包含了以下内容:
<link rel="prefetch" href="/pages/agent/statistics/">
<link rel="prefetch" href="/pages/agent/statistics/transactions/">
<link rel="prefetch" href="/pages/agent/consumer/">
<link rel="prefetch" href="/pages/agent/account/">
<link rel="prefetch" href="/pages/feedback/">
<link rel="prefetch" href="/pages/contact/">
<link rel="prefetch" href="/pages/agent/cancel-order/">
<link rel="prefetch" href="/pages/agent/resources/">
<link rel="prefetch" href="/pages/user/preferences/">
<link rel="prefetch" href="/pages/agent/profile/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/log/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/error-log/">
<link rel="prefetch" href="/pages/user/download-data/?data-type=Transactions">
<link rel="prefetch" href="/pages/help/">
<link rel="prefetch" href="/pages/agent/resources/">
<link rel="prefetch" href="/pages/about/">
这样做意味着新用户离开主页 (/pages/dashboard/default.aspx) 的速度要快得多。所有这些链接都指向每个文件夹的 default.aspx 页面。
但是在测试时,我会在主页上等待一分钟,以确保所有预取页面都有时间加载。
我正在考虑将所有这些预取链接移动到所有这些页面都使用的 ASP.NET 母版页。所以如果一个新用户只在首页停留几秒钟,后续页面可以继续加载预取页面。
这是更好的策略吗?或者它会不会对服务器征税太多,反复请求 aspx 页面,我假设这些页面没有被缓存,尽管它们的 png/jpeg、css 和 JavaScript 资源是?
通过预取所有这些页面,您通过加载用户可能不会访问的页面来增加服务器流量。这是否可行是您需要做出的开发决策,它是具有更高站点响应能力和需要更多服务器能力之间的权衡。如果您希望每个用户对服务器利用率产生成倍的影响,这取决于您。
每个预取执行它自己的 http 请求,这将需要服务器处理每个请求和 运行 您的 aspx 页面。将预取移动到您的母版页除了限制代码重复之外没有任何作用,因为每个页面仍然必须由服务器处理,就像用户直接访问该页面一样。
如果您仍然决定预取所有内容,我建议您将预取链接放在母版页中,因为您只需将它们放在一个文件中。
编辑:
另一个主要缺点是,根据预取页面的范围,如果这些页面上有动态数据,用户可能会看到过时的数据,因为您的浏览器会显示预取的版本。浏览器中可能有机制来防止这种情况,但这是我要研究的。
在 /pages/dashboard/default.aspx 的 header 中,我包含了以下内容:
<link rel="prefetch" href="/pages/agent/statistics/">
<link rel="prefetch" href="/pages/agent/statistics/transactions/">
<link rel="prefetch" href="/pages/agent/consumer/">
<link rel="prefetch" href="/pages/agent/account/">
<link rel="prefetch" href="/pages/feedback/">
<link rel="prefetch" href="/pages/contact/">
<link rel="prefetch" href="/pages/agent/cancel-order/">
<link rel="prefetch" href="/pages/agent/resources/">
<link rel="prefetch" href="/pages/user/preferences/">
<link rel="prefetch" href="/pages/agent/profile/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/log/">
<link rel="prefetch" href="/pages/agent/statistics/webservices/error-log/">
<link rel="prefetch" href="/pages/user/download-data/?data-type=Transactions">
<link rel="prefetch" href="/pages/help/">
<link rel="prefetch" href="/pages/agent/resources/">
<link rel="prefetch" href="/pages/about/">
这样做意味着新用户离开主页 (/pages/dashboard/default.aspx) 的速度要快得多。所有这些链接都指向每个文件夹的 default.aspx 页面。
但是在测试时,我会在主页上等待一分钟,以确保所有预取页面都有时间加载。
我正在考虑将所有这些预取链接移动到所有这些页面都使用的 ASP.NET 母版页。所以如果一个新用户只在首页停留几秒钟,后续页面可以继续加载预取页面。
这是更好的策略吗?或者它会不会对服务器征税太多,反复请求 aspx 页面,我假设这些页面没有被缓存,尽管它们的 png/jpeg、css 和 JavaScript 资源是?
通过预取所有这些页面,您通过加载用户可能不会访问的页面来增加服务器流量。这是否可行是您需要做出的开发决策,它是具有更高站点响应能力和需要更多服务器能力之间的权衡。如果您希望每个用户对服务器利用率产生成倍的影响,这取决于您。
每个预取执行它自己的 http 请求,这将需要服务器处理每个请求和 运行 您的 aspx 页面。将预取移动到您的母版页除了限制代码重复之外没有任何作用,因为每个页面仍然必须由服务器处理,就像用户直接访问该页面一样。
如果您仍然决定预取所有内容,我建议您将预取链接放在母版页中,因为您只需将它们放在一个文件中。
编辑:
另一个主要缺点是,根据预取页面的范围,如果这些页面上有动态数据,用户可能会看到过时的数据,因为您的浏览器会显示预取的版本。浏览器中可能有机制来防止这种情况,但这是我要研究的。