News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 48
Seite [1] 2 3 >
Mindcrime


Geekboy





Beiträge: 1155
# Thema - 20.11.2009 um 15:25 Uhr
wichtig/important:

System -> Database -> Import. Run:

UPDATE {pre}_access SET access_datacache = '0' WHERE access_id = 1 LIMIT 1 ;
UPDATE {pre}_access SET access_datacache = '0' WHERE access_id = 2 LIMIT 1 ;
UPDATE {pre}_access SET access_datacache = '0' WHERE access_id = 3 LIMIT 1 ;
UPDATE {pre}_access SET access_datacache = '0' WHERE access_id = 4 LIMIT 1 ;
UPDATE {pre}_access SET access_datacache = '5' WHERE access_id = 5 LIMIT 1 ;




Datacache Modul fuer ClanSphere v2009.0.2 - Release date 2009-11-20

WAS MACHT ES
============

Kurz gesagt, es ist ein System um "halb-statische" Daten zu cachen.

"Halb-statische" daten sind zum Beispiel news, wars, artikel. Es ist nicht so
das man jede minute eine neue News erstellt, oder ein War eintragt. Aber jedes
mal wenn ein Besucher deine Homepage Webseite besucht, wird jedes mal die letzte
X Newsberichte und letzte Y Wars angezeigt (navlisten), die jedesmal ueber den Datenbank durch benutzung von mehrere Queries erstellt wird.

Das datacache system veringert die Anzahl von Queries auf die Datenbank und sorgt
somit das die Homepage schneller angezeigt wird.

Es ist nicht so, das wenn du dieses Modul installierst, das du gleich eine schnellere
Homepage hasst. Fuer jedes Modul das du cachen moechtests, musst du die code des
Modules anpassen, so das es dieses datacache benutzt.

Dieses Modul ist also ein basis/system Modul, was durch andere Module benutzt werden
kann, um die performance deiner Webseite zu verbessern.

Beispiel:
Auf meine Test Webseite dauert das erstellen von die Homepage:
1500 ms, 35-38 queries ohne caching (mit abfrage ob cache benutzt werden soll)
500 ms, 21 querie mit caching
Also:
1000 ms, 66% besser performance
14-17, 40%-45% weniger queries

Das ist nur wenn ich news - recent cache benutze. Wenn ich noch mehr cache, zb. die navlisten fuer wars, news, artikel, etc. dan wuerde es noch effizienter gehen. Auch
hab ich zb es so gemacht, das die news cache nie verstreicht, es sei ich habe etwas in die news geaendert (erstellen, editieren, loesschen, publish).

Ich werde in kurze einige beispiele posten...



Datacache module for ClanSphere v2009.0.2 - Release date 2009-11-20

WHAT DOES IT DO
===============

In short, it's a data caching system to prevent extensive database usage
for semi-static data. Semi-static data is data in ClanSphere that does
not really change that often, but which is currently being grabbed
from the database (via multiple queries) every time.

Examples are news, wars, articles. You do not write a new news/article every
minute of the day, or you add or change a war every minute. But everytime
someone visits your page, the list of recent news is being generated again
everytime using a lot of database queries, which can become a problem on
a website which is being visited frequently.

In order to improve the website performance, this datacache module can
cache this semi-static data, so that it takes less time and queries to
generate website content.

Example:
For a test site that I am currently developing, the test homepage
takes 1500 ms to generate when the recent news is not cached and takes between
35 and 38 SQL queries to generate (inclusive the test if the data is available
in the cache).
When using the cached version the test homepage takes 500 ms to generate and
takes 21 SQL queries to generate.
Performance wise:
The time to generate the homepage is shortened by 1000 ms or 66% performance
improvement and it needs 14 to 17 or 40% to 45% less queries to generate.

When caching even more stuff (like all the navlists) I can improve the performance
even more. I also changed the news module and used caching in such a way, that
the cache is never refreshed unless I have made changes to any news message (create,
edit, remove, publish). This means, that the cache in only refreshed when it had
a reason to be refreshed.

INSTALLATION
============

1) Upload all files except updates/ to your ClanSphere website.
2) On your website System -> Database -> Import.
Select updates/datacache_install.sql and press "Run".
3) You can now use the datacaching system for your mods.

OPTIONS
=======

The only option you can set is the default refresh time for a cached item.
By default it is set to 900 (15 minutes).

DOWNLOAD
========

http://www.clansphere.net/modules/module/view/id/231

Read the README for a simple example...
I will post more complicated examples shortly...


EXAMPLES

news recent 15 minutes cached

Cache recent news mods/news/recent.php:
$start = empty($_REQUEST['start']) ? 0 : (int)$_REQUEST['start'];

