2014-09-20 101 views
3

最近我一直在想很多关于优化的东西。考虑平衡服务器负载,内存,客户端,负载,速度,大小等因素,我正在开发一款应用程序,使我能够考虑在哪里处理数据。优化:在哪里处理数据?数据库,服务器或客户端?

我想更好地理解有经验的程序员在思考时如何优化代码关于处理。请采取以下3种方式:

  • 当我收到数据时,请在数据库级别进行一些处理。
  • 在PHP上处理数据
  • 将原始数据传递给客户端,并使用JavaScript进行处理。

你会喜欢哪一种?哪种情况?为什么?对于广泛的问题,我很抱歉,如果有人能够在此推荐我的好阅读资源,我也会很感激。

回答

2

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

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

因此,根据经验法则,尽可能多地处理数据库中的数据。为查询创建新连接的成本非常高,因此您想尽可能限制它。即使您必须编写一些非常难看的SQL,执行JOIN几乎总是会比执行2 SELECT语句更快。

PHP应该只能用于格式化和缓存数据。如果您在每次请求后执行大量数据操作,则可能是以不太实际的格式存储数据。您希望使用类似Redis或APCu的东西来缓存任何未经常更改的任何服务器状态。

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

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

2

两个想法:电脑应该工作,人们应该思考。 (来自20世纪60年代的IBM广告)

“不成熟的优化是编程中所有邪恶(或者至少大部分)的根源。” --Donald Knuth

除非您或者计划成为Google或亚马逊或Facebook,否则您应该关注功能。 “在你快速完成之前让它工作。”如果你的计划增长到这样的规模,做他们所做的:抛出硬件的问题。它更便宜,更有效。

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

最后,请记住客户端不能被信任。出于这个原因,必须在服务器上。

相关问题