1. PHP / Говнокод #17296

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    foreach($this->_logs as $log)
    {
        if($log[1]!==CLogger::LEVEL_PROFILE)
            continue;
        list($message,$level,$category,$timestamp)=$log;
        if(!strncasecmp($message,'begin:',6))
        {
            $log[0]=substr($message,6);
            $stack[]=$log;
        }
        elseif(!strncasecmp($message,'end:',4))
        {
            $token=substr($message,4);
            if(($last=array_pop($stack))!==null && $last[0]===$token)
            {
                $delta=$log[3]-$last[3];
                $this->_timings[]=array($message,$category,$delta);
            }
            else
                throw new CException(Yii::t('yii','CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
                    array('{token}'=>$token)));
        }
    }

    Yii 1, реализация профайлинга через лог (ну потому что есть же лог, зачем еще сущности плодить, классы же долго грузятся, а у нас самый лайтвейт фреймворк). Чтобы уж точно наверняка, код дублируется в CProfileLogRoute.

    https://github.com/yiisoft/yii/blob/11c3010a82ce2c25332baacce568ff89e451896a/framework/logging/CLogger.php#L294
    https://github.com/yiisoft/yii/blob/11c3010a82ce2c25332baacce568ff89e451896a/framework/logging/CProfileLogRoute.php#L137

    Запостил: Fike, 11 Декабря 2014

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

    • блядь
      у них и во второй версии то же самое
      статичный суперкласс (привет, любители изолированного тестирования! не хотите ли соснуть свежих хуйцов и запускать каждый тест в отдельном процессе?) берет на себя функции профилирования (https://github.com/yiisoft/yii2/blob/39714b890da3bb4483a0c73c0264e183ceb03146/framework/BaseYii.php#L444), получает откуда-то логгер (https://github.com/yiisoft/yii2/blob/39714b890da3bb4483a0c73c0264e183ceb03146/framework/BaseYii.php#L359, lazyload на уровне), который все так же перебирает записи (https://github.com/yiisoft/yii2/blob/39714b890da3bb4483a0c73c0264e183ceb03146/framework/log/Logger.php#L263). замечательное нововведение - отказ от строгого нестинга повлечет за собой просто игнорирование записи, а не эксепшен

      скажите, а вторая версия этого великолепия - это просто первая, по которой прошелся php-cs-fixer?

      p.s. отдельный охуенчик - вот этот метод https://github.com/yiisoft/yii2/blob/39714b890da3bb4483a0c73c0264e183ceb03146/framework/log/Logger.php#L181
      Ответить
    • какой язык такой и фреймворк
      Ответить
      • Какова прослойка между креслом и монитором - таков и код.
        Ответить
        • Ну очевидно что пхп в качестве языка выбирает лишь очень посредставенная прослойка
          Ответить
      • Yii это говнофреймворк для настоящих похапешников, чтобы они чувствовали себя в своей тарелке.
        Есть и нормальные фреймворки на пхп, но у настоящих пхпшников с ними работать не получается, слишком сложно.
        Ответить

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