Changeset 345


Ignore:
Timestamp:
04/07/10 16:17:28 (9 years ago)
Author:
sander
Message:

Switch from Containable to raw SQL in inner loop for 6x performance improvement

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/server/www/app/models/gallery.php

    r341 r345  
    262262        { 
    263263                // Get the gallery 
     264                $prof_start = microtime(true); 
    264265                $gallery = $this->find('first', array( 
    265266                        'conditions' => array('Gallery.id' => $id), 
     
    280281                                'Request.Job.Platform', 
    281282                                'Request.Job.Result', 
    282                                 'Request.Job.Result.Validator', 
     283                                'Request.Job.Result.Validator' => array( 
     284                                        'fields' => array('id', 'parent_id', 'name', 'state'), 
     285                                        'order' => 'Validator.name ASC', 
     286                                ), 
    283287                        ), 
    284288                )); 
     
    301305                foreach ($children as &$child) { 
    302306                        foreach ($child['Request'] as &$request) { 
     307 
    303308                                $request['Validator'] = $this->Request->Validator->find('all', array( 
    304309                                        'fields'     => array('id', 'parent_id', 'name', 'state'), 
     
    309314 
    310315                                if (!$abbreviate) { 
    311                                         $request['Job'] = $this->Request->Job->find('all', array( 
    312                                                 'conditions' => array('Job.request_id' => $request['id']), 
    313                                                 'contain' => array( 
    314                                                         'Application', 
    315                                                         'Format', 
    316                                                         'Platform', 
    317                                                         'Result', 
    318                                                         'Result.Validator' 
    319                                                 ), 
    320                                                 'order' => array( 
    321                                                         'Application.name ASC', 
    322                                                         'Job.version ASC', 
    323                                                         'Platform.name ASC', 
    324                                                         'Format.name ASC', 
    325                                                 ), 
    326                                         )); 
     316                                        $request['Job'] = $this->Request->Job->query("SELECT 
     317                                                        `Job`.`id`, 
     318                                                        `Job`.`request_id`, 
     319                                                        `Job`.`platform_id`, 
     320                                                        `Job`.`application_id`, 
     321                                                        `Job`.`version`, 
     322                                                        `Job`.`format_id`, 
     323                                                        `Job`.`result_id`, 
     324                                                        `Job`.`locked`, 
     325                                                        `Platform`.`id`, 
     326                                                        `Platform`.`name`, 
     327                                                        `Application`.`id`, 
     328                                                        `Application`.`name`, 
     329                                                        `Result`.`id`, 
     330                                                        `Result`.`state`, 
     331                                                        `Result`.`state_info`, 
     332                                                        `Result`.`verified`, 
     333                                                        `Result`.`created`, 
     334                                                        `Format`.`id`, 
     335                                                        `Format`.`name`, 
     336                                                        `Format`.`icon`, 
     337                                                        `Format`.`code` 
     338                                                FROM `jobs` AS `Job` 
     339                                                        LEFT JOIN `platforms` AS `Platform` ON (`Job`.`platform_id` = `Platform`.`id`) 
     340                                                        LEFT JOIN `applications` AS `Application` ON (`Job`.`application_id` = `Application`.`id`) 
     341                                                        LEFT JOIN `results` AS `Result` ON (`Job`.`result_id` = `Result`.`id`) 
     342                                                        LEFT JOIN `formats` AS `Format` ON (`Job`.`format_id` = `Format`.`id`) 
     343                                                WHERE `Job`.`request_id` = '" . $request['id'] . "' 
     344                                                ORDER BY 
     345                                                        `Application`.`name` ASC, 
     346                                                        `Job`.`version` ASC, 
     347                                                        `Platform`.`name` ASC, 
     348                                                        `Format`.`name` ASC"); 
    327349 
    328350                                        // Fix array layout to match a regular query layout 
     
    332354                                                } 
    333355                                                unset($job['Job']); 
     356 
     357                                                if (!isset($job['Result']['id']) || !$job['Result']['id']) { 
     358                                                        continue; 
     359                                                } 
     360 
     361                                                $job['Result']['Validator'] = $this->Request->Validator->find('all', array( 
     362                                                        'fields'     => array('id', 'parent_id', 'name', 'state'), 
     363                                                        'conditions' => array('Validator.parent_id' => $job['Result']['id']), 
     364                                                        'order'      => 'Validator.name ASC', 
     365                                                        'recursive'  => -1, 
     366                                                )); 
    334367                                        } 
    335368                                        unset($job); 
     
    385418                array_pop($path); 
    386419 
     420                $this->log(sprintf('Gallery %s: generated viewData in %f seconds', $id, microtime(true) - $prof_start), LOG_DEBUG); 
    387421                return compact('gallery', 'applications', 'path', 'abbreviate', 'isTestsuite'); 
    388422        } 
Note: See TracChangeset for help on using the changeset viewer.