"PHP" / Говнокод #5984 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
$properties_array = array_keys($this->values);
            array_unshift($properties_array, $properties_array[0]);
            unset($properties_array[0]);
            $properties_values_array = array_values($properties_array);
            $values_array = array_values($this->values);
            $properties = implode('` ,`', $properties_values_array);
            $values = implode(', ', array_fill(0, count($this->values), '?'));
            $result = self::$orm->db->prepare('INSERT INTO `' . $this->table . '`  (`' . $properties . '`) values (' . $values . ')');
            foreach ($values_array as $key => $value) {
                $fieldinfo = $this->fields[$properties_values_array[$key]];
                $result->bindParam($key + 1, $values_array[$key], $this->correctDataType($fieldinfo['native_type'], $fieldinfo['pdo_type']), $fieldinfo['len']);
            }
            $result->execute();

Чувствую код плохо пахнет, надо разбирать)) Высоко нагруженный проект ;)

Запостил: PANACEA PANACEA, (Updated )

Комментарии (7) RSS

  • Исправленный вариант:
    $properties = array_keys($this->values);
                $keys = implode('`, `', $properties);
                $params = implode(', :', $properties);
                $result = self::$orm->db->prepare('INSERT INTO `' . $this->table . '` (`' . $keys . '`) VALUES (:' . $params . ');');
    
                foreach ($this->values as $property => &$value) {
                    $fieldinfo = $this->fields[$property];
                    $result->bindParam(':' . $property, $value, $this->correctDataType($fieldinfo['native_type'], $fieldinfo['pdo_type']), $fieldinfo['len']);
                }
                $result->execute();
    Ответить
  • Микрооптимизации вроде улучшения работы с массивами обычно дают небольшой эффект. Категорически не советую браться за оптимизацию нахрапом, не выполнив предварительного анализа и не выявив на практике, что, где и насколько тормозит, иначе влёгкую может оказаться, что вы тратите силы не на то.
    Ответить
  • Данная оптимизация дала возможность сократить значительную часть кода и повысить читабельность, что считаю наиболее важным, так же сократить время выполнения на 1 сотую секунды в номинальном коде, если учесть что данный код взят из базавого класса модели, то оптимизация оправдана.
    Ответить
    • При оптимизации под высокую нагрузку наиболее важным является снижение этой самой нагрузки, а повышение читабельности или качества кода - вторично. Поставьте проект на сутки профилироваться XDebug'ом, соберите и проанализируйте лог SQL-запросов и выявите топовые, возьмите суточный access-лог и выявите наиболее нагруженные контроллеры. Что самое тяжёлое, то причёсываем в первую очередь - эффект проявится незамедлительно, а это самое главное, когда сервер гнётся и на днях обещает упасть окончательно. Сэкономите и время, и силы. Уже потом имеет смысл браться за причёсывание остального.
      Ответить
  • Прошу прощения, не совсем корректно выразился вначале, первоочередная задача стояла не разгрузить ресурсы сервера, а повысить отзывчивость скрипта. Скрипт используется для отдачи данных на сайты клиентов во встраиваемые в сайт модули. Профилировщиком пока не ходил, когда будет более цельная система обязательно пройду, но на данном этапе так уж вышло что кусок кода был быстрокодом написанным под ночь в последние минуты из-за чего всю ночь мучили плохие сновидения, чтобы спать спокойно решил код переделать 😉
    За советы огромное спасибо!
    Ответить
  • Польщен, раз кусок кода который кажется мне говном для вас приемлем)))
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8