Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Joomido Supertools Pack #1(3)


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%.

 

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах

5 минут назад, chukcha сказал:

 

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

 

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

 

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах

2 часа назад, Yoda сказал:

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

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

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

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах


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.

 

Надіслати
Поділитися на інших сайтах

  • 2 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.