Antworten: 48
|
|||
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 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 Weltmeister Herkunft: Cambridge Beiträge: 7300 |
# Antwort: 3 - 20.11.2009 um 16:05 Uhr
done guck mir das morgen mal an |
||
Inaktiv |
|||
ichraffsnicht 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 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 Specialist Herkunft: Grevenbroich Beiträge: 2142 |
# Antwort: 6 - 20.11.2009 um 18:17 Uhr
nice work ! ------------------ |
||
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 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...
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 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 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:
|
||
Inaktiv |
|||
SCHIRI 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
|
Sie müssen sich registrieren, um zu antworten. |