<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial, helvetica, sans-serif;font-size:12pt"><DIV></DIV>
<DIV>When I develop modules, I have&nbsp;Devel turned on. One main thing I look for is repeated queries. Unfortunately, I find a lot of them, especially in other people's modules. I'm glad to see global caching available in D7 so that sub-functions don't have to repeat information gathering that another function has already done.</DIV>
<DIV>&nbsp;</DIV>
<DIV>As a teacher once explained to me, "All generalities are false, including this one." Some of your statements are decent guidleines, but hardly universally true. For example, "avoid ... hook_init" -- sometimes it is necessary, so one must be discerning in applying this rule.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Indeed using cache is a balancing act. When I added caching to one of my modules, I checked its performance impact. Using the main cache table made things worse because cache_get queries were taking longer than no caching at all. So I created my own cache table and it solved the performance issue that I was attempting to fix. I still don't think it was a good substitue for a properly tuned database server, but few people have those.</DIV>
<DIV><BR>&nbsp;</DIV>
<P><FONT color=#ff007f size=4 face="bookman old style, new york, times, serif"><EM><STRONG>Nancy</STRONG></EM></FONT></P>
<P>&nbsp;</P>
<P><FONT face="arial, helvetica, sans-serif">Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.</FONT></P>
<DIV><BR></DIV>
<DIV style="FONT-FAMILY: arial, helvetica, sans-serif; FONT-SIZE: 12pt"><BR><FONT size=2 face=Tahoma>
<DIV style="FONT-FAMILY: Courier New, monaco, monospace, sans-serif; FONT-SIZE: 10pt">
<HR SIZE=1>
</DIV>
<DIV style="FONT-FAMILY: Courier New, monaco, monospace, sans-serif; FONT-SIZE: 10pt"><B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Pierre Rineau (in response to </FONT>Andreas Laesser)<BR>&gt; <BR>&gt; is there a way to improve mysql queries from several modules? I've loaded <BR>&gt; aprox. 40 modules and it slows the site terrible... <BR><BR>The "dynamic" oriented approche makes most of the developers unable to<BR>tell when they should or should not make queries.<BR><BR>The cache oriented API (i.e. using cache_get() and cache_set()<BR>everywhere) is often wrong designed. cache_get() and cache_set() used<BR>several time on small caches will generate a lot of queries where the<BR>real caching points should be something like only entry and output<BR>points of APIs. Sometime, recalculate a small amount of data is faster<BR>than fetching the result from a cache (it needs profiling to know<BR>exactly when and where).<BR><BR>To reduce queries, use
 modules that relies on field as often as you can,<BR>because CCK will cache full node objects with fields content therefore<BR>will reduce greatly number of queries.<BR><BR>Do profiling, remove modules that does those queries. If you use Views a<BR>lot, it worth the shot switching to node display mode, using build<BR>modes, it will make CCK cache everything (field content etc) instead of<BR>using custom view based display mode that could (in certain use cases<BR>only) generate a lot more queries.<BR><BR>Avoid node messing modules that uses a lot hook_nodeapi() because those<BR>calls will never be cached anywhere, since CCK does only cache field<BR>content and such.<BR><BR>When you get using more than ~30 modules, you may have to refactor your<BR>site and write some bits of custom glue instead of using too generic<BR>modules that attempt to do all consistency checks for you, you will gain<BR>a lot in term of performances.<BR><BR>Logged in users are
 always a problem and there is no magical solution.<BR>Avoid modules that uses hook_init(), they will also slow the bootstrap<BR>process therefore create a constant bottleneck in the bootstrap itself,<BR>even for non logged users and 404/403 hits.</DIV></DIV></div></body></html>