我计划创建一个动态内容较多的网站,想知道对于我的网络堆栈的各个部分来说什么是最明智的选择。
现在我正在决定是否应该在 nginx 上进行开发,使用 PHP 来传递动态内容,或者使用 nginx 作为 Tomcat 的代理并使用 servlet 来传递动态内容。
我对 Java、JSP 和 servlet 有丰富的经验,所以这对我来说是个优势。此外,由于它是一种编译语言,因此它的执行速度比 PHP 更快(这是隐含的这里Java 比 PHP 快 37 倍左右),并且创造网页速度更快。
我没有使用过 PHP,但我觉得它很容易上手。它比 Java 慢,但由于客户端只与 nginx 通信,所以我认为 服务这样,动态创建的网页到达客户端的速度会更快。
考虑到这些事情,我想知道:
- 我的假设正确吗?
- 瓶颈出现在哪里:创建页面还是将页面返回给客户端?
- 如果我要使用 Tomcat 来生成动态内容(请记住我的网站在这方面会很繁重),那么使用 nginx 代理 Tomcat 是否会给我带来任何 nginx 性能优势?
如果最终 PHP 能给我带来最佳性能,我不介意学习它。我只是想知道从这个角度来看什么是最好的选择。
答案1
我的假设正确吗?
不完全是,在 Tomcat 前面设置 nginx 与使用 nginx“默认”php-fpm 通过 CGI 运行 PHP 的 nginx 设置非常相似。
您可以利用 nginx 的出色的静态内容功能,同时从 Tomcat 转发和返回动态内容。
瓶颈出现在哪里:创建页面还是将页面返回给客户端?
与仅运行 Tomcat 相比:可能毫无用处,如果有的话,您将减轻 Tomcat 的 Java 部分负担,而 nginx 处理其他所有事情。 nginx 从 Tomcat 请求和提供页面所需的额外时间。
如果我要使用 Tomcat 来生成动态内容,那么使用 nginx 代理 Tomcat 是否会给我带来 nginx 性能优势?
是的。
此外,由于它是一种编译语言,因此它的执行速度比 PHP 更快(这里暗示 Java 比 PHP 快 37 倍左右)
不要相信你在网上读到的一切;)
尽管解释型语言在编译代码的性能上很可能总是达不到要求,但操作码缓存通常可以解决问题并将代码置于半编译状态,这往往会大大加快速度。
虽然还没有达到编译代码的程度,但是已经足够接近了。
答案2
在 Java 和 PHP 之间进行选择时,您需要记住以下几点:
- 它们都是优秀的语言
- 使用这些语言已经创建了大量优秀、高性能的 Web 应用程序
- 他们都拥有优秀的开发者社区
除非你用两种语言创建相同的应用程序,然后部署并测试它们,否则无法回答哪一个性能更好。当然,这对 99.9999% 的团队来说太昂贵且耗时。
当你面临这种选择时,你可能想问以下问题代替“哪种语言表现更好”:
- 哪种语言和框架能让我开发团队最高效?
- 对于我的部署团队来说,哪种类型的应用程序最容易监控、部署和维护?
如果答案是 PHP,那么我认为尝试用另一种语言编写应用程序以获得预期的性能提升是愚蠢的。但是,如果您的团队(即使只有您)对 Java 更加熟悉,那么花时间做您最熟悉的事情可能是一个好主意。
呼呼!