node_load() is statically cached when certain conditions are met: http://api.drupal.org/api/function/node_load/6 For D6, you can avoid node_load() in many situations by re-using the path argument: http://api.drupal.org/api/function/menu_get_object/6 For D7, node_load() will be cached: http://drupal.org/node/111127 Views avoids the use of node_load() in many cases (but not all) by directly querying only the required data in a single query. sun
-----Original Message----- From: development-bounces@drupal.org [mailto:development-bounces@drupal.org] On Behalf Of Dave Fletcher Sent: Thursday, January 15, 2009 10:58 PM To: development@drupal.org Subject: Re: [development] load node globally
Since I see so many node loads in block visibility and in modules that do $node manipulations and so forth, which would make me think that sometimes many node loads might occur on some pages and tens perhaps when you add contributed modules on that, I was wondering why not just load $node globally on node/<num>/* pages like we do with $user to avoid any extra node_loads?
I think it's pretty rare that the same node gets loaded twice. Well, one example might be a sidebar block with a view of full nodes or teasers in it. If one of the nodes was the URL target, it would be loaded once for the page, once for the sidebar.
And how would views take advantage of it? node_load is just smart enough not to load the node twice? I think there's caching modules (e.g. the node cache feature of memcached) that do this type of thing. I'd look into cache modules if you're worried about multiple loads. Oh and of course, the built-in page cache for anon visitors makes this a non-issue if the bulk of your traffic is anon.
Cheers,
--fletch