aendern zu / change to:
$start = empty($_REQUEST['start']) ? 0 : (int)$_REQUEST['start'];

$key = 'lang='.$account['users_lang'].'&cat='.$cat_id .'&start='.$start.'&size='. $cs_option['max_recent'] .'&access='.$account['access_news'];
$cachedata = cs_datacache_load('news', 'recent', $key, false);
if ($cachedata !== false)
{
echo '<!-- cached START -->'.$cachedata.'<!-- cached END -->';
return;
}

(pas auf: es gibt 2 lehrzeichen die hier durch die foren software extra reingesetzt werden in die zeile die mit $key anfaengt, die gehoeren da nicht!
wacht out: there are 2 spaces in the line which starts with $key which do not belong there, but are done automatically by the forum software!
)

und/and

echo cs_subtemplate(__FILE__, $data, 'news', 'recent');

aendern zu / change to:
$cachedata = cs_subtemplate(__FILE__, $data, 'news', 'recent');
cs_datacache_create('news', 'recent', $key, $cachedata, null);
echo $cachedata;


news recent always cached

If you would like to only remove the cache when the news has changed.

You will have to change in the above code null to 0 and change the following extra files:

mods/news/create.php:
cs_unlink('cache', 'news_publish.tmp');

aendern zu / change to:
cs_unlink('cache', 'news_publish.tmp');
// clear datacache
cs_datacache_clear('news');


mods/news/edit.php:
cs_unlink('cache', 'news_publish.tmp');

aendern zu / change to:
cs_unlink('cache', 'news_publish.tmp');
// clear datacache
cs_datacache_clear('news');


mods/news/remove.php:
cs_sql_delete(__FILE__,'news',$news_id);
$query = "DELETE FROM {pre}_comments WHERE comments_mod='news' AND ";
$query .= "comments_fid='" . $news_id . "'";
cs_sql_query(__FILE__,$query);

aendern zu / change to:
cs_sql_delete(__FILE__,'news',$news_id);
$query = "DELETE FROM {pre}_comments WHERE comments_mod='news' AND ";
$query .= "comments_fid='" . $news_id . "'";
cs_sql_query(__FILE__,$query);

// clear datacache
cs_datacache_clear('news');


system/runstartup/news.php
cs_unlink('cache', 'news_publish.tmp');

aendern zu / change to:
// clear datacache
cs_datacache_clear('news');
cs_unlink('cache', 'news_publish.tmp');



Zuletzt editiert von Mindcrime am 25.11.2009 um 16:27 Uhr (18x Editiert)
Inaktiv
duRiel ClanSphere Team


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# Antwort: 1 - 20.11.2009 um 15:51 Uhr
wow, sounds nice!!


Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 2 - 20.11.2009 um 16:02 Uhr
Kannst das modul bitte verschieben? Ich habs unabsichtlich in ordner ClanSphere 2007 RC 1 geschoben, sollte in ClanSphere 2009.0.2 sein


Inaktiv
|
duRiel ClanSphere Team


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# Antwort: 3 - 20.11.2009 um 16:05 Uhr
done

guck mir das morgen mal an


Inaktiv
|
ichraffsnicht ClanSphere Team

Supporter
Supporter



Herkunft: Erdeborn bei Lutherstadt Eisleben
Beiträge: 3191
# Antwort: 4 - 20.11.2009 um 16:34 Uhr
das hört sich ja mal interessant an, werd ich dann mal gründlich testen


------------------



Inaktiv
|
Fr33z3m4n ClanSphere Team


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# Antwort: 5 - 20.11.2009 um 16:38 Uhr
Werds mir heute abend mal anschauen, und ggf. ins SVN übernehmen.


------------------
mfg
Patrick "Fr33z3m4n" Jaskulski

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.

Inaktiv
|
TeQu!La ClanSphere Team


Specialist




Herkunft: Grevenbroich
Beiträge: 2142
# Antwort: 6 - 20.11.2009 um 18:17 Uhr
nice work !


------------------

ClanSphere - professional clan care starts here


Inaktiv
|
FranzAUT


Going for pro




Beiträge: 467
# Antwort: 7 - 20.11.2009 um 23:06 Uhr
Echt super Sache.


------------------


Inaktiv
|
DopeK!cK


Going for pro



Herkunft: Syke (nähe Bremen)
Beiträge: 551
# Antwort: 8 - 20.11.2009 um 23:09 Uhr
Ich wollte es mal testen, aber erhalte einen Fehler:

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE or '$' in /data/multiserv/users/100175/projects/185863/www/trunk/mods/news/recent. php on line 23

Hab alles so gemacht, wie es in der Anleitung stand.
ClanSphere Version ist die ClanSphere SVN trunk 3544.

Edit: In deinen Codes aus dem Forum sind Leerzeichen drinne, die da nicht hingehören.
Ein Leerzeichen, was nicht dahin gehört:

