Mittwoch, 30. Dezember 2015

Cmsms hat mit Adodb Lite eine längst vermoderte Einheit am Start



$ADODB_vers = 'V1.42 ADOdb Lite 11 January 2007  (c) 2005-2007 Mark Dickenson. All rights reserved. Released LGPL.';

Das ist der Versionseintrag des von Cmsmadesimple verwendeten Datenbanktreibers.
Ursprünglich gewählt, weil die Last der ersten Cmsms Versionen derart gewaltig im Speicher und im Geschwindigkeitsbereich war das die Gesamtpower sich  unter allem befand was akzeptabel war und die große AdoDB Version noch mehr Leistung verbruzzelte.

Zudem unterstützt Cmsms am Anfang mal Postgresql und Sqlite , deswegen benötigte man einen Abstraktionslayer - diese Unterstützung aber wurde schon vor Jahren eingestellt, weil adodb Lite nicht weiter entwickelt wurde.

Nun ist es lediglich Mysql und sonst nichts.

Dennoch setzt man die alte Lite Version aus dem Museum ein.
Das ist kennzeichnend für Developer die zwar eine DB wie Mysql nutzen aber SQL technisch wie auch vom Datenbanklayout rein nichts drauf haben.

Zudem ist es so das der Trend bei den freien Datenbanksystemen bei allen Linuxdistributionen zu MariaDB geht - Mysql ist da im Standard nicht mehr enthalten.

MariaDB ist in den meisten Fällen abwärtskompatibel zu Mysql bietet jedoch  auch neue Möglichkeiten an die es bei Mysql in der freien Version nicht gibt.

Wer als nicht MariaDB im Fokus hat der verzichtet auf ziemlich dicke Leistungsmöglichkeiten.

Nur Developer die sich rein nichts dabei denken verzichten auf solche Vorteile.

Adodb Lite ist nach heutigen Kriterien ein Museumsstück bietet doch PHP mit PDO die gleichen Möglichkeiten wie ein Layersystem.

Man kann bei Adodb  bereits im Code erkennen das es veraltet ist.

Hier z.B. die Verwendung der Spaßbremse eval:

