2012-08-27 40 views
1

有了这个问题,我的目标是更好地理解PHP的内部工作原理。包括选择性或全球?

假设你有一个50K库。该库加载了一堆你在这里和那里使用的方便的函数。同时假设这些功能需要/使用比如你网站的10%的页面。但是你的主页肯定需要它。现在

,问题是...你应该使用全局包含指向该库 - 全线 - 让所有的页面(包括90%不需要库)将得到它,或你是否应该有选择地在你需要的页面上添加包含引用?

回答这个问题之前,让我指出“为什么”,我问这个问题......

当您包括参考,PHP也可以将其高速缓存。因此,我担心的表现可能是一次交易,而不是每次。一旦这一次阻碍,随后的负载可能不会像人们想象的那么糟糕。这完全是因为PHP部署的智能缓存机制 - 我没有深入的了解,因此,这个问题...

由于头版需要该库,因此参数可能是为什么不保存该库温暖和新鲜在记忆中,并得到它的全面服务?

在回答这个问题时,请从缓存/性能的角度严格地处理这个问题,而不是从方便的角度出发,以避免讨论转向编程风格以及该做什么和该做什么。

谢谢

回答

1

测量它,那么你知道。

缓存的好处是先打后可能边际,因为操作系统会缓存它为好,但只有保存I/O命中(当然,这不是什么)。但是,您仍然会受到处理冲击。如果您将50K的代码包含在“Hello World”页面中,即使您没有执行任何代码,您仍然会支付CPU和内存的代价来加载和解析该50K的源代码。这部分处理很可能不会以任何方式缓存。

一般来说,CPU是非常便宜的今天,所以它可能不会是“值得保存”。但这就是为什么你需要真正衡量它,所以你可以决定自己。

1

我认为你所指的缓存是从APC之类的操作码缓存?所做的只是防止PHP每次都需要解释源。对于每个包含,您仍然需要点击或需要使用。一个范例是取消程序功能并使用通过__autoload()加载的类。这为大型应用程序提供了一种简单的按需使用策略。同意威尔说,如果你担心,你应该测量一下。过早优化永远不会有帮助。

1

我非常感谢您对性能的关注。

简短的回答是,为了获得最佳性能,我可能有条件地包括只需要它的页面文件。

PHP的操作码缓存将保持既包括缓存表单文件,所以你不必担心使用其他类型的缓存可能在保持高速缓存“暖”为你。缓存将一直保留,直到存在内存限制(不是50K脚本的问题),源文件更新,手动清除缓存或服务器重新启动。

这就是说,操作码(PHP字节码)缓存只是PHP解析过程的一部分。每次脚本运行时,都会处理字节码,以构建在脚本中定义和可选使用的函数,类,对象和其他实例变量。这一切加起来。

在这种情况下,简单的更改可以显着提高性能。是绿色的,每个周期计数:)