Jump to content

Советы по оптимизации VaM Shop


Recommended Posts

  • Replies 225
  • Created
  • Last Reply

Top Posters In This Topic

  • support

    98

  • Makdak

    9

  • sv

    8

  • lodos

    8

Top Posters In This Topic

Popular Posts

VaM Shop является универсальными решением и наблюдая за пользователями магазина, какие возможности магазина используются, есть мнение, что всеми возможностями движка не пользуется практически никто.

Posted Images

Ещё можно в /includes/classes/product.php поменять:


function buildDataArray(&$array,$image='thumbnail') {
global $vamPrice,$main;

$tax_rate = $vamPrice->TAX[$array['products_tax_class_id']];

$products_price = $vamPrice->GetPrice($array['products_id'], $format = true, 1, $array['products_tax_class_id'], $array['products_price'], 1);

if ($_SESSION['customers_status']['customers_status_show_price'] != '0') {
if ($_SESSION['customers_status']['customers_fsk18'] == '1') {
if ($array['products_fsk18'] == '0') {
$buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
$buy_now_new = $this->getBuyNowButtonNew($array['products_id'], $array['products_name']);
}
} else {
$buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
$buy_now_new = $this->getBuyNowButtonNew($array['products_id'], $array['products_name']);
}
  }


$shipping_status_name = $main->getShippingStatusName($array['products_shippingtime']);
$shipping_status_image = $main->getShippingStatusImage($array['products_shippingtime']);


return array ('PRODUCTS_NAME' => $array['products_name'],
      'PRODUCTS_MODEL'=>$array['products_model'],
      'PRODUCTS_QUANTITY'=>$array['products_quantity'],
'COUNT'=>$array['ID'],
'PRODUCTS_ID'=>$array['products_id'],
'PRODUCTS_VPE' => $this->getVPEtext($array, $products_price['plain']),
'PRODUCTS_IMAGE' => $this->productImage($array['products_image'], $image),
'PRODUCTS_LINK' => vam_href_link(FILENAME_PRODUCT_INFO, vam_product_link($array['products_id'], $array['products_name'])),
'PRODUCTS_PRICE' => $products_price['formated'],
'PRODUCTS_PRICE_PLAIN' => $products_price['plain'],
'PRODUCTS_TAX_INFO' => $main->getTaxInfo($tax_rate),
'PRODUCTS_SHIPPING_LINK' => $main->getShippingLink(),
'PRODUCTS_BUTTON_BUY_NOW' => $buy_now,
'PRODUCTS_BUTTON_BUY_NOW_NEW' => $buy_now_new,
'PRODUCTS_SHIPPING_NAME'=>$shipping_status_name,
'PRODUCTS_SHIPPING_IMAGE'=>$shipping_status_image,
'PRODUCTS_DESCRIPTION' => $array['products_description'],
'PRODUCTS_EXPIRES' => $array['expires_date'],
'PRODUCTS_CATEGORY_URL'=>$array['cat_url'],
'PRODUCTS_SHORT_DESCRIPTION' => $array['products_short_description'],
'PRODUCTS_FSK18' => $array['products_fsk18']);


}
[/code] на:
[code]
function buildDataArray(&$array,$image='thumbnail') {
global $vamPrice,$main;

if ($_SESSION['customers_status']['customers_status_show_price'] != '0') {
if ($_SESSION['customers_status']['customers_fsk18'] == '1') {
if ($array['products_fsk18'] == '0') {
$buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
$buy_now_new = $this->getBuyNowButtonNew($array['products_id'], $array['products_name']);
}
} else {
$buy_now = $this->getBuyNowButton($array['products_id'], $array['products_name']);
$buy_now_new = $this->getBuyNowButtonNew($array['products_id'], $array['products_name']);
}
  }


$shipping_status_name = $main->getShippingStatusName($array['products_shippingtime']);
$shipping_status_image = $main->getShippingStatusImage($array['products_shippingtime']);


return array ('PRODUCTS_NAME' => $array['products_name'],
      'PRODUCTS_MODEL'=>$array['products_model'],
      'PRODUCTS_QUANTITY'=>$array['products_quantity'],
'COUNT'=>$array['ID'],
'PRODUCTS_ID'=>$array['products_id'],
'PRODUCTS_VPE' => $this->getVPEtext($array, $products_price['plain']),
'PRODUCTS_IMAGE' => $this->productImage($array['products_image'], $image),
'PRODUCTS_LINK' => vam_href_link(FILENAME_PRODUCT_INFO, vam_product_link($array['products_id'], $array['products_name'])),
'PRODUCTS_PRICE' => number_format($array['products_price']),
'PRODUCTS_PRICE_PLAIN' => $products_price['plain'],
'PRODUCTS_TAX_INFO' => $main->getTaxInfo($tax_rate),
'PRODUCTS_SHIPPING_LINK' => $main->getShippingLink(),
'PRODUCTS_BUTTON_BUY_NOW' => $buy_now,
'PRODUCTS_BUTTON_BUY_NOW_NEW' => $buy_now_new,
'PRODUCTS_SHIPPING_NAME'=>$shipping_status_name,
'PRODUCTS_SHIPPING_IMAGE'=>$shipping_status_image,
'PRODUCTS_DESCRIPTION' => $array['products_description'],
'PRODUCTS_EXPIRES' => $array['expires_date'],
'PRODUCTS_CATEGORY_URL'=>$array['cat_url'],
'PRODUCTS_SHORT_DESCRIPTION' => $array['products_short_description'],
'PRODUCTS_FSK18' => $array['products_fsk18']);


}

