PHP性能(读配置)

时间:2014-04-10 17:04:43

标签: php performance caching configuration

我想知道哪个使用内存空间更有效率并使用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等

  1. 哪种解决方案效率更高?
  2. 还有其他最佳方式吗?
  3. 任何其他文件格式?
  4. 也许使用PHP数组而不是json文件并解析?

1 个答案:

答案 0 :(得分:0)

这是一个经典的时间与空间的权衡。没有普遍的答案,只有良好的做法才能得到答案。

经验法则:

  1. 磁盘IO很慢。解密和/或解压缩消耗周期。避免重复这种类型的工作通常会使程序更快。

  2. 但缓冲需要RAM。 RAM是一种有限的资源。使用RAM加载处理器缓存。大量使用RAM会加载VM系统。两者都导致缓慢下降,部分地避免了磁盘I / O的避免。在极端情况下,加载VM系统会导致与磁盘交换,因此缓冲导致磁盘IO。

  3. 完成经验法则后,您必须使用良好的工程实践。

    1. 确定您可以将多少内存专用于在内存中保存磁盘数据。
    2. 确定从磁盘重复读取哪些结构以及频率。
    3. 确定尺寸。
    4. 选择一个有意义的集合:具有最高值

      的集合
        

      (每个字节的IO时间+每个字节的解压缩/解密时间)x FrequencyOfReads x以字节为单位的大小

      也适合可用的RAM。

    5. 按照您的建议实施4.的缓存。

    6. 个人资料和衡量标准。尝试替代品。根据需要重复。