Issue #1956914 by chaby, pounard: Use a single cache_get_multiple() call per region instead of a cache_get() per block in _block_render_blocks().
parent
0758630ac4
commit
43c8918f96
|
@ -840,15 +840,37 @@ function _block_render_blocks($region_blocks) {
|
||||||
// preserve the submission of forms in blocks, by fetching from cache only
|
// preserve the submission of forms in blocks, by fetching from cache only
|
||||||
// if the request method is 'GET' (or 'HEAD').
|
// if the request method is 'GET' (or 'HEAD').
|
||||||
$cacheable = !count(module_implements('node_grants')) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'HEAD');
|
$cacheable = !count(module_implements('node_grants')) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'HEAD');
|
||||||
|
|
||||||
|
// Proceed to a loop over all blocks in order to compute their respective
|
||||||
|
// cache identifiers, this allows us to do one single cache_get_multiple()
|
||||||
|
// call instead of doing one cache_get() call per block.
|
||||||
|
$cached_blocks = array();
|
||||||
|
if ($cacheable) {
|
||||||
|
|
||||||
|
$cids = array();
|
||||||
|
foreach ($region_blocks as $key => $block) {
|
||||||
|
if (!isset($block->content)) {
|
||||||
|
if (($cid = _block_get_cache_id($block))) {
|
||||||
|
$cids[] = $cid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cids) {
|
||||||
|
$cached_blocks = cache_get_multiple($cids, 'cache_block');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($region_blocks as $key => $block) {
|
foreach ($region_blocks as $key => $block) {
|
||||||
// Render the block content if it has not been created already.
|
// Render the block content if it has not been created already.
|
||||||
if (!isset($block->content)) {
|
if (!isset($block->content)) {
|
||||||
// Erase the block from the static array - we'll put it back if it has
|
// Erase the block from the static array - we'll put it back if it has
|
||||||
// content.
|
// content.
|
||||||
unset($region_blocks[$key]);
|
unset($region_blocks[$key]);
|
||||||
// Try fetching the block from cache.
|
|
||||||
if ($cacheable && ($cid = _block_get_cache_id($block)) && ($cache = cache_get($cid, 'cache_block'))) {
|
// Try fetching the block from the previously loaded cache entries.
|
||||||
$array = $cache->data;
|
if (($cid = _block_get_cache_id($block)) && isset($cached_blocks[$cid])) {
|
||||||
|
$array = $cached_blocks[$cid]->data;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$array = module_invoke($block->module, 'block_view', $block->delta);
|
$array = module_invoke($block->module, 'block_view', $block->delta);
|
||||||
|
|
Loading…
Reference in New Issue