This post is basically a cross link to the work being done on optimizing display of object name and url for Categories.
https://openacs.org/forums/message-view?message_id=85086
When an approach is implemented for Categories it's likely that the same design pattern can be used to rewrite dotLRN portlets queries so they don't have to get a url for each object they display.
Here are some typical dotLRN portlet queries from SloanSpace. Not horrible, but when there a many portlets on a page it can get slow.
305 ms main dbqd.news-portlet.www.news-portlet.select_news_items: select nsdb0
select news_items_approved.package_id,
acs_object.name(apm_package.parent_id(news_items_approved.package_id)) as parent_name,
(select site_node.url(site_nodes.node_id)
from site_nodes
where site_nodes.object_id = news_items_approved.package_id) as url,
news_items_approved.item_id,
news_items_approved.publish_title,
news_items_approved.publish_date
from news_items_approved
where news_items_approved.publish_date < sysdate
and (news_items_approved.archive_date >= sysdate or news_items_approved.archive_date is null)
and news_items_approved.package_id in (0, 32240, 32607, 33345, 543285, 187532, 184299, 1801180, 176155, 175668, 185255, 2336625, 2353505, 2398529, 502752, 69585, 40628, 31871, 2449158, 2451203, 36745, 2275302, 79549, 2478821, 2549759, 43319, 66539, 110607, 193287, 193807, 39467, 497256, 2448337, 3416372, 3414701, 37137, 2919495, 2911709, 3016932, 2973468, 2950109, 2871629, 3060733, 3117011, 3152632, 2689331, 108331, 3235837, 3225610, 68898, 2080663, 73641, 143938, 70331, 53851)
order by parent_name,
news_items_approved.publish_date desc,
news_items_approved.publish_title
111 ms main dbqd.faq-portlet.www.faq-portlet.select_faqs: select nsdb0
select acs_objects.context_id as package_id,
acs_object.name(apm_package.parent_id(acs_objects.context_id)) as parent_name,
(select site_node.url(site_nodes.node_id)
from site_nodes
where site_nodes.object_id = acs_objects.context_id) as url,
faqs.faq_id,
faqs.faq_name
from faqs,
acs_objects
where faqs.faq_id = acs_objects.object_id
and faqs.disabled_p <> 't'
and acs_objects.context_id in (0, 32219, 32588, 33320, 543276, 187514, 184284, 1801171, 176133, 175646, 185234, 2336616, 2353496, 2398520, 502743, 69576, 40601, 31848, 2449149, 2451194, 36723, 2275293, 79526, 2478812, 2549750, 43296, 66516, 110515, 193260, 193788, 39444, 497247, 2448328, 3416363, 3414692, 37114, 2919486, 2911654, 3016923, 2973459, 2950100, 2871583, 3060724, 3117002, 3152623, 2689322, 108241, 3235828, 3225601, 68889, 2080654, 73543, 143922, 70248, 53749)
order by lower(faq_name)
121 ms main dbqd.forums-portlet.www.forums-portlet.select_forums: select nsdb0
select forums_forums.package_id,
acs_object.name(apm_package.parent_id(forums_forums.package_id)) as parent_name,
(select site_node.url(site_nodes.node_id)
from site_nodes
where site_nodes.object_id = forums_forums.package_id) as url,
forums_forums.forum_id,
forums_forums.name,
case when last_modified > (sysdate - 1) then 't' else 'f' end as new_p
from forums_forums_enabled forums_forums,
acs_objects
where acs_objects.object_id = forums_forums.forum_id and
forums_forums.package_id in (0,32154,32531,33256,543253,187468,184226,1801148,175931,175598,185190,2336593,2353473,2398497,502720,69553,40534,31785,2449126,2451171,36660,2275270,79268,2478789,2549727,43229,66447,110175,193100,193701,39387,497224,2448305,3416336,3414669,37049,2919463,2911706,3016900,2973436,2950077,2871626,3060701,3116979,3152600,2689299,108044,3235805,3225578,68866,2080631,73273,143687,70003,53473)
order by parent_name,
forums_forums.name