【问题标题】:Optimization: Where to process data? Database, Server or Client?优化:在哪里处理数据?数据库、服务器还是客户端?
【发布时间】:2014-09-21 04:45:37
【问题描述】:

我最近一直在思考优化问题。我正在开发一个应用程序,让我思考应该在哪里处理数据,考虑平衡服务器负载、内存、客户端、负载、速度、大小等。

我想更好地了解经验丰富的程序员在考虑处理时如何优化他们的代码。采取以下 3 个选项:

  • 在获取数据时在数据库级别进行一些处理。
  • 在 PHP 上处理数据
  • 将原始数据传递给客户端,并使用 javascript 进行处理。

你们在哪些场合更喜欢哪一种,为什么?很抱歉这个广泛的问题,如果有人能推荐我很好的阅读资源,我也将不胜感激。

【问题讨论】:

    标签: php mysql optimization


    【解决方案1】:

    数据库是任何应用程序的核心,因此您应该尽可能减轻数据库负载。这里有一些建议

    1. 仅从数据库中获取必填字段。
    2. 两个简单的查询比一个复杂的查询好。
    3. 从数据库中获取数据,使用 PHP 进行处理,然后将处理后的数据存储到临时存储中(比如缓存,例如 Memcache、Couchbase、Redis)。该数据应设置到期时间,到期时间完全取决于数据类型。缓存将在很大程度上减少您的数据库负载。
    4. 数据以标准化形式存储。但是,如果您事先知道将要请求数据并且生成此数据需要从许多表中进行连接,则可以预先将处理后的数据存储在单独的表中,并可以从该表中提供服务。
    5. 在客户端发送尽可能少的数据。较小的 HTML 大小将节省带宽,浏览器将能够快速呈现页面。
    6. 按需加载数据(使用 ajax、延迟加载等),例如,在用户单击选项卡之前,图像在页面上不可见,应在用户单击时加载此图像。

    【讨论】:

      【解决方案2】:

      两个想法:计算机应该工作,人应该思考。 (IBM 1960 年代的广告。)

      “过早的优化是编程中万恶(或至少大部分)的根源。” ——唐纳德·高德纳

      除非您是或计划成为 Google、Amazon 或 Facebook,否则您应该专注于功能。 “在你让它快速之前让它工作。”如果您打算计划增长到那个规模,就按照他们的做法:将硬件扔到问题上。它更便宜,更有可能有效。

      编辑添加:由于您控制服务器上的处理能力,但可能不在客户端上,因此通常最好将密集任务放在服务器上,特别是如果客户端可能是移动设备时。但是,请考虑网络延迟、带宽要求和响应时间。如果您可以通过在客户端上进行处理来缩短响应时间,那么请考虑这样做。因此,优化用户体验,而不是 CPU 周期;您可以在需要时购买更多 CPU 周期。

      最后,请记住客户端不能被信任。因此,有些东西必须在服务器上。

      【讨论】:

        【解决方案3】:

        因此,根据经验,尽可能多地处理数据库中的数据。新建一个查询连接的成本非常高,所以要尽量限制。即使您必须编写一些非常丑陋的 SQL,执行 JOIN 几乎总是比执行 2 个 SELECT 语句更快。

        PHP 应该只用于格式化和缓存数据。如果您在每次请求后都执行大量数据操作,那么您可能以一种不太实用的格式存储数据。您想使用 Redis 或 APCu 之类的东西缓存任何不经常更改的内容,使其处于几乎准备好服务器状态。

        最后,客户端不应该对多个对象执行数据操作。您永远不知道客户端资源的可用性,因此始终保持客户端数据精简。在后端对任何大于几十个的数据集执行分页和排序。使用 AngularJS 的 AJAX 请求通常与在 iPad 2 上对 100 多个项目执行排序一样快。

        如果您想了解有关此答案任何方面的更多详细信息,请询问,我会尽力提供示例或其他详细信息。

        【讨论】:

          猜你喜欢
          • 2014-02-20
          • 2014-05-02
          • 2018-07-28
          • 2019-03-15
          • 1970-01-01
          • 2013-08-10
          • 1970-01-01
          • 2020-11-01
          • 1970-01-01
          相关资源
          最近更新 更多