哈希
了解您的哈希(数组/表/有序映射/无论您如何称呼它们)。哈希查找速度非常快,有时,如果您有O(n^2)循环,您可以先将它们组织成一个数组(由主键键控),然后再对它们进行处理,从而将它们减少到O(n)。
一个例子:
foreach ($results as $result)
if (in_array($result->id, $other_results)
$found++;
是缓慢的
in_array
整个循环
$other_result
,产生O(n^2)。
foreach ($other_results as $other_result)
$hash[$other_result->id] = true;
foreach ($results as $result)
if (isset($hash[$result->id]))
$found++;
第二个更快(取决于结果集——越大,越快),因为isset()是(几乎)恒定的时间。实际上,这不是一个很好的例子——您可以使用内置的PHP函数更快地完成这项工作,但您已经了解了这个想法。
优化(我的)SQL
-
Myq.L.CONF:
我不知道通过优化MySQL配置而不是保留默认配置,您可以获得多少性能。但是我已经读过了,您可以忽略使用默认配置的每个PostgreSQL基准。配置的afaik与MySQL关系不大,但是为什么忽略它呢?经验法则:尝试将整个数据库放入内存中:)
-
解释[查询]:
很明显,很多人都错了。了解索引。有一些规则你可以遵循,你可以基准它,你可以做出巨大的改变。如果你真的想要全部,了解不同类型的索引(btrees,hashes,…)以及何时使用它们。
高速缓存
缓存很难,但如果做得好,它会
这个
差异(不)
一
差异)。在我看来:如果你不需要缓存就可以生活,那就不要这样做。它常常会增加许多复杂性和故障点。Google曾经做过一次代理缓存(为了加快进程),有些人看到了其他人的私人信息。
在PHP中,人们经常使用4种不同的缓存:
-
查询缓存:
几乎总是转换为memcached(有时转换为apc共享内存)。将特定查询的结果集存储到快速键/值(=hashing)存储引擎中。查询(现在查找)变成
非常
便宜的。
-
输出缓存:
存储生成的HTML以供以后使用(而不是每次都重新生成)。这可能导致最大的速度提高,但有点违背了PHP的动态特性。
-
浏览器缓存:
ETags和HTTP响应如何?如果做得好,你可能会避开大部分工作
就在开始的时候
!大多数PHP程序员忽略了这个选项,因为他们不知道HTTP是什么。
-
操作码缓存:
APC、Zend优化器等。使PHP代码加载更快。可以帮助处理大型应用程序。不过,与外部数据源无关(速度较慢),而且其潜力有点有限。
有时,没有缓存是不可能生存的,例如,如果涉及到缩略图。调整图像大小是非常昂贵的,但很容易控制(大多数时间)。
剖面仪
xdebug
显示应用程序的瓶颈。如果你的应用程序太慢,知道原因会很有帮助。
循环中的查询
有(php-)专家
不知道联接是什么
(对于你所教的每一个人,两个没有这些知识的新的将浮出水面——他们将编写框架,见施纳勒斯定律)。有时,循环中的查询并不那么明显,例如,如果它们与库一起提供。对查询进行计数-如果它们随着显示的结果而增长,则会出现问题。
缺乏经验的开发人员确实有一种原始的、永不满足的冲动来编写框架和内容管理系统。
施纳尔定律