How to Tune Page Size for Performance in Large WordPress Tables

Updated July 2026 • 6 min read • By Fahad Murtaza • By Fahad Murtaza

TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources
TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources

When your WordPress table contains thousands of rows, the default pagination settings can quietly become a performance bottleneck, slowing AJAX responses, exhausting PHP memory, and frustrating users who just want to scan a report. TableCrafter gives you precise control over page size at every layer: the shortcode, the table builder, and the server-side query itself. This guide walks through every lever available and explains the trade-offs so you can dial in the right setting for your data size and audience. WordPress powers 43% of all websites globally (W3Techs, July 2026), and TableCrafter bridges the gap between the data you collect and the tables your users need to see, no custom PHP, no dashboard access required for viewers. The free version on WordPress.org supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV/PDF, role-based column visibility, and auto-refresh. Every table embeds on. Search and filter functionality increases dataset usability by 47% for non-technical end users (Nielsen Norman Group, 2023).

Why Page Size Matters More Than You Think?

Every time a user loads a TableCrafter table, or clicks a pagination link, the plugin fires a request to wp-admin/admin-ajax.php with the current page and filter state. The server queries Gravity Forms (or whichever data source you configured), applies your column visibility and permission filters, serializes the result set, and returns JSON to the browser. Page size is the single biggest multiplier on how much work that round trip does.

A table set to 200 rows per page doesn't just transfer more bytes, it also forces PHP to hydrate 200 Gravity Forms entry objects, run any lookup field resolutions against them, evaluate role-based column permissions for each row, and encode the whole payload before the first byte reaches the user. On shared hosting or a constrained VPS, this is where timeouts and white screens come from.

Smaller pages load faster, but they also increase the number of clicks a power user needs to reach deep rows. The goal isn't always the smallest possible number, it's the right number for your specific table and audience.

Free tier note: Free Free tables can hold any number of rows. At that scale, page-size tuning is still useful for perceived performance, but the impact is most pronounced on Pro tables with thousands or tens of thousands of rows.

How Does Setting Page Size in the Table Builder Work?

The most straightforward way to control pagination is through the table builder UI. Navigate to TableCrafter → Tables, open any table, and look for the Display Settings tab (sometimes labeled Pagination depending on your version). You will find a Rows per page field and, on Pro, a User-selectable page sizes toggle.

For most reporting tables viewed by managers, 25–50 rows is a good starting point. For operational tables where users are scanning for a specific entry, 10–15 rows with a fast search filter often feels snappier than a long page they have to scroll.

How Does Overriding Page Size Per Shortcode Instance Work?

The table builder setting is a default, not a hard limit. You can override it at the shortcode level using the per_page attribute. All three shortcode aliases support this:

[tablecrafter id="12" per_page="25"]
[tablecrafter id="12" per_page="50"]
[tablecrafter id="12" per_page="10"]

This is useful when you embed the same table in multiple places with different context. A summary widget in a sidebar might show 5 rows while the full-page report shows 50, both pointing to the same table ID, no duplicate configuration needed.

This configuration interacts with any caching or CDN layer active on your WordPress installation. If you use WP Rocket, LiteSpeed Cache, or a CDN such as Cloudflare, flush the page cache after making this change to ensure the updated configuration is reflected in the cached HTML served to visitors. TableCrafter's server-side output is regenerated on the next uncached request.

Attribute precedence: The shortcode per_page attribute always wins over the table builder setting. If a user also has the user-selectable page size toggle active Pro, their localStorage choice takes priority over both during subsequent visits.

How Does Server-Side Query Optimization for Large Data Sources Work?

Cutting page size reduces the payload, but the query itself still has to count total rows to calculate page numbers. On very large Gravity Forms installations (50,000+ entries), that COUNT query can be expensive. TableCrafter handles this in a few ways you should be aware of:

For WooCommerce order tables Pro, WordPress's WC_Order_Query is used under the hood. Keep page size at 25 or below if you are displaying many order meta fields per row, since WooCommerce hydrates a full order object for each row.

