我正在开发一个社交网站。

从项目的第一天起,我就一直在考虑可扩展性,我已尽我所能对网站和查询进行了微调。

然而;某些页面的数据量很大,我不太确定它们的加载速度是否尽可能快,因此我正在考虑实施分布式缓存解决方案。

但不太确定我应该缓存什么而不是缓存什么。或者当前页面加载时间 1 秒是好是坏。

最繁重的查询是获取会员信息,此查询获取所有会员的信息以及与他们相关的任何内容,例如在本网站的情况下,他们的目标、博客类型条目、鼓励、照片、状态更新(如 Twitter)、博客信息(用于交叉发布他们的条目) )等等等等。

无论如何,我应该缓存这些信息吗?您认为 1 秒的页面加载时间相当快吗?有些页面不到一秒,在 4-6 十分之一秒之间。

有帮助吗?

解决方案

如果可能的话,我会在应用程序的每一层实现缓存。

您可以在最高级别缓存页面,在代码级别缓存对象,并确保数据库在最低级别正确缓存查询和关键数据。

就您需要缓存的内容而言,应该缓存任何将被重复访问的对象,尤其是那些不太可能经常更改的对象。然后,只有在编辑对象的缓存时才能重置该对象的缓存。 (要小心缓存对象,这些对象经常更新为几乎每次加载时更换缓存的恒定周期都会降低性能而不是增强性能)

为了测量性能,我不会考虑加载单个页面需要多长时间,而是谷歌一些性能测量工具,因为您确实需要测试每个页面在压力下的执行速度。例如,如果很少访问您的用户信息页面可能不是最大的缓存目标。你应该专注于使用最频繁的页面。

其他提示

典型的答案是:

  • 很少更新的缓存信息。
  • 不要缓存经常更改的内容。

在您的情况下,您可以将所有内容缓存在平面文件中(例如每个用户一个文件),并在相应的内容更新时销毁用户缓存文件。如果缓存文件不存在,请在显示关联内容之前创建它。

现在关于加载时间(根据用户位置的不同,加载时间可能会有很大差异),以下是来自游戏网站 PHP 论坛的一些信息丰富的数字:

  • JS 加载时间:0.274
  • 查询数:15
  • PHP 加载时间:0.0524
  • 内存使用情况:1.013MB

这被社区认为是一次很好的体验。但这是非常主观的。

已经询问了页面加载问题:

动态,个性化的网络应用程序的响应时间是什么?

就缓存而言,您必须衡量每次加载数据所花费的时间与从缓存加载所花费的时间。缓存越大,效果越差。因此,您不希望将太多数据加载到缓存中。我们在这里使用的是滚动缓存,一旦达到缓存大小限制,最近最少使用的数据就会被删除。然后根据实际性能结果调整限制。

对于用户个人资料特定数据,请尽可能多地存储在FormsAuth故障单/ Cookie中。缓存(HttpContext.Current.Cache)用户特定项目将在您的服务器上为每个用户提供X资源,与会话相同(但不会让人头疼)。如果您可以尽可能多地卸载到用户Ticket或cookie(就像4K),那么在扩展时您将真正帮助您的服务器性能。

您应该只检索页面所需的信息。例如,如果您要加载博客数据,则不要加载照片。更多的工作,是的,但如果你想扩展,你将不得不分析每个页面的需求。

确保您了解数据库查询缓存(执行计划重用),对象缓存(Httpcontext.Cache)和页面缓存(Response.Headers [Expires])之间存在差异。

网页设计大师 Vincent Flanders 表示超过4秒的任何内容都太长,无法加载网页。我认为这是一个非常好的经验法则。

就缓存或其他性能优化而言,我建议您执行一些性能测试。市场上有许多性能测试工具包。测试将显示问题区域的位置。将缓存逻辑添加到已经表现良好的事物中是没有意义的。另一方面,性能问题可能发生在您可能不期望它们的地方,涉及您可能没有考虑过缓存的数据。

我在性能测试中发现的一点是,它可以在代码中找到发生死锁的位置,或者简单的数据库优化有用的地方。也许向表中添加索引会加快页面速度,而不是添加一堆缓存逻辑。

我会保持简单,只在你需要的地方重构性能。

另外,要经常测试并经常测试。我知道很多人都会说最后考虑性能,但是如果你不至少在开发生命周期的早期开始考虑它,你就可以把自己编码到一个角落。

一些研究表明,交互式应用程序必须在250毫秒内提供反馈,以免让用户认为它被卡住或操作失败。 Web上的接受程度稍高,并且通常由webbrowser提供反馈,即新页面正在加载。使用AJAX,您必须注意提供som类型的反馈,因为浏览器不会显示正在发生的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top