So, Optimierungsbedarf.
admin/includes/modules/cseo/commerce_seo_url.php, from line 105
$pQuery = xtc_db_query("SELECT products_id FROM " . TABLE_PRODUCTS_DESCRIPTION);
$pA;
$pHash;
//product ids in zwischen array speichern:
while ($pID = xtc_db_fetch_array($pQuery))
$pA[] = $pID['products_id'];
//hashArray füllen:
for ($k = 0; $k <= sizeof($pA); $k++)
$pHash[] = array('pid' => $pA[$k]);
$max_width = sizeof($pHash) - 1;
$step = $_GET['max'];
$_count = $_GET['count'];
$start = $_GET['start'];
$limit = $offset + $step;
for ($i = $offset; $i <= $limit; $i++) {
if ($i >= $max_width) {
// $commerceSeo->createSeoDBTable();
$commerceSeo->createSeoDBTable();
$infotext = urlencode(IMAGE_STEP_INFO . $_count . IMAGE_STEP_INFO_READY);
// Cache leeren
$del_array = array(array('templates_c/'),
array(DIR_FS_CATALOG . 'cache/'),
array('cache/'),
array(DIR_FS_CATALOG . 'templates_c/'));
foreach ($del_array AS $key => $value)
$response .= $this->delfiles($value[0]);
xtc_redirect(xtc_href_link(FILENAME_MODULE_SYSTEM, 'set=' . $_GET['set'] . '&module=commerce_seo_url&infotext=' . $infotext)); //FERTIG
}
$commerceSeo->createSeoDBTableProduct($i, $pHash[$i]['pid']);
//counter erhoehen um alle operationen zu zaehlen:
$_count += 1;
}
Alles anzeigen
1. Jeder Scriptaufruf holt alle product_id aus products_description. Danach wird pagination durchgeführt ("for ($i = $offset; $i <= $limit; $i++)"). Überlasse doch diese Aufgabe an MySql-Server:
http://dev.mysql.com/doc/refman/5.6…timization.html
"SELECT products_id FROM " . TABLE_PRODUCTS_DESCRIPTION . " ORDER BY products_id LIMIT $offset, $step"
Für ORDER BY products_id wird ein Index für "products_id"-Spalte benötigt.
2. Die Tabelle products_description enthält Lokalisierungen für alle Sprachen, somit kommen ins Abfrageergebnis alle products_id mal Anzahl Sprachen. Später in inc/commerce_seo.inc.php, line 599 werden sowieso alle lokalisierte Namen abgefragt.
$product_query = xtDBquery("SELECT
products_id,
language_id,
products_name,
products_url_alias,
url_old_text
FROM
" . TABLE_PRODUCTS_DESCRIPTION . "
WHERE products_id=" . $productID);
Es ergibt sich, dass jedes Produkt genau so viel mal abgearbeitet wird, wie die Anzahl Sprachen. Denkbar wäre noch DISCTINCT dazu:
"SELECT DISTINCT products_id FROM " . TABLE_PRODUCTS_DESCRIPTION . " ORDER BY products_id LIMIT $offset, $step"
3.
OK. Das ist klar. Aber
ist Murks. $pHash[] wird nur einmal verwendet und zwar da: $commerceSeo->createSeoDBTableProduct($i, $pHash[$i]['pid']);
Was ist das? Ein Array befüllen, ins andere die Werte drüberschaufeln und das letzte nutzen. Könnte man nicht von Anfang an das erste nutzen? Speicherverschwendung, CPU-Zeitverschwendung und das Script tut so, als es was sehr wichtiges zu tun hätte.
4. admin/includes/modules/cseo/commerce_seo_url.php, from line 156
$selbstaufruf = '<script language="javascript" type="text/javascript">setTimeout("document.img_continue.submit()", 3000);</script>';
Worauf warten wir drei Sekunden?
5. Auf dem Frontend wird nur Zähler geändert. Um die Änderung davon anzuzeigen wird aber die komplette Seite übertragen. Ajax doch mal!