Den Magento Profiler einsetzen & optimieren

Ich bin auf einen Beitrag über den Magento-Pofiler gestoßen, den ich Euch nicht vorenthalten möchte.
Quelle: ActiveCodeline
Gerade während der Entwicklung eines Magento-Stores, oder während der Lernphase, gewinnt man damit interessante Erkenntnisse. Um den Profiler verwenden zu können, muss dieser zuerst aktiviert werden. Dazu gehen Sie in das Magento Backend unter System->Konfiguration->Entwickleroptionen->Debug. Wählen Sie die Store-View aus und setzen Sie den Wert Profiler auf Ja. Als nächstes müssen Sie in der index.php von magento den Kommentar aus Zeile 58 entfernen (
Varien_Profiler::enable();).
Wenn Sie nun die Website Ihres Shops aktualisiert haben, erscheinen nach der Fußzeile zusätzliche informationen. Durch anpassen der folgenden zwei Dateien können wir den Profiler um die Anzeige der ausgeführten SQL-Befehle erweitern.
1. Datei app/code/core/Mage/Core/Model/Resource.php
Suchen Sie in der Funktion getConnection nach der Zeile $conn = $typeInstance->getConnection($connConfig); und fügen Sie folgenden Code ein:
/** START Custom added, not part of the core MAGE */ $conn->getProfiler()->setEnabled(true); /** END Custom added, not part of the core MAGE */
2. Datei lib/Varien/Profiler.php
Ersetzen Sie die Funktion getSQLProfiler($res) mit folgender Funktion:
public static function getSqlProfiler($res) {
if(!$res){
return '';
}
$out = '';
$profiler = $res->getProfiler();
if($profiler->getEnabled()) {
$totalTime = $profiler->getTotalElapsedSecs();
$queryCount = $profiler->getTotalNumQueries();
$longestTime = 0;
$longestQuery = null;
$extra = '';
$extra .= '<style type="text/css">
.queryInfoDetails {
border-collapse:collapse;
border-top:solid 3px #E1E6FA;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
text-align:left;
width:680px!important;
text-align:left;
margin:30px auto;
}
.queryInfoDetails th {
color:#003399;
font-size:14px;
font-weight:normal;
padding:5px;
border-top:1px solid #E8EDFF;
}
.queryInfoDetails tr:hover, .queryInfoDetails tr:hover td {
background:#EFF2FF none repeat scroll 0 0;
color:#333399;
}
.queryInfoDetails td {
border-top:1px solid #E8EDFF;
color:#666699;
padding:5px;
}
</style>';
$counter = 0;
foreach ($profiler->getQueryProfiles() as $query) {
/** @var $query Zend_Db_Profiler_Query */
$queryParams = $query->getQueryParams();
$params = 'none';
if(!empty($queryParams)) { $params = print_r($queryParams,1); }
$queryType = (int)$query->getQueryType();
switch ($queryType) {
case 1:
$queryType = 'CONNECT';
break;
case 2:
$queryType = 'QUERY';
break;
case 4:
$queryType = 'INSERT';
break;
case 8:
$queryType = 'UPDATE';
break;
case 16:
$queryType = 'DELETE';
break;
case 32:
$queryType = 'SELECT';
break;
case 64:
$queryType = 'TRANSACTION';
break;
}
$extra .= '<table class="queryInfoDetails" cellpadding="0" cellspacing="0">
<tr><th>Query no.</th><td>'.++$counter.'</td></tr>
<tr><th>Query type</th><td>'.$queryType.'</td></tr>
<tr><th>Query params</th><td>'.$params.'</td></tr>
<tr><th>Elapsed seconds</th><td>'.$query->getElapsedSecs().'</td></tr>
<tr><th>Raw query</th><td>'.wordwrap($query->getQuery()).'</td></tr>
</table>';
if ($query->getElapsedSecs() > $longestTime) {
$longestTime = $query->getElapsedSecs();
$longestQuery = $query->getQuery();
}
}
$out .= 'Executed ' . $queryCount . ' queries in ' . $totalTime . ' seconds' . "<br>";
$out .= 'Average query length: ' . $totalTime / $queryCount . ' seconds' . "<br>";
$out .= 'Queries per second: ' . $queryCount / $totalTime . "<br>";
$out .= 'Longest query length: ' . $longestTime . "<br>";
$out .= 'Longest query: <br>' . $longestQuery . "<hr>";
}
$out .= $extra;
return $out;
}
Sie erhalten dann Output in folgendem Format:
Download der Files Magento 1.3.2.1: Ressource_Profiler.zip

Danke für die hilfreiche Info – ich werde das wahrscheinlich oft für meine Zwecke einsetzten.
Bei mir macht der Profiler im Moment nur ein kleines Problem:Wenn er aktiviert ist, komme ich nicht zum Connect-Manager, aber gut er hat wahrscheinlich nicht um sonst momentan noch Beta-Status.
Habe da wohl den Profiler mit dem Compiler verwechselt – sorry!
Nochmals Danke für die Info!
War diese Antwort hilfreich?
LikeDislikeEin Verändern der Datei app/code/core/Mage/Core/Model/Resource.php ist nicht nötig.
Man kann den Datenbank Profiler auch über den Eintrag 1 in der local.xml aktivieren:
1
1
Grüße aus Mainz,
Alexander Menk
netz98 new media GmbH
War diese Antwort hilfreich?
LikeDislikeEin Verändern der Datei app/code/core/Mage/Core/Model/Resource.php ist nicht nötig.
Man kann den Datenbank Profiler auch über den Eintrag <profiler>1</profiler> in der local.xml aktivieren:
<connection>
<host><![CDATA[host]]></host>
<username><![CDATA[user]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[db]]></dbname>
<active>1</active>
<profiler>1</profiler>
Grüße aus Mainz,
Alexander Menk
netz98 new media GmbH
War diese Antwort hilfreich?
LikeDislike