Bisher hatte ich keine Probleme mit der Geschwindigkeit von osCommerce. Als wir jedoch den Server gewechselt haben (welcher sogar schnellere CPUs hat!) ist osCommerce plötzlich merkbar langsamer geworden. Wenn vorher eine Produkte Seite in 1 Sekunde geladen war, dauerte es jetzt zwischen 3-7 Sekunden…

Also machte ich mich mal auf die Suche nach Optimierungen. Am häufigsten taucht der Hinweis auf, den SSL Check zu ändern.

Optimierung 1 – SSL Check

Lösung aus dem Forum oscommerce suddenly running very slow?

Das die Ursache für dieses Problem ist, dass viele Server bei getenv(‚HTTPS‘) ON zurückgeben. Das hat jedoch zur Folge, dass das Base HREF von non-ssl Seiten in https umgewandelt werden. So werden alle Bilder als https://www.test.com/image.php geladen – was die Seite extrem viel langsamer macht.

Zum testen einfach mal ein PHP File machen mit folgendem Inhalt und aufrufen:

<?php
        echo getenv('HTTPS');
        echo getenv('SERVER_PORT');
?>

Bei mir gibt getenv(HTTPS) gar nichts zurück – server_port 80 – so wie es sein muss. Somit würde diese Optimierung nichts bei mir bringen – ich füge sie aber trotzdem hinzu, wer weiss, auf was für einem Server der Shop in Zukunft liegen wird 😉

1) Änderung im application_top

vi catalog/includes/application_top.php

folgende Zeile:

// set the type of request (secure or not)
$request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';

ändern in

// set the type of request (secure or not)
$request_type = (getenv('SERVER_PORT') == '443') ? 'SSL' : 'NONSSL';

2) Änderung im den general functions

vi catalog/includes/functions/general.php

in der Funktion tep_redirect:

if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page

ändern nach:

if ( (ENABLE_SSL == true) && (getenv('SERVER_PORT') == '443') ) { // We are loading an SSL page

Optimierung 2 – MySQL Indexe

Ein weiterer Lösungsansatz ist die Optimierung der MySQL Indexe. Einige Indexe hatte ich bereits angepasst, jedoch noch lange nicht alle, da diese nicht in meinem slow-queries aufgetaucht sind.  Folgende Lösung habe ich in diesem Blog gefunden:

Führe die folgenden MySQL Queries aus um die Indexe zu generieren:

alter table banners add index idx_banners_group (banners_group);
alter table banners_history add index idx_banners_history_banners_id (banners_id);
alter table currencies add index idx_currencies_code (code);
alter table customers add index idx_customers_email_address (customers_email_address);
alter table customers_basket add index idx_customers_basket_customers_id (customers_id);
alter table customers_basket_attributes add index idx_customers_basket_att_customers_id (customers_id);
alter table orders add index idx_orders_customers_id (customers_id);
alter table orders_products add index idx_orders_products_orders_id (orders_id);
alter table orders_products add index idx_orders_products_products_id (products_id);
alter table orders_status_history add index idx_orders_status_history_orders_id (orders_id);
alter table orders_products_attributes add index idx_orders_products_att_orders_id (orders_id);
alter table orders_products_download add index idx_orders_products_download_orders_id (orders_id);
alter table products add index idx_products_model (products_model);
alter table products_attributes add index idx_products_attributes_products_id (products_id);
ALTER TABLE `products_to_categories` DROP PRIMARY KEY;
ALTER TABLE `products_to_categories` ADD INDEX `idx_p2c_categories_id` ( `categories_id` );
ALTER TABLE `products_to_categories` ADD INDEX `idx_p2c_products_id` ( `products_id` );
alter table reviews add index idx_reviews_products_id (products_id);
alter table reviews add index idx_reviews_customers_id (customers_id);
alter table specials add index idx_specials_products_id (products_id);
alter table zones add index idx_zones_to_geo_zones_country_id (zone_country_id);

Auch diese Änderungen habe die Geschwindigkeit meines Shops nicht verbessert…

Optimierung 3 – STS abstellen

In meinem Shop habe ich seit jeher die STS (Template) Contribution verwendet. Doch wie sich jetzt zeigt, verschlechtert sich die Performance MASSIV (200-300%!!) wenn man STS verwendet, wie ich hier gelesen habe.

Und tatsächlich! Stelle ich STS ab, ladet die Einstiegsseite statt in 5 Sekunden in 1-2 Sekunden! Zwar muss ich den Shop nun kurz umdesignen (naja, bei diesem Monster Code dauert es wohl länger…), aber diese bessere Performance ist krass und die Mühe wert!! Die Optimierung trifft hauptsächlich auf die Einstiegsseite zu – die Artikelseiten haben weiterhin 2-3 Sekunden zum laden. Dort spührt man diese Änderungen kaum. Aber immerhin! Der erste Eindruck zählt 😉