is it possible to use php accelerators with zend framework - php

is it possible to use accelerators such as Memcache, APC, etc on a PHP+ZendFramework application and still have it work without Zend Framework going kaputt

Yes you can use PHP accelerators such as APC, eAccelerator which cache the PHP byte code (http://en.wikipedia.org/wiki/List_of_PHP_accelerators). Those type of cache just keep your "PHP scripts" in memory. It won't directly affect Zend Framework.
You can also use Memcache by using Zend_Cache (http://framework.zend.com/manual/en/zend.cache.introduction.html). Memcache is generally use to store raw data such as DB result, Page result.

I use APC under nginx+php-fpm in production with an ZF app and it works great.
(You can use it under apache as well).
It does provide a big boost, but you might want to setup a cron job to clear the apc cache once a day, after a while in certain conditions the memory gets fragmented and the performance drops a bit.

Related

xcache doesn't speed up my php application

I have a php application which provides restful service,I want to speed it by xcache,but the situation is not as imagined.
My php application bases on yii 1.1,and the function I test does heavy db query and calculation.The elapsed time if not use xcache is 600ms(300ms db query) and things are on the whole the same if use xcache.
I can see xcache is really working by accessing xcache admin page.
Xcache can save time by avoiding creating reduplicated opcode,theoretically it can speed my application,but it doesn't here,so can someone explain?
You should try enable opcache in php ini that is now bundled in as part of php core. a better alternative would be to try and optermise the heavy query
Profile your application. You can't expect a significant speedup if the bottleneck is IO or some poorly optimized DB queries.
Opcache is now the standard, and it's highly recommended to use it.
It's also seemless, you don't need to do a thing (other than installing it) as Opcache manages all the setting and getting of Op Code caches for you transparently.
Alternatively, you could attempt to diagnose your query by looking at database indexes, using EXPLAIN (if you're using MySQL) and caching the results.
I think the reason is that compilation time only the small part of the whole.I'll test it and put the result here later.

PHP APC-opecode cache and file based output cache

I am running PHP Version 5.3.5 and developing a website in Codeigniter 2.1.3
I am working now to improve website performance, and I found caching can be used like APC or memcached or Zend OpCache.
In codeigniter I used $this->output->cache(43829); for caching.
Output of actions got cached, and It returns same output on every request.
But I have dynamic pages so this caching will not work. I am looking around how APC can be used for ope-code caching and used to enhance web site performance.
Is APC stores opecode in cache that cane be used by zend engine for execution execution, without regenerating opecode on each request?
Attached is my PHP APC configuration
PHP 5.3 is nearly 2 years past end of life, and APC is not available for current PHP versions. PHP 5.5+ comes with Zend Opcache, which has equivalent functionality. Instead of trying to get your site to work with old technologies, simply upgrading your server to a current (and secure) version of PHP would give you this performance boost without you having to do anything else.
Output of actions got cached, and It returns same output on every request
While its faster than regenerating the page, its still far from optimal. Better to use a caching reverse proxy in such a case.
I am looking around how APC can be used for op[e]-code caching
Your question implies that you think you are not already using op-code caching. I suggest your first port of call is to see if it is already enabled. You can see this from the output of phpinfo() or check function_exists('apc_sma_info');
APC is unlikely to be provisioned for future versions of PHP. ZOP+ is the opcode cache which is currently bundled with PHP 5.4+. It will work with 5.3, but requires some effort. Tim is correct in saying the 5.3 is past its sell-by-date and should be upgraded.
Note that ZOP+ also includes an optimizer (and, rather alarmingly, it seems to have a significant impact on the performance of many frameworks). The performance of ZOP+ is more dependent on sizing the cache than in APC - but even with APC, sizing the cache wrongly will not give good results.

using both Opcache and Xcache

I'm just wondering is it stupid to use both Xcache 3 with Zend Opcache at the same time to cache PHP files? I know that both do almost the same job, but not sure if that would make any difference on the performance and speed.
I want to speed up my php page load so that visitors don't need to wait long.
any thoughts on that?
To answer your question: Yes, you should not run xcache and Zend Opcache at the same time. If you do, you'll get undefined behaviours, most notably "cannot redeclare class XYZ" fatal errors. That happened to me after a systems upgrade, where the packet maintainer activated Zend Opcache along the already existing xcache installation.
As for the matter of which of both to use for opcaching, that depends on your specific code - I'd recommend setting up a test environment and firing up the Apache Benchmark or a similar tool to check the answer times.
On a default wordpress installation, I was able to get a speedup (uncached vs xcache) of about 5-7x, which is quite significant. If you really need more, you'll need to check out the other possibilities already mentioned in the comments like
using a loadbalancer and multiple application servers
using memcache or memcached to cache database queries and other load heavy operations
switching to another database system like a NoSQL system (be careful of the consequences)
changing your architecture to a static site with webservices providing interactive content

variable caching softwares APC,Memcached performances

You need to cache arbitrary data like results of PHP logic within methods,database query calls and generally any data results from a process (not Opcode caching).
What would you want to use between third-party caching softwares like Apc and Memcached?What makes you prefer the above tools to caching your data onto your local file system?
thanks
Luca
Go with Memcache. It has a lot more support and larger community (because it can be used by multiple languages). Supports access from multiple servers, so it allow for a more scalable architecture.
That being said, still install APC or another opcode cache for PHP. It will significantly speed up PHP's execution time.
They're both different. APC is a local machine cache specific to PHP and memcached is a multiple-computer distributed cache. If you're trying to scale your programs memcached is often preferred. If you're designing for a single server then APC will suit you better.
I personally prefer a combination of both.
Simple answer, Memcache and APC store the data in memory, not on the disk. Access time is MUCH faster.

Is using PHP accelerators such as MMCache or Zend Accelerator making PHP faster?

Does anybody have experience working with PHP accelerators such as MMCache or Zend Accelerator? I'd like to know if using either of these makes PHP comparable to faster web-technologies. Also, are there trade offs for using these?
Note that Zend Optimizer and MMCache (or similar applications) are totally different things. While Zend Optimizer tries to optimize the program opcode MMCache will cache the scripts in memory and reuse the precompiled code.
I did some benchmarks some time ago and you can find the results in my blog (in German though). The basic results:
Zend Optimizer alone didn't help at all. Actually my scripts were slower than without optimizer.
When it comes to caches:
* fastest: eAccelerator
* XCache
* APC
And: You DO want to install a opcode cache!
For example:
alt text http://blogs.interdose.com/dominik/wp-content/uploads/2008/04/opcode_wordpress.png
This is the duration it took to call the wordpress homepage 10.000 times.
Edit: BTW, eAccelerator contains an optimizer itself.
MMCache has been deprecated. I recommend either http://pecl.php.net/package/APC or http://xcache.lighttpd.net/, both of which also give you variable storage (like Memcache).
Both are interesting and will provide speed boost since they compile source code into binary representation which is then executed by the PHP engine.
Any huge web site running with PHP (Facebook for example) is running some sort of opcode cache system like MMCache.
The problem is that they are not very easy to set up depending on your system.
Depending on how much of your PHP code is actually executed and how long that execution takes they can be a really big win. It certainly isn't going to hurt, but the gain you see will very much depend on where your time is currently spent.
btw mmcache has been rolled into a different project now, I forget the name but Google will tell you.
I use APC on my production servers and it works pretty well out of the box. Compile it and add it to PHP and there isn't much tweaking left to do for it. I check it every once in a while just to review stats but since I use MVC a lot all of the main files (routers, controllers, etc) rarely change on a day-to-day basis so that code stays compiled and runs pretty efficiently.
currently we use apc, free and was just a simple plug and play on our live servers. Provided a huge performance increase for our site, especially as the project size increased. I also have the apc.stat disabled so it doesn't check if the code has been updated, so whenever we need to update the code on the live site we restart apache.
I use APC, and can attest that it can dramatically reduce the CPU and I/O load on an app server if you maintain a high cache-hit rate. It not only saves you from having to compile, it can save you from having to read the php files from disk at all. (i.e. the bytecodes are served directly from main memory, so it's super fast) It lowers the speed to render a single page, and increases the requests per second your server can handle.
If you use RedHat or CentOS, installing APC is super simple:
yum install php-devel httpd-devel php-pear
pecl install apc
echo "extension=apc.so" > /etc/php.d/apc.ini
# if you're using SELinux:
chcon "system_u:object_r:textrel_shlib_t" /usr/lib/php/modules/apc.so
/etc/init.d/httpd restart
You asked about downsides. The only downside is that it requires some memory. The default on APC is 30MB, but it can be adjusted, and the cost of a little bit of memory more than pays for itself with the increased speed and response rate.
BlaM's testing included all the DB calls made by WordPress. When you're making fewer DB calls, you'll see the performance gain of opcode caches be even more dramatic.
I used Zend Accelerator a little back in the day (2004-ish). It certainly gave some significant performance wins on code it could work with, but unfortunately the system I was using was designed to quite often dynamically load code and then eval it, which Zend Accelerator couldn't do much with at the time (and I'd guess still can't).
On the down side, we certainly saw some caching issues (where the code would be changes, but the compiled version sync with the change for one reason or another). I imagine those problems have likely been ironed out by now.
Anyway, I don't have any hard comparison numbers, and certainly didn't write the same system in different environments for comparison, but for the vast majority of systems, PHP isn't going to kill you performance wise.
Have you checked out Phalanger? It compiles PHP to .NET code. Here are some benchmarks which show that it can dramatically improve performance.

Categories