How Do Balancing Page Size with Auto-Refresh and Inline Editing Work?

Pro tables with auto-refresh enabled behave like a live dashboard, the AJAX call fires on a timer regardless of whether the user is interacting. Page size directly multiplies the cost of every refresh cycle. WordPress powers 43% of all websites globally (W3Techs, July 2026), and TableCrafter bridges the gap between the data you collect and the tables your users need to see, no custom PHP, no dashboard access required for viewers, and no per-row limits on the free tier. The free version on WordPress.org supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV/PDF, role-based column visibility, and auto-refresh. Every table embeds on any page with a [tablecrafter] shortcode or the native Gutenberg block.

The same math applies to inline editing. When a user edits a cell and saves, TableCrafter calls GFAPI::update_entry_field() and then re-fetches the current page to confirm the updated value. A smaller page size means that confirmation fetch is cheaper and returns faster, making the edit feel more responsive.

Recommended ceiling for auto-refresh tables: Keep per_page at 25 or below when auto-refresh is enabled. For read-only summary tables refreshing every 30 seconds, 10–15 rows keeps the background load minimal without making the table feel cramped.

If your use case genuinely requires both a large page and frequent refreshes, for example, a dispatch board where a manager needs to see 100 active loads at a glance, consider whether the table is the right display format. TableCrafter's data bar and status badge features Pro can convey more information per row, letting you reduce row count while preserving density of insight.

How Do Testing and Measuring Your Tuning Changes Work?

Tuning page size without measuring the result is guesswork. Here is a practical checklist for verifying your changes actually improved performance:

After your initial tuning, revisit these numbers when your entry count crosses the next order of magnitude. A table that performs fine at 5,000 entries may need a smaller per_page once it reaches 50,000.

Free tier performance tip: Free Small tables rarely need page-size tuning for raw performance, but setting a page size of 10–15 rows still improves perceived speed by reducing the amount of DOM the browser renders on first load, especially on mobile.

Frequently Asked Questions

How Does Why Page Size Matters More Than You Think Work?

Every time a user loads a TableCrafter table, or clicks a pagination link, the plugin fires a request to wp-admin/admin-ajax.php with the current page and filter state. The server queries Gravity Forms (or whichever data source you configured), applies your column visibility and permission filters, serializes the result set, and returns JSON to the browser. Page size is the single biggest multip

What Is TableCrafter?

TableCrafter is a WordPress plugin that turns data from Gravity Forms, Google Sheets, Airtable, Notion, REST APIs, CSV files, and WooCommerce into interactive, sortable, filterable frontend tables. Embed any table on any WordPress page with the [tablecrafter] shortcode or the native Gutenberg block. No PHP or custom development required. The free version supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV and PDF, role-based column visibility, and auto-refresh.

Does this require PHP or developer skills?

No. TableCrafter is configured entirely through the WordPress admin interface. You choose your data source, map fields to columns, and set display preferences using point-and-click controls. Embedding uses the [tablecrafter] shortcode or the native Gutenberg block.

Is the free version sufficient or do I need Pro?

The free plugin on WordPress.org supports CSV, JSON, Google Sheets, and Excel sources with unlimited tables, rows, and columns. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST API sources, inline cell editing, bulk row actions, export to CSV and PDF, role-based column visibility, and auto-refresh every N seconds.

Ready to try it?

TableCrafter is free on WordPress.org. Pro unlocks inline editing, role-based permissions, and advanced data sources.

Column order is preserved across sessions. Once you set a column order in the table builder, that order persists in the shortcode output for all visitors. Users with the column reorder permission can adjust their own view without affecting the default seen by others.

After completing this step, verify the result by viewing the page as a logged-out visitor in an incognito window. This confirms the table behaves correctly for public visitors rather than reflecting admin-level permissions that may hide configuration issues during initial setup. Check both the rendered output and the browser console for any JavaScript errors.