Use eAccelerator to accelerate PHP code
eAccelerator is really a good thing (its predecessor is truck-mmcache).
Simply speaking, it is a caching system that operates with PHP (supports PHP5), exchanging data through shared memory or disk files.
It is widely used to "encode" PHP source code (inappropriately called "encryption") and cache the intermediate code of PHP execution to speed up. There are many and detailed articles about the installation and use of eA. What I would like to recommend this time is to use it to assist in program design and caching. It provides a set of APIs as follows:
It is a very convenient and stable native machine. Cache implementation method, currently this part of the design seems to only support shared memory, so it can only be used for Unix-Like OS, and Windows is not so lucky.
1. eaccelerator_put($key, $value, $ttl=0)
Save $value into the cache with $key as the key name (object type is supported under php4, but looking at the source code, it seems that it is not supported in zend2) , $ttl is the life cycle of this cache, the unit is seconds, omitting this parameter or specifying it as 0 means no time limit, until the server is restarted and cleared.
2. eaccelerator_get($key)
Returns the corresponding data stored in eaccelerator_put() from the cache based on $key. If the cache has expired or does not exist, the return value is NULL
3. eaccelerator_rm ($key)
Remove cache based on $key
4. eaccelerator_gc()
Remove and clean up all expired keys
5. eaccelerator_lock($key)
Add $key Locking operation to ensure data synchronization during multi-process and multi-thread operations. You need to call eaccelerator_unlock($key) to release the lock or wait for the program to automatically release the lock when the request ends.
For example:
eaccelerator_lock("count");
eaccelerator_put("count",eaccelerator_get("count")+1));
?>
6. eaccelerator_unlock($key)
Release the lock based on $key
7. eaccelerator_cache_output($key, $eval_code, $ttl=0)
Cache the output of $eval_code code for $ttl seconds, ($ The ttl parameter is the same as eacclerator_put)
For Example:
8. eaccelerator_cache_result($ key, $eval_code, $ttl=0)
Cache the execution result of $eval_code code for $ttl seconds, ($ttl parameter is the same as eacclerator_put), similar to cache_output
For Example:
9. eaccelerator_cache_page($key, $ttl=0)
Cache the current entire page for $ttl seconds.
For Example:
eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30);
echo time();
phpinfo();
?>
10. eaccelerator_rm_page($key)
Delete the cache executed by eaccelerator_cache_page(), the parameter is also $key
______________________________________________
(As a simple example Check out its power, note that it may not work in cli mode! )
class test_cache {
var $pro = 'hello';
function test_cache() {
echo "Object Created!
n";
}
function func() {
echo ', the world!';
}
function now($t) {
echo date('Y-m-d H:i:s', $t);
}
}
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
$tt = new test_cache;
eaccelerator_put("test_tt", $tt);
echo "no cached!
n";
}
else {
echo "cached
n";
}
echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>
The following are the comments from netizens:
------------------------------- -------------------------------------------------- --
showsa replied on: 2005-12-31 19:51:56 win also supports it! http://www.arnot.info/eaccelerator/
Albatross replied on: 2006-01-04 17:17:37 There is a small bug in the latest version of eAccelerator 0.9.4-rc1, which appears as /var/log/httpd A large number of [warn] (32) Broken pipe: write pipe_of_death error messages appear in /error_log. Solution: Modify the debug.c file -------------------------- ----------------------- /** * Close the debug system. */ void ea_debug_shutdown () { fflush (F_fp); // Source statement, no detection when closing the file File handle //fclose (F_fp); //Change to if (F_fp != stderr) fclose (F_fp); F_fp = NULL; }
soichiro replied at: 2006-01-10 22:01:21eAccelerator/truck- mmcache is terrible. I now have two systems with high load, one based on Drupal and the other based on PostNuke. After using eAccelerator, the speed of Drual increased by 100 times and PostNuke increased by 10 times. The reason why PostNuke improved less is because it itself Soon.
wangyih replied on: 2006-04-08 10:48:11 How do you compare with using Squid?
showsa replied on: 2006-04-08 23:23:44 How do you compare with Squid? The difference is that Squid caches the page running results. If it is not displayed in real time, Squid is definitely better. But for forums and the like, Squid is not good. Using eaccelerator /memcache can greatly improve efficiency
Yarco replied at: 2006- 04-09 10:00:43 But it is said that it conflicts with the encoded code... I don’t know how compatible it is with zend now?