性能比较
如果仔细分析一下我们添加到 index.php 的源代码,则您会看到对 microtime 的一些调用和一些注释,其中表明我们希望检查性能。
我们执行的检查是简单计时检查。我们非常有兴趣比较一下使用三个不同的软件创建索引的时间:
● 通过 WebSphere sMash Java Bridge 调用的 Lucene 的 Java 实现。
● 从 Java 应用程序调用的 Java Lucene.
● Zend Framework 中的 Lucene 的 PHP 实现。
为了进行公平的比较,我们使用了 Lucene Version 2.2.0,即 Zend 实现所基于的版本。我们还使用了 Lucene SimpleAnalyser.有关 Zend 实现的详细讨论超出了本文的范围。不过,它是 Lucene 代码的可靠端口,会生成与 Java 版本生成的格式完全相同的格式。
性能比较所执行的是对 PHP 5.3 源树下的所有 PHP 测试脚本(*.phpt 文件)进行索引。创建和优化索引所花费的时间如表 2 中所示。
表 2. Lucene 搜索的性能比较
技术
时间(秒)
WebSpere sMash Java Bridge
9
Java Lucene
8
Zend Search Lucene
200
这可以让我们简要了解使用这些现成技术的时间比较情况。所有这些计时都打开了 Java JIT,这在 Lucene 之类的应用程序中的执行时间方面会产生巨大的差异。
这些原因都不能作为不使用 Zend 实现的原因。事实上,如果不使用 Java,而您主要的开发语言是 PHP,则使用同样是 PHP 编写的搜索引擎会带来很多优势。方便地理解和修改代码之类的考虑事项可能会比唯一的性能优势更为重要。
更有意思的是使用 PHP 及 Java Bridge 与使用 Java 应用程序间的比较。二者时间接近的事实表明,我们不会在 Java Bridge 中或在 Java VM 上运行 PHP 浪费太多时间。
当然,还有其他通过 PHP 使用 Java Bridge 的实现。例如,Zend Platform 中有一个商业实现,而 sourceforge.net 提供了一个开源实现。虽然我们没有使用这些实现,但它们的存在为将 Java 用于最适用的场合(算法性能)并同时充分利用 PHP 的易用性提供了支持。
如果您重复进行这些实验,可能会发现创建索引的过程中存在着细微的差别。Zend 实现的较为有用的功能之一是,能够创建与 Java 实现格式完全相同的索引,而这就意味着可以使用标准 Java 工具对其进行检查(例如,可以从 Luke 站点下载的 Luke)。这些差异都相对比较容易解释,不会影响耗时比较的结果。例如,PHP 和 Java 分析工具之间就存在细微差别。
结束语
在本文中,您进行了以下工作:
● 使用 PHP 和 WebSphere sMash 创建应用程序。
● 使用 Java Bridge 创建和调用 Java 对象。
● 探索从 PHP 脚本使用 Java 集合的方法。
● 了解 Java Bridge 如何进行类型强制转换和异常处理。
● 开发基于 Java Lucene 库的搜索引擎。
● 了解 Java Lucene 库的性能。
完成本文的学习后,您可以将 Java 库和 PHP 脚本用于更广泛的用途。为什么不在 WebSphere sMash 中将更多的 Java 库与 PHP 结合使用?通过Project Zero 论坛让我们了解您的情况。如果您希望了解关于 Zero Global Context 和其他相关主题的更多信息,请参见下面参考资料部分列出的 WebSphere sMash Developer's Guide.