Крч, если коротко, то в задачах, где происходит частое обращение к бд(ну я лично так думаю, не бейте), выгоднее использовать
json
файл.
Я использовал php функцию
microtime, записывая в переменную ее значение вот так
$time=microtime(true)
, первой строчкой в методе контроллера, далее выполнял код и самой последней строчкой ритернул
return round(microtime(true) - $time, 4);
, таким образом замеряя исполнение кода с округлением в 4 символа после запятой.
Вот пример всего кода в метода:
public function actionIndex()
{
$time = microtime(true);
$user = User::findOne(['username' => 'www']);
$user->username = 'www';
$user->update();
$json = json_decode(file_get_contents(__DIR__ ."/../../common/models/test.json"), true);
$json['b'] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
file_put_contents(__DIR__ . "/../../common/models/test.json", json_encode($json));
return round(microtime(true) - $time, 4);
}
Как вы понимаете, либо обращение к бд, либо обращение к файлу было закомментировано. Ну и для чистоты эксперимента я не просто получал данные из бд или файла, но и делал какую то обработку, селектил и менял значение поля модели, а потом делал
updated()
, либо менял значение объекта по ключу в файле. Так же стоит заметить, что при работе с файлом я использовал
json_encode()
и
json_decode()
, так как в реальной задаче вам вряд ли будет нужный чистый json.
Теперь к цифрам:
Среднее значение занимаемого времени при работе с бд, это -
0.850
, а вот время исполнения получения и перезаписи файла зависит от его объема. Я судил не по кб, а по кол-ву символов в файле, так как IDE показывает это. И дело в том, что json файл с 1 млн символов, запись с декодом, смена какого то значения и потом перезапись с инкодом занимает в среднем
0.100
. Другими словами 1 млн === 0.100.
Когда файл имел символов 200, то вся операция занимала в 100 процентах случаев
0.002
.
Будут вопросы, пишите.