共享与专用的php库

时间:2010-10-09 17:09:17

标签: php zend-framework shared-libraries

我有一个服务器,其中包含多个Zend Framework应用程序。

我想知道在服务器上上传Zend Library并在所有应用程序中共享它而不是按应用程序上传它是否是一个好主意。

如果例如多个应用程序同时请求库,它是否会影响速度。

它的优点和缺点是什么?

提前谢谢。

3 个答案:

答案 0 :(得分:4)

我的回答一般适用于共享库,因为这不应该特定于Zend Library:

分享的PROS:

  • 减少磁盘空间使用量
  • 可能更少的内存使用量(取决于许多因素,包括操作系统)
  • 更新一次,全部更新(您不必为每个应用更新库

赞成共享:

  • 如果您需要特定版本的库用于某个应用程序(例如出于兼容性原因),则无法通过共享库来实现此目的
  • 通过更新为不兼容的库版本来破坏应用程序的风险。

答案 1 :(得分:3)

正如其他人所指出的那样,有利有弊。最重要的是,每次要升级库代码时,都需要测试每个应用程序,而不仅仅是现在需要升级的应用程序。

最重要的是,如果你正在使用像APC这样的操作码缓存(你应该这样做),你就会浪费相当多的内存来加载相同的库代码块。根据操作码缓存的大小以及实际运行的库代码的数量,这可能会在某些时候成为问题。如果您的操作码缓存大小不足以容纳所有内容,那么最终会产生一定程度的性能损失。

中间解决方案是将所有库保留在可以共享 的服务器上。构建应用程序以使用一些配置值进行加载。

APP1:config.php

<?PHP
define('ZEND_LIB_PATH','/path/to/ZendFramework-1.9/library');
set_include_path(ZEND_LIB_PATH . PATH_SEPERATOR . get_include_path());

APP2:config.php

define('ZEND_LIB_PATH','/path/to/ZendFramework-1.10.1/library');
set_include_path(ZEND_LIB_PATH . PATH_SEPERATOR . get_include_path());

这样一来,如果两个应用程序碰巧使用相同的版本,他们可以共享该版本的操作码缓存,但你并不依赖它。

免责声明:我实际上并没有这样做,所以你可能希望在将理论付诸实践之前对其进行测试。

答案 2 :(得分:2)

如果应用程序是独立的,我会为每个应用程序提供自己的库,以避免在需要升级其中一个应用程序库时出现问题,但不希望必须使用该库版本测试和更新它们

然后,如果这些应用程序共享代码,它们也应该共享库,以避免在每个站点上运行在不同库版本下的共享代码的更严重问题。