У меня например после применения всех советов из темы + включение sql кэша + отключения всех боксов кроме разделов получаются на главной странице магазаина такие результаты:

Время генерации: 0.06 сек.

Количество запросов: 3.

Вот например скриншот карточки товара.

Правда на странице карточки товара данные такие:

Время генерации: 0.066 сек.

Количество запросов: 4.

Самое интересное, что вобщем-то весь функционал сохраняется магазина, кроме расчёта скидок, менеджера баннеров, кто в онлайне.

Так что для тех, кому не повезло с хостером можно довольно прилично ускорить магазин.

post-1-1304838320,1781_thumb.png

Link to post
Share on other sites

А что изменится в функционале? после замены этой?

И еще. по прошлой замене в product.php:

"я пробовал вносить изменения и в product.php  Но с этим вообще что-то не то... Что-то происходит с ценами.. То есть после того как переправляешь product.php, то на страницах где выводятся карточки товаров - цены сокращаются до 1-й цифры... При этом если войти уже в карточку товара, то там цены выводятся нормальные..."

Link to post
Share on other sites

Makdak

Не будет разного рода скидок: персональные скидки, скидки групп, скидки от количества.

Не будет баннеров из менеджера баннеров в админке, можно использовать любой внешний менеджер баннеров.

Не будет работать модуль кто в онлайне, опять же, не особо нужный интрумент, учитывая, что есть Google Analytics например.

Не будет мультивалютности, т.е. пересчёта цен из одной валюты в другую по курсу, но это и не нужно, если у Вас в магазине одна валюта.

Не будет учёта налогов, так же не всем нужна такая возможности.

Вобщем-то, судя по моим наблюдениям, эти возможности и так используют не так и часто, т.е. для многих эта тема  с советами будет интересной, особенно если хостер Ваш не особо быстрый.

Попробуйте ещё раз перечитать советы, я там немного исправлений вносил, всё должно выводиться нормально, но только без символа валюты, т.е. если по умолчанию например 11 руб., будет 11.0000, примерно так.

Link to post
Share on other sites

)) спасибо за пояснения :) Я правда имел в виду - что изменится после последней замены))

Link to post
Share on other sites

Вот скрин главной страницы:

Время генерации: 0.066 сек.

Количество запросов: 3.

post-1-1304838320,4392_thumb.png

Link to post
Share on other sites

Makdak

Не будет расчёта скидок и не будет форматирования цены, просто плоское число будет выводиться.

Link to post
Share on other sites

Makdak

Не будет расчёта скидок и не будет форматирования цены, просто плоское число будет выводиться.

Да)) уже проверил :) так и есть. Но все таки вернул на место. Как-то не очень - куча нулей))

У меня получается без изменения product.php  примерно так:  Время генерации:  0.889, запросов: 57

Link to post
Share on other sites

Я чуть поправил сообщение, теперь не будет нулей, будет просто цифра.

Для этого в /includes/classes/product.php нужно поменять:


'PRODUCTS_PRICE' => $array['products_price'],
[/code] на:
[code]
'PRODUCTS_PRICE' => number_format($array['products_price']),

Это не так и плохо.

Все эти советы в основном для крупных магазинов и для медленных хостеров.

У Вас и так всё довольно неплохо.

Link to post
Share on other sites

Я извиняюсь за такой пулемет вопросов... но они возникают)).

Вот только что сделал статическим меню. Но кол-во запросов не изменилось... может я как-то не так что-то делал? Я прост из шаблона убрал метку вызова меню -  {$box_CATEGORIES}

и вставил на ее место просто статическое меню.

Или не так надо делать?

Link to post
Share on other sites

Убрав метку из шаблона Вы не убираете подключение php файла.

Боксы нужно отключать в Админке - Настройки - Боксы, а не убирать метку в шаблоне, тогда именно файл не будет подключаться.

Link to post
Share on other sites

Понял спасибо. отключил бокс, 7 запросов убавилось...

Хм... А как же этот файл тогда подключается, если я его не вызываю меткой...? Я думал что если метки нету, значит и файл не будет подключаться...

Link to post
Share on other sites

Makdak

Нет, метку убрать недостаточно.

У Вас итак довольно быстро, меньше секунды.

Link to post
Share on other sites

Что б страницы быстрее отдавались можно ещё gzip включить в Админке - Настройки - Gzip

Link to post
Share on other sites

Хм... А как же этот файл тогда подключается, если я его не вызываю меткой...? Я думал что если метки нету, значит и файл не будет подключаться...

Именно так и должен думать обычный пользователь. Именно так он обычно и думает. Поскольку один из общих принципов работы с компьютерной информацией - данные должны вводиться только один раз. И цитированную фразу надо бы понимать как деликатный намек на то, что надо бы разработчикам исправить ситуацию.

Link to post
Share on other sites

1. В реализации не особо сложно.

2. Вы б на реализацию потратили меньше времени, чем на многочисленные подобные ответы в форуме.

3. Даст конечному простому пользователю упрощение администрирования. Давать советы типа - вставьте в код скрипта - не самый лучший вариант. Для того шаблоны и придуманы, чтобы этого избежать.

4. Даст улучшение  быстродействия. Особенно если несколько шаблонов, и в каждом свой набор боксов.

5. Покажет пользователю, что тут не только дают ответы на простые вопросы, но улучшают систему каждодневно, что не замедлит сказаться на количестве продаж и не придется раскрутку заказывать.

Link to post
Share on other sites

А никто особо и не спорит, ясное дело, что так было бы идеально.

Хотя вобщем-то и сделано через Админку - Настройки - Боксы, проще ведь там отключать, чем лазить по файлам, удалять метки.

Но я например не знаю, как в php можно будет узнать, что в смарти шаблоне убрали какую-то метку?!

Соответственно, тогда не подключать php файл.

Link to post
Share on other sites

Но я например не знаю, как в php можно будет узнать, что в смарти шаблоне убрали какую-то метку?!

Соответственно, тогда не подключать php файл.

Прочесть текст шаблона и проанализировать его.

Link to post
Share on other sites

1. В реализации не особо сложно.

2. Вы б на реализацию потратили меньше времени, чем на многочисленные подобные ответы в форуме.

3. Даст конечному простому пользователю упрощение администрирования. Давать советы типа - вставьте в код скрипта - не самый лучший вариант. Для того шаблоны и придуманы, чтобы этого избежать.

4. Даст улучшение  быстродействия. Особенно если несколько шаблонов, и в каждом свой набор боксов.

5. Покажет пользователю, что тут не только дают ответы на простые вопросы, но улучшают систему каждодневно, что не замедлит сказаться на количестве продаж и не придется раскрутку заказывать.

так всеж просто

делаешь свой fork

и туда добавляешь что хочешь

Link to post
Share on other sites

Заметил, что сайт грузит еще и бокс админки, особенно запрос:

$orders_status_query = vam_db_query("select orders_status_name, orders_status_id from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$_SESSION['languages_id'] . "'");
  while ($orders_status = vam_db_fetch_array($orders_status_query)) {
    $orders_pending_query = vam_db_query("select count(*) as count from " . TABLE_ORDERS . " where orders_status = '" . $orders_status['orders_status_id'] . "'");
    $orders_pending = vam_db_fetch_array($orders_pending_query);
    $orders_contents .= '<a href="' . vam_href_link_admin(FILENAME_ORDERS, 'selected_box=customers&amp;status=' . $orders_status['orders_status_id'], 'SSL') . '">' . $orders_status['orders_status_name'] . '</a>: ' . $orders_pending['count'] . '<br />';
  }
  $orders_contents = substr($orders_contents, 0, -6);[/code]

С ним на сервере

Parse time: 7.607, queries: 62

Без него

Parse time: 0.969, queries: 52

Как оптимизировать?

Link to post
Share on other sites

Проблема частично решается индексированием поля orders_status таблицы orders

Parse time: 1.213, queries: 63

Link to post
Share on other sites

А сколько у Вас заказов, что так медленно?!

Тут вобщем-то особо страшного нет ничего, всё-таки бокс админ не выводится обычным посетителям.

Link to post
Share on other sites

×
×
  • Create New...