$ cs_option

Und zwischen:
$account['access_ news'];


Edit2: Da nun das Modul läuft, will ich mal mein Feedback dazu abgeben.
Man merkt deutlich den Unterschied, die Geschwindigkeit hat enorm zugenommen. Mit AJAX beträgt der Seitenaufbau mit 4 News, 13ms bei 4 Querys. Es fühlt sich fast so an, als wäre keine Verzögerung vorhanden. Ich hoffe es hat keine größeren Nachteile und kann so wie es ist in ClanSphere übernommen werden.

Danke, Mindcrime!


------------------
Mit freundlichen Grüßen

DopeK!cK

Zuletzt editiert von DopeK!cK am 20.11.2009 um 23:33 Uhr (2x Editiert)
Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 9 - 21.11.2009 um 00:14 Uhr
Das mit den lehrzeichen ist die schuld von Forum software hier, die aendert die tekst und macht lehrzeichen drin, dafuer kann ich nichts, sorry...


Inaktiv
|
Jam2 ClanSphere Team


Highlander





Beiträge: 3291
# Antwort: 10 - 21.11.2009 um 00:30 Uhr
Ich hab die Leerzeichen mal so editiert, dass sie nicht mehr die Funktion stören...

 
1.
1. / 2. / ... 
 $key 'cat='.$cat_id.'&start='.$start.'&size='$cs_option['max_recent'] .'&access='.$account['access_news'];



gute idee, aber bin nochnicht zum testen gekommen


------------------
Gruß/ Best regards
Jam2

Nützliche Forumbeiträge/Codepastes: (Useful comments in our board / codepastes)
Template Switch for index.php
Board Navlist last posts

Edi: könnte man denn auch hier eine erweiterung einfügen?
Jam2: das web ist wie toyota.....
Edi: hö ?
Jam2: nichts ist unmöglich!


Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 11 - 21.11.2009 um 01:15 Uhr
danke

@dopekick: danke, ich hab selber noch viel mehr cached. Wars, Squads, Members, etc...

Wie ich schon irgendwo anders gesagt habe, ich hab inzwisschen schon ziemlich viel im code geaendert, das es fuer mich schwierig wird ein modul rauszubringen.

Ich hab CS in mein eigene SVN umgebung als svn export, damit ich neue patch von CS mergen kann mit meine code, aber das ist noch immer viel aufwand...

Nur im news hab ich dinge wie geloescht status, edit locking und option setting "max_navlist_title" (maximal laenge von titel in navlist) mit anruf von eigenen cs_textcut() function. Das ist nur ein modul von viele aenderungen...

Grundsaetlich, ich hasse es das daten tatsaechlich geloescht werden... Da hab ich lieber ein "geloescht" status, damit wenn jemand (un)absichtlich was loescht ueber den interface, das ich daten einfacher zurueck holen kann. Anderes ist das locking mechanismus, das 2 leute nicht gleichzeitig an selben artikel/news editieren koennen um zu verhindern das daten verloren gehen...


Zuletzt editiert von Mindcrime am 21.11.2009 um 01:23 Uhr (1x Editiert)
Inaktiv
|
Fr33z3m4n ClanSphere Team


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# Antwort: 12 - 21.11.2009 um 08:23 Uhr
Hi,

existieren noch einige Fehler.
Wenn man im Debug-Modus ist, und der Cache z.b. von der News neu erstellt wird, wird auch das debug-System mit in den Cache genommen.

Im Entdefekt speichert du ja nur den HTML code in die DB weg.
vlt. Sollte das Cachesystem im Debug-Modus ausgeschaltet werden.


------------------
mfg
Patrick "Fr33z3m4n" Jaskulski

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 13 - 21.11.2009 um 13:04 Uhr
Man kann debug als teil des keys machen, die man benutzt um in die datenbank zu speicheren, dafuer ist der key ja da...

Aber ausschalten ist da besser denk ich mal, weil waehrend debug man am liebsten eh kein cache benutzen wurde...


Zuletzt editiert von Mindcrime am 21.11.2009 um 13:05 Uhr (1x Editiert)
Inaktiv
|
Fr33z3m4n ClanSphere Team


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# Antwort: 14 - 21.11.2009 um 13:06 Uhr
hmm stimmt auch, habs schonmal in den core eingepflegt, vlt. werde ich das mit debug und dem key realisieren, wobei ich sagen muss, debug sollte kein Caching haben, debug ist ja für den Entwickler sehr interssant.


------------------
mfg
Patrick "Fr33z3m4n" Jaskulski

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 15 - 21.11.2009 um 13:14 Uhr
Fix fuer kein cache benutzung waehrend debug:

