Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 86 additions & 72 deletions render_boost.module
Original file line number Diff line number Diff line change
Expand Up @@ -86,20 +86,24 @@ function render_boost_checksum($element) {
return $checksum;
}

function render_boost_sanitize_form(&$element){
/**
*
*/
function render_boost_sanitize_form(&$element) {
static $deep;
if(!$deep){

if (!$deep) {
$deep = 1;
}else{
$deep ++;
}

if($deep > 3){
else {
$deep++;
}

if ($deep > 3) {
return;
}
if(is_array($element)){

if (is_array($element)) {
if (isset($element['form_token'])) {
unset($element['form_token']);
}
Expand All @@ -115,17 +119,20 @@ function render_boost_sanitize_form(&$element){
if (isset($element['#attached'])) {
unset($element['#attached']);
}
foreach($element as $key => $value){
foreach ($element as $key => $value) {
render_boost_sanitize_form($value);
$element[$key] = $value;
}
}
}

function render_boost_sanitize_objects(&$item, $key){
if(is_object($item)){
/**
*
*/
function render_boost_sanitize_objects(&$item, $key) {
if (is_object($item)) {
$item = render_boost_get_object_values($item);
if(isset($item['created'])){
if (isset($item['created'])) {
unset($item['created']);
}
}
Expand Down Expand Up @@ -158,19 +165,22 @@ function render_boost_store_cache($checksum, $data) {
$config = variable_get('render_boost_settings');

$expire_after = $config['expire'] ? $config['expire'] : 3600;
$expire = REQUEST_TIME + $expire_after ;
$expire = REQUEST_TIME + $expire_after;
cache_set($checksum, $data, 'cache_render', $expire);
$_render_boost_devel['store'] = $_render_boost_devel['store'] + (render_boost_microtime_float() - $now);
}

function render_boost_store_checksums($checksum = NULL){
/**
*
*/
function render_boost_store_checksums($checksum = NULL) {
static $checksums;
if(!$checksums){

if (!$checksums) {
$checksums = array();
}
if($checksum){

if ($checksum) {
$checksums[] = $checksum;
}
return $checksums;
Expand All @@ -195,41 +205,41 @@ function render_boost_get_cache($checksum) {

if ($cache = cache_get($checksum, 'cache_render')) {

if(isset($cache->data['js'])){
foreach($cache->data['js'] as $key => $val){
if (isset($cache->data['js'])) {
foreach ($cache->data['js'] as $key => $val) {
drupal_add_js($key, $val['type']);
}
}
if(isset($cache->data['css'])){
foreach($cache->data['css'] as $key => $val){
if (isset($cache->data['css'])) {
foreach ($cache->data['css'] as $key => $val) {
drupal_add_css($key, $val);
}
}
if(isset($cache->data['settings'])){
foreach($cache->data['settings'] as $key => $val){
if (isset($cache->data['settings'])) {
foreach ($cache->data['settings'] as $key => $val) {
drupal_add_js($val, 'setting');
}
}
$return = '<!-- cached:' . $checksum. ' -->' . $cache->data['output'] . '<!-- /cached:' . $checksum. ' -->';

$return = '<!-- cached:' . $checksum . ' -->' . $cache->data['output'] . '<!-- /cached:' . $checksum . ' -->';
}
$checksums[$checksum] = $return;
render_boost_store_checksums($checksum);
$_render_boost_devel['get'] = $_render_boost_devel['get'] + (render_boost_microtime_float() - $now);

return $return ;
return $return;
}

/**
* Process form states and attachments fo cached data.
*/
function render_boost_enable_forms_states_attaches($elements) {
if (!empty($elements['#states'])) {
// drupal_process_states($elements);
// drupal_process_states($elements);
}

if (!empty($elements['#attached'])) {
// drupal_process_attached($elements);
// drupal_process_attached($elements);
}
foreach ($elements as $key => $val) {
if (is_array($val)) {
Expand All @@ -242,20 +252,19 @@ function render_boost_enable_forms_states_attaches($elements) {
* Main function. Replace drupal_render function.
*/
function render_boost_drupal_render(&$elements) {



$output = render_boost_render($elements);
preg_match_all('/<!-- render_boost_form:(.*?):(.*?) --\>/', $output, $matches);

if (!empty($matches[0])) {
$form_storage = render_boost_form_storage();

foreach ($matches[2] as $key => $form_serial_number) {
$rendered_element = $form_storage[$form_serial_number]['render'];
$output = str_replace($matches[0][$key], $rendered_element, $output);
}
}

return $output;
}

Expand All @@ -271,12 +280,12 @@ function render_boost_render(&$elements) {
if ($elements === $empty_array) {
return "";
}

if (isset($elements['#markup'])) {
// No cache for markup.
return render_boost_original_render($elements);
}

if (isset($elements['#ajax'])) {
// No cache for markup.
return render_boost_original_render($elements);
Expand Down Expand Up @@ -306,7 +315,7 @@ function render_boost_render(&$elements) {

$output = render_boost_get_cache($check_sum);
if (FALSE === $output) {

$scripts_before = drupal_add_js();
$css_before = drupal_add_css();
$output = render_boost_original_render($elements);
Expand All @@ -318,31 +327,31 @@ function render_boost_render(&$elements) {
$scripts_keys_before = array_keys($scripts_before);
$scripts_keys_after = array_keys($scripts_after);

if($diff = array_diff($scripts_keys_after,$scripts_keys_before)){
foreach($diff as $key){
if ($diff = array_diff($scripts_keys_after, $scripts_keys_before)) {
foreach ($diff as $key) {
$data['js'][$key] = $scripts_after[$key];
}
}

$data_keys_before = array_keys($scripts_before['settings']['data']);
$data_keys_after = array_keys($scripts_after['settings']['data']);

if($diff = array_diff($data_keys_after,$data_keys_before)){
foreach($diff as $key){
if ($diff = array_diff($data_keys_after, $data_keys_before)) {
foreach ($diff as $key) {
$data['settings'][$key] = $scripts_after['settings']['data'][$key];
}
}

$css_keys_before = array_keys($css_before);
$css_keys_after = array_keys($css_after);
if($diff = array_diff($css_keys_after,$css_keys_before)){
foreach($diff as $key){

if ($diff = array_diff($css_keys_after, $css_keys_before)) {
foreach ($diff as $key) {
$data['css'][$key] = $css_after[$key];
}
}
render_boost_store_cache($check_sum, $data);

}
}
}
Expand Down Expand Up @@ -529,68 +538,73 @@ function render_boost_original_render(&$elements) {
return $output;
}

function render_boost_form_storage($form_id = NULL, $form_render = NULL){
/**
*
*/
function render_boost_form_storage($form_id = NULL, $form_render = NULL) {
static $form_storage;
if($form_render){
if ($form_render) {
if ($cache = cache_get($form_id, 'cache_render')) {
$subcaches = cache_get_multiple($cache->data, 'cache_render');

$checksums = &drupal_static('render_boost_get_cache');

$tmplist = array();
foreach($cache->data as $form_chksum){
foreach ($cache->data as $form_chksum) {
$tmplist[$form_chksum] = $form_chksum;
}
foreach($subcaches as $checksum => $subcache){
foreach ($subcaches as $checksum => $subcache) {
unset($tmplist[$checksum]);
if(isset($checksums[$checksum])){

if (isset($checksums[$checksum])) {
continue;
}
$checksums[$checksum] = $subcache->data['output'];
if(isset($subcache->data['js'])){
foreach($subcache->data['js'] as $key => $val){
if (isset($subcache->data['js'])) {
foreach ($subcache->data['js'] as $key => $val) {
drupal_add_js($key, $val['type']);
}
}
if(isset($subcache->data['css'])){
foreach($subcache->data['css'] as $key => $val){
if (isset($subcache->data['css'])) {
foreach ($subcache->data['css'] as $key => $val) {
drupal_add_css($key, $val);
}
}
if(isset($subcache->data['settings'])){
foreach($subcache->data['settings'] as $key => $val){
if (isset($subcache->data['settings'])) {
foreach ($subcache->data['settings'] as $key => $val) {
drupal_add_js($val, 'setting');
}
}
}
foreach($tmplist as $form_chksum){

foreach ($tmplist as $form_chksum) {
$checksums[$form_chksum] = '';
}
$form_storage[] = array(
'elements' => $form_render,
'render' => render_boost_original_render($form_render)
'render' => render_boost_original_render($form_render),
);
}else{

}
else {

$before = render_boost_store_checksums();
$form_storage[] = array(
'elements' => $form_render,
'render' => render_boost_original_render($form_render)
'render' => render_boost_original_render($form_render),
);
$after = render_boost_store_checksums();
if($diff = array_diff($after,$before)){

if ($diff = array_diff($after, $before)) {
$config = variable_get('render_boost_settings');
$expire_after = $config['expire'] ? $config['expire'] : 3600;
$expire = REQUEST_TIME + $expire_after ;
$expire = REQUEST_TIME + $expire_after;
cache_set($form_id, $diff, 'cache_render', $expire);
}
}

return count($form_storage) - 1;
}else{
}
else {
return $form_storage;
}
}