Survey NYTProf performance improvements

initSurveyOrder now builds a lookup cache to speed up branching
Test suite caches surveyOrder and response itself
Unnecessary sub calls reduced
Updated tests
My largest survey instance test suite, which contains > 1000 tests,
now runs nearly 8 times faster.
This commit is contained in:
Patrick Donelan 2009-05-28 07:24:11 +00:00
parent d14cf19e9d
commit beff1d2166
5 changed files with 134 additions and 166 deletions

View file

@ -2728,6 +2728,15 @@ sub www_runTests {
return $self->session->privilege->insufficient()
unless $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
# Manage response ourselves rather than doing it over and over per-test
$self->session->db->write( 'delete from Survey_response where assetId = ? and userId = ?',
[ $self->getId, $self->session->user->userId() ] );
my $responseId = $self->responseId($self->session->user->userId)
or return $self->www_editTestSuite('Unable to start survey response');
# Also initSurveyOrder ourselves once, and then preserve, rather than re-loading
$self->responseJSON->initSurveyOrder;
my $all = WebGUI::Asset::Wobject::Survey::Test->getAllIterator($session, { sequenceKeyValue => $self->getId } );
# Expose TAP::Parser::Aggregate info as template variables
@ -2744,7 +2753,8 @@ sub www_runTests {
$aggregate->start;
while (my $test = $all->()) {
my $result = $test->run or return $self->www_editTestSuite('Unable to run test: ' . $test->getId);
my $result = $test->run( { responseId => $responseId })
or return $self->www_editTestSuite('Unable to run test: ' . $test->getId);
my $tap = $result->{tap} or return $self->www_editTestSuite('Unable to determine test result: ' . $test->getId);
my $name = $test->get('name') || "Unnamed";
my $parsed = $self->parseTap($tap);