Am start von cs_datacache_load(), cs_datacache_save(), cs_datacache_create() zufuegen in system/runstartup/datacache.php:
global $cs_main;

// do not use datacache during debug
if (!empty($cs_main['debug']))
return false;


Zuletzt editiert von Mindcrime am 21.11.2009 um 13:15 Uhr (1x Editiert)
Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 16 - 25.11.2009 um 16:29 Uhr
Ein anderer wichtiger punkt. Die sprache wird immer ein wichtiger teil des keys sein.

Also sollte der key mindestens folgendes teil befassen:

 
1.
1. / 2. / ... 
 'lang='.$account['users_lang']


Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 17 - 25.11.2009 um 20:29 Uhr
das könntest doch auch direkt in die funktion einbauen


------------------
www.laszlokorte.de

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 18 - 26.11.2009 um 00:24 Uhr
nee, weil nicht jede cache braucht sprache, nur die teile die dinge wie $cs_lang benutzen...


Inaktiv
|
Dobi


Rock the board



Herkunft: Erde
Beiträge: 59
# Antwort: 19 - 03.12.2009 um 16:13 Uhr
Also ich mag die Idee mit dem Caching.

Ich sehe allerdings noch Probleme:

1.
Angenommen man hat die Begrenzung der news/recent auf zwei Einträge pro Seite eingestellt.
Das Caching stellt man auf 15 min ein.
Es ist noch kein Cache erstellt.
Es sind 4 News geschrieben.

Ein User ruft die Seite auf. news/recent zeigt die News 3 und 4 (newsids) an - gleichzeitig wird gecached.

Der User wechselt nach 5 min auf Seite 2 - hier werden News id 1 und 2 angezeigt und gecached.

Ein Mitglied schreibt nach weiteren 5 min eine neue News.

Folgendes passiert nun.

Die Homepage zeigt auf news/recent (Seite 1) weitere 5 min. die News 3 und 4 an.
Dann läuft der erste Cache ab.
Es werden auf Seite 1 nun News 4 und 5 angezeigt.
Da Seite 2 noch 5 min im Cache ist, werden dort immer noch News 1 und 2 angezeigt.

News 3 ist 5 min nicht sichtbar.

Ich würde die zeitliche Begrenzung rauslassen und nur mit "cachen nach erstellen" arbeiten.

Das hat den Vorteil, dass die neuste News immer gleich angezeigt werden und durch zeitliche Verschiebungen keine News "mal eben kurz verschwinden". Wie es bei anderen Modulen aussieht, weiss ich nicht - muss ich noch bissel testen.


2.

Selbst wenn man sagt, der Cache wird immer nach Erstellen einer neuen News neu generiert, werden auch dynamische Teile im cache abgelegt. Bei den News z.B. die Anzahl der Kommentare. Es könnten 100 User Kommentare schreiben... in der Anzeige steht immer 0... wenn ich zwischenzeitlich keine News schreibe.

Stellt sich die Frage, ob man vielleicht nur den statischen Teil (Newstext usw) cached und dynamische Inhalte wie die Kommentaranzahl nachladen kann? (Beschneidet aber den Sinn ein wenig... )

Oder eben auch in news/com_create, _edit, _remove den Cache löschen lassen?


Ich hoffe es ist verständlich geschrieben, was ich meine. Ich hasse es sowas schriftlich zu erklären


Zuletzt editiert von Dobi am 03.12.2009 um 16:16 Uhr (1x Editiert)
Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 20 - 03.12.2009 um 18:44 Uhr
Ja, wenn du willst das der benutzer IMMER die letzten daten sieht, musst du dafuer sorgen das UEBERALL wo die daten moeglichweise geaendert werden, das du den cache loescht.
Dan machst DU aber EXTRA forderungen.
Die meisten leute brauchen diese EXTRA forderungen nicht und sind schon zufrieden wenn in die uebersichts liste (recent/list) die anzahl comments nicht ganz stimmt, aber wenn man die news ankuckt (view) das man alle comments dennoch sieht.
Aber selbst WENN du diese EXTRA forderungen hast, ist das caching system noch IMMER in die meisten faelle schneller. Weil es wird nicht JEDE minute ein neuen comment geschrieben oder eine neue news geschrieben...

Das caching system hat in prinzip NUR vorteile, aber WIEVIEL vorteil haengt von die persoehnliche situation und die persoehnliche forderungen ab von jede webseite...
Deswegen geb ich ja die beide beispiele von jede 15 minuten den cache loeschen (mir ist es wayne das ich inzwisschen eine neue news geschrieben habe, sehen sie es halt zwisschen 0-15 minuten spaeter), oder nur wenn wirklich was aendert den cache loeschen...


Inaktiv
|
Antworten: 48
Seite [1] 2 3 >


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo