Baco Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Доброго времени, дамы и господа, предлагаю в данной теме обсуждать и принимать на заметку при создании новой версии сборки, так как код, из самого ОС не совсем грамотно написанный и иногда "экономия на подзапросе" в итоге может дать свои , хоть и маленькие, но миллисекунды в приросте... Создание темы навеяно холиваром из темы, где продается решение, в принципе простое, но столь же эффективное... Менее с тем, итак, заметка от Chukcha №1: catalog\model\localisation\language.php в методе getLanguages нет условия по выборке языка со статусом "вкл"|1|true... тоесть, в сам кеш, добавляеться весь массив языков и лишь в контроллере идёт перебор по условию типа: if ($result['status']) { но в самом файле кеша сидит "мёртвый язык"... В итоге, имеет несколько вкладок в админке с включенными "мёртвыми" вкладками... Ваши идеи господа !? 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 https://opencartforum.com/topic/42482-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-localisationlanguagephp/ :) Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Решение справедливо при условии, что так же будет исправленно в: admin/model/localisation/language.php Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Там-то как раз с этим все в порядке... Смотри if ($data) { } else{ вот здесь } Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Всё же в админке, я бы в 310 строке заменил на: $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = 1 ORDER BY sort_order, name"); так и спокойней и правильней и в кеш ниче не полезет ненужного... а то ведь смотри как в статьи идёт выборка в контроллере: $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); тоесть тут параметр $data = array() ... В итоге, имеет вкладки из "мёртвых языков"... Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 https://opencartforum.com/topic/42482-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-localisationlanguagephp/ :) Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Решение справедливо при условии, что так же будет исправленно в: admin/model/localisation/language.php Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Там-то как раз с этим все в порядке... Смотри if ($data) { } else{ вот здесь } Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Всё же в админке, я бы в 310 строке заменил на: $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = 1 ORDER BY sort_order, name"); так и спокойней и правильней и в кеш ниче не полезет ненужного... а то ведь смотри как в статьи идёт выборка в контроллере: $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); тоесть тут параметр $data = array() ... В итоге, имеет вкладки из "мёртвых языков"... Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Решение справедливо при условии, что так же будет исправленно в: admin/model/localisation/language.php Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Там-то как раз с этим все в порядке... Смотри if ($data) { } else{ вот здесь } Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Всё же в админке, я бы в 310 строке заменил на: $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = 1 ORDER BY sort_order, name"); так и спокойней и правильней и в кеш ниче не полезет ненужного... а то ведь смотри как в статьи идёт выборка в контроллере: $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); тоесть тут параметр $data = array() ... В итоге, имеет вкладки из "мёртвых языков"... Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Там-то как раз с этим все в порядке... Смотри if ($data) { } else{ вот здесь } Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Всё же в админке, я бы в 310 строке заменил на: $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = 1 ORDER BY sort_order, name"); так и спокойней и правильней и в кеш ниче не полезет ненужного... а то ведь смотри как в статьи идёт выборка в контроллере: $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); тоесть тут параметр $data = array() ... В итоге, имеет вкладки из "мёртвых языков"... Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Всё же в админке, я бы в 310 строке заменил на: $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = 1 ORDER BY sort_order, name"); так и спокойней и правильней и в кеш ниче не полезет ненужного... а то ведь смотри как в статьи идёт выборка в контроллере: $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); тоесть тут параметр $data = array() ... В итоге, имеет вкладки из "мёртвых языков"... Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 У меня это не 310 строка. public function getLanguages($data = array()) { if ($data) { $sql = "SELECT * FROM " . DB_PREFIX . "language"; $sort_data = array( 'name', 'code', 'sort_order' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { $sql .= " ORDER BY " . $data['sort']; } else { $sql .= " ORDER BY sort_order, name"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC"; } else { $sql .= " ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $query = $this->db->query($sql); return $query->rows; } else { $language_data = $this->cache->get('language'); if (!$language_data) { $language_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name"); foreach ($query->rows as $result) { $language_data[$result['code']] = array( 'language_id' => $result['language_id'], 'name' => $result['name'], 'code' => $result['code'], 'locale' => $result['locale'], 'image' => $result['image'], 'directory' => $result['directory'], 'filename' => $result['filename'], 'sort_order' => $result['sort_order'], 'status' => $result['status'] ); } $this->cache->set('language', $language_data); } return $language_data; } } А точнее public function getLanguages($data = array()) { if ($data) { Если хоть что-то есть в массиве. } else{ Даже если массив пустой } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В controller/ /information $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); Т.е. $data будет пустым массивом Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Значит, 310 это у меня в бро смещено, это как раз строка с выборкой... то кстати там, если $data = array() тогда идет, исходя из нумерации твоей строки, то: 289... а там, как видим, проверка на файл кеша и т.д... в общем поправлено в запросе самом, остальное думаю трогать не стоит. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ну... тема создана на выявление и устранение таких вот мелких косяков и... доведения кода до состояния совершенства - вот цель топика. P.S. Косяк с language - это не однократный момент рассмотрения в данной теме, позже будем добавлять по мере выявления другие недостатки и методы их устранения, а так же надеемся на активное участие сообщества, с целью совершенствования продукта. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Долго думал if ($store_query->num_rows) { $config->set('config_store_id', $store_query->row['store_id']); } else { $config->set('config_store_id', 0); } // Settings $query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC"); Тайный смысл в 62-й строке store_id = '0' Или подразумевается, что могут быть общие настройки у магазинов? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 index.php Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id в 99.7 % магазинов store_id == 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Во многих модулях настройки не привязаны к store_id Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 Или подразумевается, что могут быть общие настройки у магазинов? Да, по умолчанию, в коробочном варианте, настройки используются как общие, хотя магазин всего один. А вот если магазинов 1+, можно добавить настройки, специфичные для каждого магазина, не отказываясь от использования стандартных. ИМХО Надіслати Поділитися на інших сайтах More sharing options...
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store Слава, сперва: $config->set( а потом, чуть ниже: $config->get( Смысл в проверке таблицы с мультиками, если они есть, то соотв в индексе и делать выборку по указанным настройкам. Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? Надіслати Поділитися на інших сайтах More sharing options...
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 BTW, здесь есть перспектива для мелкой оптимизации: OR store_id = '" . (int)$config->get('config_store_id') вставлять в запрос, только если $config->get('config_store_id')!= 0 Зачем выбирать мультики, если их в 99,7% случаев нет? В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 В том то и суть... а теперь если посмотреть более глобально, на запросы типа: LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) то возникает резонный вопрос: "Нахера здесь вообще category_to_store и обращение к ней а потом ещё и условие типа: AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Есть идеи ? А это как раз в угоду тем 0,3% с мультиками. Их ведь тоже со счетов сбрасывать нельзя. И оптимизировать так же: включать или не включать в строку sql ту или иную конструкцию. Только вот стоит ли экономить на спичках? Выигрыш - миллисекунды, а код усложнится изрядно. По уму, надо бы иметь две версии моделей, для немультиков и мультиков, и выбирать загрузку с учетом store_id != 0 Надіслати Поділитися на інших сайтах More sharing options...
Baco Опубліковано: 4 січня 2015 Автор Share Опубліковано: 4 січня 2015 Ребяты, вы чего, SQL забыли? Это же выбор категорий, привязанных к текущему магазину store_id. так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options... sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
igon Опубліковано: 4 січня 2015 Share Опубліковано: 4 січня 2015 так в том то и суть, что в 99 % магазинов эти таблицы - не затрагиваются вообще, только в корне прописалось и всё, потом просто гоняются в порожняке запросы... зачем если априори store_id == 0 ? Мультимагазинность требует жертв :) Надіслати Поділитися на інших сайтах More sharing options...
sv2109 Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Что это меняет? Я, действительно, понять не могу. настройки берутся из get->config Причем здесь id_store OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. Надіслати Поділитися на інших сайтах More sharing options... Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам... Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
Baco Опубліковано: 5 січня 2015 Автор Share Опубліковано: 5 січня 2015 OpenCart - это мультимагазинный движок, для разных магазинов можно указывать разные настройки, добавлять разные товары и категории. Поэтому в индексе получаем идентификатор магазина, для которого загружается конфиг и все, все, все. Чтобы убрать мультимагазины нужно переписать половину запросов в движке и в результате получим экономию в 50 милисекунд.. + если перебрать некоторые "тяжолые" запросы, которые регулярно выполняются но в них есть ненужные подзапросы, то так же пару миллисекунд получить можно, а в сумме - небольшой прирост, а если поставить это всё на кеширование... Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Основний Пропозиції та побажання Улучшения сборки по мелочам...
Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 У меня например время генерации страницы около 0,4 сек. И профайлер говорит что 12% времени съедается на file_exist (мускуль ест крохи). А 50% времени - getChild. Вариант оптимизации этого есть? Надіслати Поділитися на інших сайтах More sharing options... igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options... Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Нужен человек, который бы помагал Автор: Juuuice, 8 жовтня 2013 доработки модули (і ще %d) Теги: доработки модули расширения программирование натсорйка улучшения 2 відповіді 1 230 переглядів ravilr 8 жовтня 2013 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
igon Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Для file_exist: Занесите пути и имена всех существующих файлов в таблицу и запрашивайте мускуль. Вернул строку - файл есть, пустой результат - файла нет. Но обслуживание такого подхода может съесть всю экономию, если таковая будет Надіслати Поділитися на інших сайтах More sharing options...
Vladzimir Опубліковано: 5 січня 2015 Share Опубліковано: 5 січня 2015 Согласитесь, но это костыль. Должно же быть нативное решение. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts