Jump to content

Recommended Posts

1 час назад, dexion сказал:

У меня на php7.2 serialize выигрывал json

На старых php вроде было наоборот

Отсюда не понял почему в опенкарте serialize заменили на json. Буду рад, если объясните.)

https://medium.com/@moinuddinchowdhury/serialize-vs-json-67fe872a7755

Это что касается скорости.

 

ну и 

<?php
$json 
'{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($jsontrue));

?>

Результат выполнения данного примера:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

 

А serialize умеет только массивы.

 

И что касается темы в целом. Попытка вот здесь сэкономить - это экономия на спичках.

От того что на 100к товаров разбирается кеш сеопро. будет он 200 или 220 мс парсится в объект - ничего не поменяется, а особенно если ссылки с полным путем категорий, где cache->set cache->set  cache->set  и так 150 раз.

 

Но в тоже время на 1000 товаров юзать готовый массив имеет место быть на 300%.

 

Share this post


Link to post
Share on other sites
1 час назад, dexion сказал:

Отсюда не понял почему в опенкарте serialize заменили на json.

serialize - строго типизировано, попробуйте изменит содержимое и вы получите ошибку (очень часто такое случалось в 1.5) - правка только через декодирование
json менее чувствительно - содержимое можно править без декодирования
 

Share this post


Link to post
Share on other sites
5 минут назад, chukcha сказал:

 

некоторых типов object (см. примечание ниже). !!!

 

Поэтому что? Не заморачиваемся!!!! А используем то, что умеет делать по человечески.
Ну а фанаты спектрума и калькулятора мк52, могут в двоичном коде писать дальше  морской бой.

 

Share this post


Link to post
Share on other sites
2 часа назад, dexion сказал:

Отсюда не понял почему в опенкарте serialize заменили на json. Буду рад, если объясните.)

От сериализации отказались из-за наличия уязвимостей https://www.php.net/manual/ru/function.unserialize.php

Share this post


Link to post
Share on other sites
2 часа назад, Yoda сказал:

И что касается темы в целом. Попытка вот здесь сэкономить - это экономия на спичках.

От того что на 100к товаров разбирается кеш сеопро. будет он 200 или 220 мс парсится в объект - ничего не поменяется, а особенно если ссылки с полным путем категорий, где cache->set cache->set  cache->set  и так 150 раз. 

Всё верно... я и написал что кеш product.seopath не нужен, а category.seopath можно извлечь из БД одним запросом и положить в кеш на долго... тогда cache->set cache->set  cache->set не будет

Share this post


Link to post
Share on other sites
19 минут назад, Yesvik сказал:

Всё верно... я и написал что кеш product.seopath не нужен, а category.seopath можно извлечь из БД одним запросом и положить в кеш на долго... тогда cache->set cache->set  cache->set не будет

Да можно и так, только кеш надо переделать в формате

 

private $cache_data = [];

__desctruct {

public function set($key, $data) {

   $cache_data[$key] = $data;

}

 

  foreach($cache_data as $item) {

   store($item......);

  }

}

 

Будет небольшой оверхед по памяти, но не будет фризов файловой системы в моменте $cache->set

Share this post


Link to post
Share on other sites
19 часов назад, Yesvik сказал:

 


1000 итераций
PHP: 0.59930419921875 сек.
JSON:0.61789894104004 сек.
INI: 0.6460587978363 сек.

В прикреплённом архиве файлы для самостоятельного тестирования.

Тестируй и удивляйся...


$max_index = 1000;
echo "<pre>1000 итераций\n";

Timer::start();
for ($index = 0; $index < $max_index; $index++) {
	include 'cache.php';
}
echo "PHP: ", Timer::finish(), " сек.\n";

Timer::start();
for ($index = 0; $index < $max_index; $index++) {
	$cache = json_decode(file_get_contents('cache.json'));
}
echo "JSON:", Timer::finish(), " сек.\n";

Timer::start();
for ($index = 0; $index < $max_index; $index++) {
	$cache = parse_ini_file('cache.ini', true);;
}
echo "INI: ", Timer::finish(), " сек.\n";

 

test.zip 17 \u043a\u0411 · 2 downloads

У меня цифры совершенно другие получаются

Running 5 tests, 5000 times each...
The 500 highest and lowest results will be disregarded.

Results:
Test Name                	Time                	+ Interval          	Change
json_array               	0.0004603884        	+0.0000000000       	baseline
json                     	0.0005063044        	+0.0000459161       	10% slower
ini_section              	0.0006743823        	+0.0002139940       	46% slower
ini                      	0.0006866876        	+0.0002262992       	49% slower
php                      	0.0008403621        	+0.0003799737       	83% slower

Но я только сейчас вспомнил, почему ini у меня было лучше php. ini - как не парадоксально, потребляет меньше памяти чем include php.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.