我正在使用php和zend框架2构建的Web应用程序。我来自Java EE背景。在我看来,对于每个http请求,整个zend应用程序堆栈正在重建,从磁盘读取大量配置文件,构建我的所有服务和诸如此类的东西。它是否正确?如果是这样,与Java EE方法相比,这似乎相当奇怪和低效,因为在Web服务器上初始化的应用程序服务负载启动,然后在许多请求中具有生命周期。看到浏览器正在制作大量的Ajax请求,这个php / zend的方法是不是很慢?在进行Web应用程序设计时,我是否需要进行范式转换?
答案 0 :(得分:0)
ZF2可以使用缓存来提高性能,配置也是如此 也可以缓存。
ZF2
中的任何服务或类都不应该在每个请求上构建,例如db连接(ZF2不会尝试连接到db,除非你真的在做某事到数据库服务器)
另一个例子:
假设你有一个REST API,你只需要在一个控制器上使用,不需要在每个请求上构建这个api,你或者要求模块的服务管理器只为你在那个控制器上构造那个对象
看一下这篇博客,它可能会对您有所帮助:http://www.masterzendframework.com/articles-2/zend-framework-2-core-concepts-understanding-dependency-injection
或http://akrabat.com/或ZF2小组组长:Matthew Weier O' Phinney http://mwop.net/
(如果我理解你的问题,抱歉,如果没有)
答案 1 :(得分:0)
正确的是,php没有像java那样在环境中运行。 这意味着您的php应用程序在每次请求时都已初始化。
在我看来,对于每个http请求,整个zend应用程序堆栈正在重建
但这不正确。当你来自java时,php- / zf2-应用程序的初始化并不像你想象的那么重。 不要想到像每个请求重启的tomcat服务器。整个Zend Framework也没有加载,你的应用程序类也不好。 只加载了特定请求所需的类。
PHP Frameworks为此使用自动加载器,因此如果您在应用程序中调用新的MyClass(),则将加载该类。甚至包含“MyClass”的文件在很多情况下也不是从光盘加载的,而是来自ram-memory或字节码缓存。
如果你的服务器设置正确,那么zf2骨架应用程序将在几毫秒内加载。
您的服务需要为您的应用做好准备吗?
在配置中,它们只不过是关联数组中的“关键”。当您的应用程序需要针对您的特定请求的服务时,它将非常快速地在配置阵列中找到该条目。服务将仅针对此请求从工厂方法或工厂类初始化,但仅限于所需的特定服务。
Facebook也在使用PHP。每个请求都不需要一分钟吗?如果php正在按照你现在想的方式工作,那我需要几分钟或几小时 - 或者只是在超时时间结束:)