Performance
Every wrapper has some overhead. We do our best to make this number as small as possible. One unique View or Card on a page would only effect this by 0.01 seconds* overhead compared to the usual way with coding. Itβs impossible to notice these tiny numbers visually without testing it.
*This number was given by our tests, codes of the tests are provided below. Numbers can be different depending on your hosting opportunities.
Test of a View
/**
* Goal: check overhead of using the Advanced Views (shortcode) way comparing with the clear code way without any caching
*
* Test: Render of 4 post (1 post field + 4 ACF fields) for each way (clear code/shortcode)
* (every way has its own posts and own ACF Group per each post, so there is totally no internal cache in the test)
*
* Result: overhead for one View is 9 MS (14 MS per post for the shortcode way VS 5 MS per post for the clear code way, 280%)
* (55 MS for the shortcode way VS 20 MS for the clear code way. (55 MS - 20 MS) / 4 Views = 9 MS per View)
*/
add_shortcode('view-test', function () {
$shortcodePostIds = [1093, 2012, 2014, 2016,];
$viewIds = [895, 2087, 2088, 2089];
$codePostIds = [2170, 2172, 2174, 2176,];
$shortcodeMarkup = '';
$codeMarkup = '';
$shortcodeStartTime = microtime(true);
for ($i = 0; $i < 4; $i++) {
$shortcodeMarkup .= do_shortcode(
sprintf(
'[acf_views view-id="%s" object-id="%s"]',
$viewIds[$i],
$shortcodePostIds[$i]
)
);
}
$timeForShortcode = microtime(true) - $shortcodeStartTime;
$timeForShortcodeInMs = round($timeForShortcode * 1000);
$codeStartTime = microtime(true);
foreach ($codePostIds as $codePostId) {
$postTitle = get_the_title($codePostId);
// Text
$description = get_field('description2', $codePostId);
// Date Picker d/m/Y
$year = get_field('year2', $codePostId);
// Wysiwyg Editor
$longDescription = get_field('long_description2', $codePostId);
// Number
$price = get_field('price2', $codePostId);
$codeMarkup .= '<div class="acf-view acf-view--id--895 acf-view--object-id--{object-id}">';
$codeMarkup .= '<div class="acf-view__row _post_title">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $postTitle);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row description">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $description);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row year">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $year);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row long_description">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $longDescription);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row price">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $price);
$codeMarkup .= '</div>';
$codeMarkup .= '</div>';
}
$timeForCode = microtime(true) - $codeStartTime;
$timeForCodeInMs = round($timeForCode * 1000);
$overheadForOneViewInMs = round((($timeForShortcode / 4) - ($timeForCode / 4)) * 1000);
$overheadForOneViewInPercentages = round((($timeForShortcode / 4) / ($timeForCode / 4)) * 100);
return $codeMarkup . sprintf('<h3>Time for 4 posts with code in ms: %s</h3>', $timeForCodeInMs)
. $shortcodeMarkup . sprintf('<h3>Time for 4 posts with shortcode in ms: %s</h3>', $timeForShortcodeInMs)
. sprintf('<h3>Overhead for one View in ms: %s</h3>', $overheadForOneViewInMs)
. sprintf('<h3>Overhead for one View in percentages: %s</h3>', $overheadForOneViewInPercentages);
});
Test of a Card
/**
* Goal: check overhead of using the Advanced Views' Cards (shortcode) way comparing with the clear code way
*
* Test: Query and render 4 post (1 post field + 4 ACF fields) for each way (clear code/shortcode)
* (every way has its own posts and own ACF Group per each post, so there is no internal WP/ACF cache in the test)
*
* Result: overhead for one Card is 10 MS (147%)
* (31 MS for the shortcode way VS 21 MS for the clear code way. 31 MS - 21 MS = 10 MS)
*
* Note : Though Card uses View to render, common overhead is much lower than View's overhead * amount of posts in the results,
* because our plugin has internal cache and View's data & markup is cached.
* It means work by markup creation is done only once regardless of count of posts in Card's results.
*/
add_shortcode('card-test', function () {
$shortcodeMarkup = '';
$codeMarkup = '';
$shortcodeStartTime = microtime(true);
$shortcodeMarkup .= do_shortcode(' [acf_cards card-id="1129"]');
$timeForShortcode = microtime(true) - $shortcodeStartTime;
$timeForShortcodeInMs = round($timeForShortcode * 1000);
$codeStartTime = microtime(true);
$queryArgs = [
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => 4,
'order' => 'ASC',
'orderby' => 'none',
'post__in' => [
2170,
2172,
2174,
2176
]
];
$query = new \WP_Query($queryArgs);
$codePostIds = $query->get_posts();
foreach ($codePostIds as $codePostId) {
$postTitle = get_the_title($codePostId);
// Text
$description = get_field('description2', $codePostId);
// Date Picker d/m/Y
$year = get_field('year2', $codePostId);
// Wysiwyg Editor
$longDescription = get_field('long_description2', $codePostId);
// Number
$price = get_field('price2', $codePostId);
$codeMarkup .= '<div class="acf-view acf-view--id--895 acf-view--object-id--{object-id}">';
$codeMarkup .= '<div class="acf-view__row _post_title">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $postTitle);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row description">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $description);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row year">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $year);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row long_description">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $longDescription);
$codeMarkup .= '</div>';
$codeMarkup .= '<div class="acf-view__row price">';
$codeMarkup .= sprintf('<div class="acf-view__field">%s</div>', $price);
$codeMarkup .= '</div>';
$codeMarkup .= '</div>';
}
$timeForCode = microtime(true) - $codeStartTime;
$timeForCodeInMs = round($timeForCode * 1000);
$overheadForOneCardInMs = round(($timeForShortcode - $timeForCode) * 1000);
$overheadForOneCardInPercentages = round(($timeForShortcode / $timeForCode) * 100);
return $codeMarkup . sprintf('<h3>Time for query & display 4 posts with code in ms: %s</h3>', $timeForCodeInMs)
. $shortcodeMarkup . sprintf(
'<h3>Time for query & display 4 posts with shortcode in ms: %s</h3>',
$timeForShortcodeInMs
)
. sprintf('<h3>Overhead for one Card in ms: %s</h3>', $overheadForOneCardInMs)
. sprintf('<h3>Overhead for one Card in percentages: %s</h3>', $overheadForOneCardInPercentages);
});
Last updated