我想知道哪个使用内存空间更有效率并使用PHP缩短响应时间。
以下代码:
解决方案01:每次从磁盘读取
<?php
class Resource
{
// I know, but forget about validation and other topics like if isset($key) ...
public static function get($key)
{
$array = json_decode(static::getFile());
return $array[$key];
}
// Imagine the get.json file has a size of 92663KB and is compress
private static function getFile()
{
return file_get_contents('/var/somedir/get.json');
}
}
解决方案02:将文件配置存储在类的属性
中<?php
class Resource
{
// This will be a buffer of the file
private static $file;
public static function get($key)
{
static::getFile();
$array = json_decode(static::$file);
return $array[$key];
}
// Imagine the get.json file has a size of 151515KB now and is compress
private static function getFile()
{
if (!is_null(static::$file)) {
static::$file = file_get_contents('/var/somedir/get.json');
}
return static::$file;
}
}
现在想象一下用户要求 myapp.local / admin / someaction / param / 1 / param / 2 这个动作消耗9个大小为156155KB,86846KB,544646KB,8446KB的配置文件, 787587587KB等
答案 0 :(得分:0)
这是一个经典的时间与空间的权衡。没有普遍的答案,只有良好的做法才能得到答案。
经验法则:
磁盘IO很慢。解密和/或解压缩消耗周期。避免重复这种类型的工作通常会使程序更快。
但缓冲需要RAM。 RAM是一种有限的资源。使用RAM加载处理器缓存。大量使用RAM会加载VM系统。两者都导致缓慢下降,部分地避免了磁盘I / O的避免。在极端情况下,加载VM系统会导致与磁盘交换,因此缓冲导致磁盘IO。
完成经验法则后,您必须使用良好的工程实践。
选择一个有意义的集合:具有最高值
的集合(每个字节的IO时间+每个字节的解压缩/解密时间)x FrequencyOfReads x以字节为单位的大小
也适合可用的RAM。
按照您的建议实施4.的缓存。