文章“PHP中的约束理论”是7月11日PHP频道时事通讯的社论。要了解 PHP 新闻、帖子和相关链接,请务必在此处保持最新状态。
我一直在读《凤凰计划》,这是一本关于IT的伟大小说(你没看错),它以一种让凡人理解21世纪技术的复杂性和混乱的方式,展示了一家类似亚马逊的大型公司的日常IT和DevOps问题。
在不剧透的情况下,书中提到了约束理论。根据维基百科:
约束理论 (TOC) 是一种管理范式,它认为任何可管理的系统在实现更多目标方面都受到极少数约束的限制。始终存在至少一个约束条件,TOC 使用聚焦过程来识别约束条件并围绕它重组组织的其余部分。
约束理论可以提炼为这样一种观点,即链条的强度取决于其最薄弱的环节。
在书中是这样表述的:
除了瓶颈之外,任何地方所做的任何改进都是一种错觉。
出于某种原因,这比连锁成语更能引起我的共鸣。对我来说,构建一些无效的东西比破坏构建薄弱的东西更能引起我的共鸣
工厂和浏览器
正如书中(最初)所呈现的,在这里略微愚蠢,工厂车间在一张桌子上看到一堆工作订单,而工厂的其他区域则工作得有些令人满意。如果不努力优化这张桌子的吞吐量,并且(无论是巧合还是有意)升级它之前或取代它的流程,工厂就会被工作堵塞,因为前者导致办公桌前有一堆没有目的地的产品,而后者导致工厂另一端的闲置工人, 等待产品到达他们进行运输,但所有产品都停留在中央办公桌的缓慢处理中。
在这里稍微切入一点——如果你在 Twitter 上关注我,你就会知道我喜欢对浏览器咆哮。当他们放入本机 OSX 通知等更新但未能解决十年前的 RAM 使用问题时,我尤其会失去它。有些人很快就把这个问题当作对更糟糕问题的诉诸谬误,但我不同意。虽然,是的,这是对一个更严重问题的呼吁,但我不认为这是谬误——相反,我认为这是谷歌缺乏明确的约束。作为一家公司,他们似乎完全不知道需要优化的地方,或者没有资源来专门解决这个问题(不确定哪个更糟)。因此,我们在瓶颈之外进行了所有这些“改进”,让高级用户发疯,并导致试图通过在浏览器上打另一个皮肤来改造浏览器(Vivaldi、Brave、Opera、Ghost...),但无法取得进展,因为瓶颈仍然存在。如果您将办公桌和整个工厂设置从一栋楼搬到另一栋楼,办公桌仍然是问题所在。修理桌子。
PHP中的约束理论
那么,这如何应用于 Web 应用程序呢?或者,更好的是,特别是PHP应用程序?
如今,遵循这一原则并确定约束条件非常容易。我们有很多了不起的工具可供使用,通常可以在几个小时内确定瓶颈:
Blackfire 将为您提供应用程序执行堆栈的精彩深入图表,轻松指示代码瓶颈。如果在您正在分析的代码堆栈中执行,这些也将包括数据库瓶颈,从而使整个事情变得无限容易优化。
没有多少人知道这一点,但 Xdebug 具有相同的执行堆栈图和时间分析,让您在本地做同样的事情!
有一堆有价值的 QA 工具可以帮助您对应用程序进行比特测试——超长的测试时间通常表明存在瓶颈,在模拟数据和测试示例上运行时精确定位它们可能会带来难以置信的回报。
这组帖子有点老套,但很金子,一旦你确定MySQL是一个瓶颈,这组帖子可以帮助你优化它。
- 优化MySQL配置
- 优化 MySQL 索引
- 优化MySQL瓶颈
但请记住,仅仅为了优化而优化它并不是一个好主意!
如果您使用请求来核弹您的应用程序,并比较之前/之后的结果,这会有所帮助——这将是一个明确的指标,表明您的优化在多大程度上提升了整个应用程序。像 Siege 这样的工具可以帮助解决这个问题,我们有一个深入的指南。
上述工具是一个良好的开端,但远非详尽无遗,也远不适用于您可能遇到的所有问题。这本高级 PHP 选集中关于更好的 PHP 开发的其他文章可能会有所帮助,但老实说,我希望您能提供更多样化的示例和链接!射!
关于 PHP 约束的常见问题
PHP 中有哪些不同类型的约束?
在 PHP 中,约束是应用于表上的数据列的规则。它们用于限制可以进入表的数据类型,以保持数据的准确性和可靠性。PHP 中不同类型的约束包括主键、外键、唯一、非 Null 和 Check 约束。这些约束中的每一个在数据验证和完整性方面都具有独特的目的。
PHP 中外键约束的目的是什么?
外键约束用于防止会破坏表之间链接的操作。它提供了一种在数据库中强制执行引用完整性的方法。外键意味着一个表中的值也必须出现在另一个表中。
如何在 PHP 中使用 Unique 约束?
Unique 约束可确保列中的所有值都不同。这提供了一种方法来确保不会在应包含唯一值的特定列中输入重复值。例如,当您想要确保没有两个人拥有相同的电子邮件地址时,这可能很有用。
Not Null 约束在 PHP 中有什么作用?
Not Null 约束是防止将 null 值输入到数据库表中的特定列中的规则。这意味着在创建记录时,必须始终指定这些列的值。
如何在 PHP 中实现 Check 约束?
Check 约束允许您在表中的每一行上指定条件。这可确保在对数据执行操作(如插入或更新)之前满足某些条件。例如,可以使用“检查”约束来确保字段始终接收数值。
在PHP中,我可以对单个列有多个约束吗?
是的,在 PHP 中,您可以对单个列有多个约束。例如,可以有一个同时具有 Not Null 和 Unique 约束的列。这将确保该列始终具有一个值,并且该值是唯一的。
如何从 PHP 中的列中删除约束?
您可以使用 ALTER TABLE 命令从 PHP 中的列中删除约束。此命令允许您添加、删除/删除或修改现有表中的列。
如果在 PHP 中违反了约束会怎样?
如果在 PHP 中违反了约束,则将导致该约束的操作将回滚,并返回错误消息。这有助于维护数据库中数据的完整性。
我可以在 Symfony 等 PHP 框架中使用约束吗?
是的,您可以在 Symfony 等 PHP 框架中使用约束。Symfony 提供了一个 Validator 组件,使您能够对对象类的任何属性应用约束。您可以使用它来确保应用程序中的数据在处理之前满足某些条件。
发表评论 取消回复