共享与专用php库

共享与专用php库,php,zend-framework,shared-libraries,Php,Zend Framework,Shared Libraries,我有一个服务器,它由几个Zend Framework应用程序组成 我想知道在服务器上上传Zend-Library并在所有应用程序之间共享它是否是一个好主意,而不是每个应用程序都上传它 例如,如果多个应用程序同时请求一个库,它是否会影响速度 它的优点和缺点是什么 Thx提前。我的回答通常适用于共享库,因为这不应该特定于Zend库: 分享的好处: 减少磁盘空间使用 可能更少的内存使用(取决于许多因素,包括操作系统) 更新一次,全部更新(您不必为每个应用更新库 分享的缺点: 如果某个应用程序需要

我有一个服务器,它由几个
Zend Framework
应用程序组成

我想知道在服务器上上传
Zend-Library
并在所有应用程序之间共享它是否是一个好主意,而不是每个应用程序都上传它

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

它的优点和缺点是什么


Thx提前。

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

分享的好处:

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

  • 如果某个应用程序需要特定版本的库(例如出于兼容性原因),则不能通过共享库来实现
  • 更新到不兼容的库版本可能导致应用程序中断

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


同样,如果这些应用程序共享代码,它们肯定也应该共享库,以避免在每个站点上不同库版本下运行的共享代码出现更糟糕的问题。

正如其他人所指出的,有优点也有缺点。最大的缺点是每次升级库代码时,都需要支持所有应用程序,而不仅仅是现在需要升级的应用程序

最大的优点是,如果您使用像APC这样的操作码缓存(您应该这样做),加载相同的库代码块会浪费相当多的内存。这取决于操作码缓存的大小以及实际运行的库代码的数量,这在某个时候可能会成为一个问题。如果操作码缓存的大小不足以容纳所有内容,则会导致性能下降e

一个折衷的解决方案是将所有库都放在服务器上可以共享的位置。构建应用程序以使用一些配置值进行加载

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());
define('ZEND_LIB_PATH','/path/to/ZendFramework-1.10.1/library');
set_include_path(ZEND_LIB_PATH . PATH_SEPERATOR . get_include_path());
这样,如果两个应用恰好使用同一版本,它们可以共享该版本的操作码缓存,但您不必依赖它


免责声明:我实际上没有这样做,因此您可能希望在将其付诸实践之前测试该理论。

我想知道它是否会影响应用程序的执行速度。在执行时不会。但是,如果库文件未缓存,则从磁盘读取库文件可能需要更长的时间,但如果不缓存,这只是一个问题没有足够的RAM用于磁盘缓存。