我有PHP脚本(机器生成),大小为3MB。其内容主要是switches
和echo
的一对。这不是什么,只有echos
。
我正在使用它作为"缓存"对于慢速SQL查询,所以我为这个PHP生成所有可能的输出,然后在URL中使用ID来获得适当的结果。
到目前为止,我一直在使用700KB的脚本,一切都还可以。现在,我添加了一些数据,最终得到3MB。可以运行它还是我应该考虑其他解决方案?
答案 0 :(得分:1)
使用缓存库而不是将内容打包到机器生成的PHP文件中,因为每次调用时都必须解释该大小的PHP文件,从而将托管服务器性能降低
一个流行的缓存组件是https://github.com/illuminate/cache - 在Laravel中使用。您应该能够在框架之外的程序中使用它。
而且,如果你觉得它更舒服,你可以自己动手。不确定您使用什么逻辑来缓存查询(它是字面的,简单的还是复杂的),但是通过md5()
来简单地将奇怪的字符串与文件名相关联:
function get_query( $sql ) {
$cache_filename = sprintf( "cache/%s.sql", md5($sql) );
if( file_exists($cache_filename) ) {
return( file_get_contents($cache_filename) );
}
// otherwise, perform the query
$data = ...
file_put_contents( $cache_filename, $data );
return( $data );
}
文件名看起来都像MD5哈希。例如,如果您的查询为"show tables"
,则文件名为cache/489b4ceb2f4301a7132628303f99240d.sql
答案 1 :(得分:1)
听起来你正在滚动你自己的轮子。请考虑使用广泛接受的缓存解决方案,例如APC或memcache。
还要考虑使用Zend caching component,它可以从框架的其余部分中提取和使用,并为许多缓存后端提供抽象API,包括基于文件,APC和内存缓存。
您所描述的解决方案可能会为每次执行使用过多的内存,浪费CPU解析不必要的PHP代码,并且难以处理失效等问题。