Found 12 matches of eval in 6 files.
mysql_date_module.inc
eval('class mysql_date_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 11:1]
eval('class mysql_date_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 275:1]
mysql_extend_module.inc
eval('class mysql_extend_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 7:1]
eval('class mysql_extend_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 75:1]
mysql_transaction_module.inc
eval('class mysql_transaction_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 7:1]
eval('class mysql_transaction_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 108:1]
mysqli_date_module.inc
eval('class mysqli_date_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 11:1]
eval('class mysqli_date_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 275:1]
mysqli_extend_module.inc
eval('class mysqli_extend_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 7:1]
eval('class mysqli_extend_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 75:1]
mysqli_transaction_module.inc
eval('class mysqli_transaction_EXTENDER extends '. $last_module . '_ADOConnection { }');      [position 7:1]
eval('class mysqli_transaction_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');      [position 133:1]

Und so fügt sich bei Cmsms so manches aneinander.

  1. grundsätzlich bereits vermasselte Datenstruktur
  2. Verwendung alter Fremdlibs auch bei nagelneuen Cmsms-Versionen
  3. Uralt Version von Smarty in einer 3.1 DEV Version und dazu noch gehackt
  4. Verlust von Developern 
  5. Zunehmender Abgang von Webdevelopern von Cmsms und Hinwendung zu anderen Titel
  6. Quasi Zwangsweise weil a. keine Entwicklerkapazität vorhanden ist und b.  die Software noch veralteter ist wurde das Supportversprechen zur Serie 1 durch die kalte Küche in den Eimer getreten
  7. Absolut ist bei den Cmsms Developern keinerlei Willen erkennbar irgend etwas an der Situation ändern zu wollen
Besonders Punkt 5 wird schmerzen - kleine Webdeveloper können es sich nicht dauerhaft leisten auf mehreren Hochzeiten zu tanzen.

Tatsächlich kann ich nur jedem anraten es sich sehr genau zu überlegen ob  er in Cmsms noch Zeit investieren möchte.

Dienstag, 29. Dezember 2015

Was die Cmsms - Leute bei Smarty nicht verstehen

Cmsms arbeitet bis heute eigentlich nicht mit Smarty in der aktuellen Version sondern über SmaryBC mit Smarty in der 2 er Variante.

Dabei verzichtet man  auf Vorteile der Serie 3.2 und nimmt auch in Kauf das nicht mehr alles aus der Serie 2 funktioniert.

Da aber die ganze Cms auf Smarty basiert kann man nur eines sagen - eine lahme und veraltete Software läuft hier nur noch mit Hilfe von Krücken.

PHP eval ist so ein Beispiel von langsamer und nicht zu empfehlender Programmierung:

Das findet man bei der aktuellen Cmsms Version im Smarty Ordner:


Found 60 matches of eval in 38 files.
SmartyBC.class.php
    eval($content);      [position 456:5]
function.mailto.php
        return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';      [position 112:48]
function.math.php
    eval("\$smarty_math_result = " . $equation . ";");      [position 76:5]
modifier.regex_replace.php
    // remove eval-modifier from $search      [position 52:15]
function.mailto.php
        return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';      [position 111:48]
function.math.php
    eval("\$smarty_math_result = ".$equation.";");      [position 75:5]
modifier.regex_replace.php
    // remove eval-modifier from $search      [position 49:15]
shared.literal_compiler_param.php
    eval("\$t = " . $params[$index] . ";");      [position 31:5]
shared.literal_compiler_param.php
    eval("\$t = " . $params[$index] . ";");      [position 32:5]
smarty_cacheresource_custom.php
            eval("?>" . $content);      [position 141:13]
smarty_cacheresource_keyvaluestore.php
            eval("?>" . $content);      [position 106:13]
smarty_internal_compile_eval.php
 * Smarty Internal Plugin Compile Eval      [position 3:35]
 * Compiles the {eval} tag.      [position 4:18]
 * Smarty Internal Plugin Compile Eval Class      [position 12:35]
     * Compiles code for the {eval} tag      [position 42:31]
        $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";      [position 61:76]
smarty_internal_compile_include_php.php
        eval('$_file = @' . $_attr['file'] . ';');      [position 67:9]
smarty_internal_compile_insert.php
        eval('$_name = @' . $_attr['name'] . ';');      [position 69:9]
            eval('$_script = @' . $_attr['script'] . ';');      [position 86:13]
smarty_internal_debug.php
        static $_is_stringy = array('string' => true, 'eval' => true);      [position 84:56]
        static $_is_stringy = array('string' => true, 'eval' => true);      [position 361:56]
smarty_internal_resource_eval.php
 * Smarty Internal Plugin Resource Eval      [position 3:36]
 * Smarty Internal Plugin Resource Eval      [position 12:36]
 * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}      [position 14:61]
smarty_internal_resource_string.php
 * {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}      [position 14:22]
smarty_internal_runtime_tplfunction.php
                eval($match[0]);      [position 70:17]
smarty_internal_templatecompilerbase.php
        if (in_array($this->template->source->type, array('eval', 'string'))) {      [position 1127:60]
smarty_resource.php
                                      'eval'    => 'smarty_internal_resource_eval.php',      [position 42:40]
smarty_template_compiled.php
                    eval("?>" . $this->content);      [position 130:21]
smarty_cacheresource_custom.php
            eval("?>" . $content);      [position 135:13]
smarty_cacheresource_keyvaluestore.php
            eval("?>" . $content);      [position 101:13]
smarty_internal_compile_eval.php
 * Smarty Internal Plugin Compile Eval      [position 3:35]
 * Compiles the {eval} tag.      [position 5:18]
 * Smarty Internal Plugin Compile Eval Class      [position 13:35]
     * Compiles code for the {eval} tag      [position 43:31]
        $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);";      [position 61:76]
smarty_internal_compile_extends.php
        eval("\$tpl_name = $name;");      [position 56:9]
smarty_internal_compile_function.php
            eval ('$tmp='.$_data.';');      [position 69:13]
smarty_internal_compile_include.php
            eval("\$tpl_name = $include_file;");      [position 168:13]
smarty_internal_compile_include_php.php
        eval('$_file = ' . $_attr['file'] . ';');      [position 61:9]
smarty_internal_compile_insert.php
        eval('$_name = ' . $_attr['name'] . ';');      [position 63:9]
            eval('$_script = ' . $_attr['script'] . ';');      [position 75:13]
smarty_internal_debug.php
        static $_is_stringy = array('string' => true, 'eval' => true);      [position 55:56]
        static $_is_stringy = array('string' => true, 'eval' => true);      [position 232:56]
smarty_internal_function_call_handler.php
            eval($_code);      [position 48:13]
smarty_internal_resource_eval.php
 * Smarty Internal Plugin Resource Eval      [position 3:36]
 * Smarty Internal Plugin Resource Eval      [position 12:36]
 * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}      [position 16:61]
smarty_internal_resource_string.php
 * {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}      [position 16:22]
smarty_internal_runtime_tplfunction.php
                eval($match[0]);      [position 70:17]
smarty_internal_template.php
        eval("?>" . $content);      [position 223:9]
                // do not cache eval resources      [position 652:33]
                if ($this->source->type != 'eval') {      [position 653:45]
smarty_internal_templatebase.php
                        eval("?>" . $code);      [position 141:25]
                        eval("?>" . $code);      [position 151:25]
                            eval("?>" . $code);      [position 165:29]
                    eval("?>" . $output);      [position 254:21]
smarty_resource.php
        'eval' => true,      [position 44:10]
        static $_incompatible_resources = array('eval' => true, 'string' => true, 'extends' => true, 'php' => true);      [position 579:50]
smarty_template_compiled.php
                    eval("?>" . $this->content);      [position 130:21]


sucht man dagegen in der aktuellen Smartyversion findet man eval überhaupt nicht !!

Das erklärt auch den ziemlichen Anstieg der Geschwindigkeit bei Smarty in den letzten Versionen.

Begriffen haben das die Developer von Cmsms nicht - im Gegenteil - man setzt eine 3.1 DEV Uraltversion  mit SmartyBC ein und das auch noch in einer total verkackten eigenen gehackten Version.

Webentwickler die sich mit Cmsms gut auskennen meinen dazu im deutschen Forum folgendes:




Donnerstag, 17. Dezember 2015

Zerfällt Cmsmadesimple ?

Wer sich die angebliche Liste der Cmsms - Developer anschaut und mal recherchiert welcher von den Namen aktiv bei denen auftaucht der  wird verwundert feststellen das einige sich sehr rar machen oder überhaupt nicht mehr auftauchen.

Ja selbst der Urentwickler Ted Kulp geht offenbar anderen Interessen nach.

Anne Mieke-Bovelett, die wahrscheinlich für Marketing zuständig ist, tauchte bei Cmsms im Forum gerade 7x auf - zuletzt am 13.4.2015.
Sie ist aber Moderatorin im deutschen Forumsteil - dort sah man sie zuletzt am 24.3.2015 mit einem kleinen Beitrag zuletzt, davor dort über 3/4 Jahr überhaupt nicht.

Die Mieke-Bovelett hat zudem das Thema Cmsms aus ihrer Domain verbannt und nicht nur das, sie lässt die Domain geschickt ruhen und hat eine Umleitung auf ihre Facebookseite gesetzt.

Geschickt , weil sie dann nur noch warten muss bis die letzten Seiten die Cmsms betreffen aus den Suchmaschinen verschwinden werden und somit die Verbindung zu ihrer Domain gelöst ist und damit auch all das Negative von Cmsms.

Auf ihrer aktuellen Facebookseite findet man 7x Wordpress als Stichwort und 0 x Cmsms bzw. Cmsmadesimple.

Von Ted Kulp ist nichts zu hören was die Cms betrifft.
Bei Facebook und Google + sind die sichtbaren Einträge in die Jahre gekommen - behandeln aber auch nicht Cmsms sondern Familie .
Familie ist immer ein sehr guter Schwerpunkt in einem Leben und für Kulp offenbar sehr viel wichtiger als anderes - das kann man verstehen und muss es akzeptieren - es ist gut so.

Warum man ihn immer noch als aktiven Developer führt weiß bei Cmsms wohl niemand.

Aber auch andere genannte Developer sind so gut wie ohne sichtbare Aktivitäten oder sind dabei sich langsam zurück zu ziehen.

So z.B. Bless (Kevin Danezis) ist seit Monaten nicht mehr im Cmsms Forum zu finden und macht sich auch sonst sehr rar was Cmsms betrifft.

Dann das Theater der 2 er Serie - Monate zu spät erschienen und dann noch  als verkappte Beta - Version und unterm Strich rein nichts von den erhofften Verbesserungen:

  1. Voll PHP 7 E_STRICT (das Erscheinungsdatum war bekannt)
  2. Voll Smarty 3.1 aktuell - keine verkappte Smarty 2 er Version
  3. Adodb light weg dafür eigene Klasse auf PDO Basis
  4. Einführung von InnoDB als Standard (ist unter Mysql Standard - Engine)
  5. Einführung von Transactions
  6. Wegfall dussligster und seit Jahren bekannter Performancebremsen
Stattdessen verstrickt man sich immer mehr mit dem alten Scheiß plus ein paar Neuigkeiten.

Administrativ ist bei Cmsmadesimple nix los.
Es gibt mehr Module die lange nicht gepflegt wurden und nicht mehr funktionieren als Module die das leisten.
Übersetzungen ? Die sind z.B. in deutsch auch jetzt aktuell nur Bruchstückweise vorhanden - das gilt für andere Sprachen ebenso.
Das bedeutet - die Community selbst hat langsam die Faxen dicke und verdünnisieren sich.
Das typische Weihnachtsparfüm für Cmsmadesimple - Anwender heißt "Verduften".



Hier mal ein paar Shots von Developer Websites wo der Begriff Cmsms , Cmsmadesimple nicht zu finden ist oder sich auf Uraltes bezieht. Und die Seiten machen einen verwaisten Eindruck.







Dienstag, 15. Dezember 2015

Bullshit CMS Cmsmadesimple und Smarty 3.1.28

Nun ist Smarty 3.1.28 raus aber natürlich - ein einfaches überkopieren geht nicht bei Cmsms.

Cmsms setzt eine gehackte alte Version ein und das auch noch mit  SmartyBC .

SmartyBC ist eine Kompatibilitätsklasse zur alten Smarty 2 Version , verhindert aber auch manche Möglichkeiten die in der 3 er Serie machbar sind.

Einer der erfahrensten Smarty- Nutzer der sich im Smartyforum beteiligt brachte mal den Ausdruck das der Einsatz voin SmartyBC ein paar Dinge möglich macht, andere aber unmöglich und unterm Strich der Einsatz dieser Klasse aber Bullshit wäre.

Zum anderen ist die Art des Einsatzes der gehackten Smartyversion in einer derart primitiven Art vorgenommen worden, das man mit PHP7 die Rechnung dafür  präsentiert bekommt.

Es sind umfangreiche Anpassungen  im Core , Module und Pluginbereich erforderlich und das hat zur Konsequenz das in den Bereichen erheblich umgearbeitet werden muss.

Zum einen sollte man den Freunden von Cmsms endlich mal die Möglichkeiten der Smarty 3.1 geben und man sollte nun auch mal Smarty 2.X in die Tonne treten und 100% E_STRICT mit PHP7 erzeugen - das alles liegt nicht vor und deshalb ist auch die aktuelle Cmsmadesimple Version ebenfalls nur Bullshit.

Mittwoch, 9. Dezember 2015

Performancebemühungen sind bei Cmsmadesimple unbekannt

Seit vielen Jahren wird über eine mangelnde Performance von Cmsmadesimple gemeckert.

Zahlreiche Vorschläge zur Verbesserung wurden gemacht - alles verhallte ohne Konsequenzen

Wenn die Performance aktuell nun besser ist als sie vorher war dann sind es die Verbesserungen von PHP selbst, welche diesen Schwung brachten - nicht aber realisierte Maßnahmen des Developers.


Dabei sind es manchmal nur winzige Kleinigkeiten die etwas bringen.

So ein Beispiel dazu.

In der index.php bringt folgende Änderung mehr als 5% Mehrleistung und das auf einem Schlage:

Vorher

if (!file_exists(CONFIG_FILE_LOCATION) || filesize(CONFIG_FILE_LOCATION) < 100) {
    die ('FATAL ERROR: config.php file not found or invalid');
}

Nachher

if (@filesize(CONFIG_FILE_LOCATION) < 100) {
    die ('FATAL ERROR: config.php file not found or invalid');
}

Der Grund ist einfach - vorher sind 2 Fileaktionen notwendig nachher nur eine und die Abfrage wird kürzer.

Wenn die config.php nicht vorhanden ist gibt filesize ein false zurück, was als 0 gewertet wird, ist config.php vorhanden gibt filesize die Dateigröße zurück, ist sie kleiner als 100 Bytes erfolgt der Abbruch.

Testaufbau mit ab -kc 10 -t 30 http://localhost/cmsms/index.php auf einem High End Server - das ist eine sehr kleine Belastung.

Und so findet man viele Dinge.

Eine der bescheuersten Funktionen (in der Nutzung) ist diese

function debug_buffer($var, $title="")
{
    if( !defined('CMS_DEBUG') || CMS_DEBUG == 0 ) return;
    CmsApp::get_instance()->add_error(debug_display($var, $title, false, true));
}

Klar - es ist bequem einfach aufrufen und gut.
Aber erst in der Funktions selbst wird geprüft ob Debug überhaupt geschaltet ist.

So etwas sollte man NIE machen, es ist immer vorher zu prüfen ob man eine Funktion aufrufen muss oder nicht !

Der richtige Aufruf bringt wieder sichtbare Prozente aber auch etwas mehr Schreibarbeit:

if (defined('CMS_DEBUG'))
                debug_buffer('process template top');

Und so setzt sich das bei Cmsms pausenlos fort.

Wir wollen überhaupt nicht erst bei den billigsten SQL Abfragen anfangen, dazu sage ich nur  Abfrage billig, unnötiger PHP Einsatz nach Abfrage hoch.
Insgesamt kann Cmsms mit solcher Arbeitsweise in der Entwicklung vielleicht noch Laien imponieren - mehr aber nicht.

Schade, denn Cmsmadesimple hätte das Zeug dazu viele anderen Titeln den Rang abzulaufen.

Nachtrag:
Die Änderung aller debug_buffer - Einträge auf die korrekte Art brachte 21% mehr Leistung, d.h. Request's pro Sekunde.


Jahre vergehen ....

Jahre benötigen die Cmsmadesimple Entwickler um etwas immer nicht zu machen was man in wenigen Stunden machen kann.

  • Umstellung auf Mysql InnoDB
  • Umstellung auf Autoincrement
  • Entfernen von adodb light


Man mache sich mal den Spaß, nehme eine Cmsms 2.1 und  rund 4 Stunden Zeit und dazu ein ganz billiges , schnell hin gekritzeltes DB Script mit dem man aber alles machen kann was die datentechnisch very simple aufgebaute CMS benötigt.

Das Script selbst ist ein Lacher aber es funktioniert.
,
In den rund 4 Stunden muss die DB Nutzung in allen Scripten angepasst werden wie auch der Teil der für eine neue Insert ID zuständig sind - das ist  eine reine Fleißarbeit.

Das Script für die DB:


$dbconnection = null;


        CONST DBDEF = array(
    'user' => "root",
    'pwd' => "1030410",
    'db' => 'cmsms',
    'host' => "localhost",
    'port' => null,
    'chset' => "utf8"
);


function Connect(&$db, $host = null, $user = null, $password = null, $database = null, $port = null, $nodie = true) {
    $host = ( empty($host) ? DBDEF['host'] : $host);
    $user = ( empty($user) ? DBDEF['user'] : $user);
    $password = ( empty($password) ? DBDEF['pwd'] : $password);
    $database = ( empty($database) ? DBDEF['db'] : $database);
    $port = ( empty($port) ? DBDEF['port'] : $port);
    if ($db == null) {
        if (isset($port)) {
            $db = @mysqli_connect($host, $user, $password, '', (int) $port);
        } else {
            $db = @mysqli_connect($host, $user, $password);
        }
        if (!is_object($db) && !$nodie) {
            $err_msg = 'Cannot connect to the database because: ' . mysqli_connect_error();
            die($err_msg);
            exit();
        } elseif (!is_object($db)) {
            $err_msg = 'Cannot connect to the database because: ' . mysqli_connect_error();
            echo($err_msg);
            exit();
        }
        if (is_object($db) && $database !== null) {            
            $res = mysqli_select_db($db, $database);
            if (!$res) {
                $err_msg = 'Cannot select db because:' . mysqli_error($db);
                if (!$nodie)
                    die($err_msg);
            }
            if ($db && DBDEF['chset'] <> '') {
                $r = Execute($db, 'SET CHARACTER SET ' . DBDEF['chset']);
            }
        }
    }
}

function Execute(&$db, $sql) {
    if ($sql == '') {
        return false;
    } else {
        return mysqli_query($db, $sql);
    }
}

function GetArray(&$db, $sql, &$rset) {
    $data = false;
    $result = Execute($db, $sql);
    if ($result) {
        $rset['lasterror'] = mysqli_errno($db);
        $rset['lasterrortext'] = mysqli_error($db);
        if (preg_match("/^(insert|delete|update|replace)\s+/i", $sql)) {
            $rset['rows_affected'] = mysqli_affected_rows($db);
        } elseif (preg_match("/^(select|explain|show|describe)\s+/i", $sql)) {
            $rset['num_rows'] = mysqli_num_rows($result);
            $rset['num_fields'] = mysqli_num_fields($result);
            if ($rset['num_rows'] > 0) {
                $data = array();
                while ($row = mysqli_fetch_assoc($result)) {
                    $data[] = $row;
                }
            }
        }
    }
    return $data;
}


// Test
$rset = array();
Connect($dbconnection);
$r = GetArray($dbconnection, 'SHOW TABLES;', $rset);
print_r($r);


Natürlich kann man das Script noch mit allen Schickimickis aufrüsten wie Backup, Restore und solch Zeugs - wenn man es will - wird aber zum Betrieb von Cmsms nicht benötigt.

Montag, 7. Dezember 2015

Warum auch Cmsms 2.1 unbrauchbar ist

Lokale Benchmarks zeigen die Leistung wenn es praktisch keinen echten Internettransfer gibt.

Cmscanbesimple.org  steht Cmsmadesimple nahe, gibt brauchbare Hinweise und Tricks zur Nutzung von Cmsms und wird von einem Cmsms - Developer betrieben.

Offenbar ist Cmsmadesimple nicht willens und in der Lage so etwas bei sich selbst zu hosten.

Davon einmal abgesehen hat Cmscanbesimple.org die aktuelle Version 2.1 von Cmsms installiert.

Und so lässt sich dann auch mal ein Benchmark über das Internet ausführen.

Hier im Bild das Ergebnis bei ganz kleiner Belastung mit einer 100 MBit Anbindung in das Netz.

Es zeigt ganz klar an - auch Cmsmadesimple 2.1 ist im praktischen Gebrauch hier nicht geeignet.

Es handelt sich um ein Standardwebspace unterer Güte mit Server: Apache/2.2.16 und PHP/5.4.41-1~dotdeb+6.1.
Man muss wissen das dieser Benchmark nicht rendert und da sind die reinen Transferzeiten bei dieser geringen Last einfach Scheiße.

Eine Webseite muss gerendert (also vom Browser komplett verarbeitet) innerhalb 1 Sekunde nach Betätigung des Links beim Besucher stehen.
Das geht natürlich nie wenn allein der Transfer 1 Sekunde benötigt.

Auf dem Bild mit den Pagespeed - Werten kann man auch ziemlich deutlich erkennen, das die reale Zeit eigentlich noch schlechter sein wird als man erwarten dürfte.

Man stelle sich mal vor wie es aussieht wenn der Wunschtraum eines Webbetreibers in Erfüllung geht und viele Besucher kommen.







Cmsmadesimple und Smarty

Die vom Entwickler Calguy angeführten Gründe ( https://github.com/smarty-php/smarty/issues?utf8=%E2%9C%93&q=is%3Aissue+author%3Acalguy1000+ ) warum man keine Smarty aktuell Version einsetzt sind längst bei Smarty erledigt.

Man konnte diese Smarty-Version aus der Masterbranch downloaden.
Das ist zwar keine offizielle Version , aber die Fehler waren korrigiert.

Dennoch wird eine Uralt-Version von Smarty eingesetzt, wobei der Einsatz selbst nicht der Norm entspricht und ein paar Dinge verbogen wurden.
Die Uraltversion beinhaltet neben zahlreichen Fehlern auch noch einige Sicherheitslücken durch die man eine Installation relativ leicht hacken kann.

Hätte man es mal mit der Smarty - Master - Branch probiert, hätte man auch feststellen können das diese verbogene (gehackte) Art des Smarty - Einsatzes nicht läuft.
Überwiegend sind es Fehler billigster Art aber auch - auf die Schnelle gefunden - ein paar Kardinalfehler von Cmsms, die, wenn man sie abstellt, schon eine empfindliche Wirkung auf viele Teile haben wird.

Da wird also noch extrem viel Korrekturarbeit notwendig sein damit man weiterhin mit Smarty arbeiten kann.

Nun ist es aber so das die Anfang August als "coming soon" erwartetete Smarty 3.1.28 bis heute nicht erschienen ist.

Es kann gut sein das  der Smarty - Entwickler Uwe Tews kaum noch Zeit hat.

Der betreibt die Firma ATP (http://www.atp-elektronik.de/index.html)  und will mit dieser Firma umziehen und zwar in meine Geburtsstadt (und nicht nur das sondern ausgerechnet auf dem Grundstück wo das Haus stand in dem ich geboren wurde). Dort will er neu bauen und er will seinen Umsatz kräftig steigern.

Diese Ereignisse wurden kurz nach dem "coming soon" eingeleitet, als Tews das Grundstück hat erwerben können.
Seitdem hat sich da bei Smarty nichts mehr gerührt, was die nächste Version betrifft.

Nun zieht sich ein Neubau ja etwas länger hin, dann die Arbeit bis zum Produktionsbeginn, Umzug, Neueinstellung von Personal und natürlich die Bemühungen den Umsatz zu steigern.

Das alles kann bedeuten das sein Zeitaufwand für Smarty minimal sein wird.

Allein die Tatsache das man seit August trotz Nachfrage keine Antwort erhält, zeigt diesen Zeitmangel an.

Die Frage wird sich irgendwann stellen ob es mit Smarty weiter geht und wie.

Cmscanbesimple

Cmsms vs Pcms

Nach dem nun Benchmarks zu Cmsms 2.1 gezeigt wurden hier dazu ein Gegenstück mit Pcms.
Auch Pcms profitiert wie alle anderen CMS Systeme von PHP 7 und dann am meisten wenn man es auf PHP7 getrimmt hat wie Pcms.

Man erkennt deutlich - da liegen Welten dazwischen.

ab -kc 10 -t 30 http://localhost/pcms/index.php
This is ApacheBench, Version 2.3 <$Revision: 1663405 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Apache/2.4.16
Server Hostname:        localhost
Server Port:            80

Document Path:          /pcms/index.php
Document Length:        23614 bytes

Concurrency Level:      10
Time taken for tests:   26.927 seconds
Complete requests:      50000
Failed requests:        0
Keep-Alive requests:    0
Total transferred:      1197650000 bytes
HTML transferred:       1180700000 bytes
Requests per second:    1856.86 [#/sec] (mean)
Time per request:       5.385 [ms] (mean)
Time per request:       0.539 [ms] (mean, across all concurrent requests)
Transfer rate:          43434.91 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       8
Processing:     2    5   3.8      4      88
Waiting:        1    5   3.3      4      88
Total:          2    5   3.8      4      88

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      6
  80%      7
  90%     10
  95%     12
  98%     16
  99%     19
 100%     88 (longest request)

Sonntag, 6. Dezember 2015

Cmsmadesimple und PHP 7 die 2.


Da Cmsms in Überscheidung mit dem vorherigen Beitrag eine neue Version 2.1 geliefert hat der Test nochmals.
Das Ergebnis ist in etwa gleich.

Auch die Fehler sind immer noch vorhanden.

Was noch bemerkenswert ist - es werden alte Fremdlibs verwendet, z.B. Jquery 1.11 statt 1.13, Smarty - uralt 3.1 DEV  statt 3.1.27 und immer noch $ADODB_vers = 'V1.42 ADOdb Lite 11 January 2007  (c) 2005-2007 Mark Dickenson. All rights reserved. Released LGPL.';
 - die ist extrem veraltet.

Besondere Rücksicht auf die Tatsache, das Provider zunehmend auf MariaDB umgestellt haben, aber auch die bekannten Linux Distributionen MariaDB statt Mysql verwenden , wird nicht genommen.

MariaDB bietet neben Geschwindigkeitsvorteilen noch allerhand DInge die man sehr nützlich einsetzen kann.

Unterm Strich haben die Autoren von Cmsmadesimple mal wieder Mikronesien besucht und sich landestypisch verhalten.

Cmsmadesimple ist so kein System mit Zukunft.


Auch Cmsmadesimple profitiert von PHP 7.00 stable

Um es gleich am Anfang zu sagen - manche Dinge bei Cmsms 2.0.1.1 laufen unter PHP 7 nicht oder nicht richtig.
Es sind bekannte da konkret gepostete Dinge aber auf welche die Entwickler "geschissen" haben.


Tatsächlich läuft es nur wenn sämtliche Fehlermeldungen unterdrückt werden.

Macht man es dann erhält man unter PHP 7 stable bessere Werte als noch bei den letzten Test's unter der Beta.

Testbedingungen - optimaler lokaler Webserver unter Ubuntu  mit MariaDB  mit aktuellstem Softwarestand und geringem  Zugriff.

Damit kann man arbeiten- aber es ist nicht der Verdienst der Cmsms - Entwickler sondern von PHP, Apache und MariaDB und Co !!