Index: src/wp-includes/class-wp-customize-manager.php
===================================================================
--- src/wp-includes/class-wp-customize-manager.php	(revision 42202)
+++ src/wp-includes/class-wp-customize-manager.php	(working copy)
@@ -236,6 +236,8 @@
 	 */
 	private $_changeset_data;
 
+	protected static $can_customize = false;
+
 	/**
 	 * Constructor.
 	 *
@@ -892,6 +894,7 @@
 	 * @since 3.4.0
 	 */
 	public function wp_loaded() {
+		self::$can_customize = current_user_can( 'customize' );
 
 		// Unconditionally register core types for panels, sections, and controls in case plugin unhooks all customize_register actions.
 		$this->register_panel_type( 'WP_Customize_Panel' );
@@ -1678,7 +1681,7 @@
 		$args = array_merge(
 			array(
 				'exclude_changeset' => false,
-				'exclude_post_data' => ! current_user_can( 'customize' ),
+				'exclude_post_data' => ! self::$can_customize,
 			),
 			$args
 		);
Index: src/wp-includes/class-wp-customize-panel.php
===================================================================
--- src/wp-includes/class-wp-customize-panel.php	(revision 42202)
+++ src/wp-includes/class-wp-customize-panel.php	(working copy)
@@ -132,6 +132,8 @@
 	 */
 	public $active_callback = '';
 
+	protected static $caps = array();
+
 	/**
 	 * Constructor.
 	 *
@@ -226,8 +228,21 @@
 	 * @return bool False if theme doesn't support the panel or the user doesn't have the capability.
 	 */
 	final public function check_capabilities() {
-		if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) {
-			return false;
+		if ( $this->capability ) {
+			$capability = (array) $this->capability;
+
+			if ( 1 === count( $capability ) ) {
+				if ( ! isset( self::$caps[ $capability[0] ] ) ) {
+					self::$caps[ $capability[0] ] = call_user_func_array( 'current_user_can', $capability );
+				}
+				if ( ! self::$caps[ $capability[0] ] ) {
+					return false;
+				}
+			} else {
+				if ( ! call_user_func_array( 'current_user_can', $capability ) ) {
+					return false;
+				}
+			}
 		}
 
 		if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) {
Index: src/wp-includes/class-wp-customize-section.php
===================================================================
--- src/wp-includes/class-wp-customize-section.php	(revision 42202)
+++ src/wp-includes/class-wp-customize-section.php	(working copy)
@@ -143,6 +143,8 @@
 	 */
 	public $description_hidden = false;
 
+	protected static $caps = array();
+
 	/**
 	 * Constructor.
 	 *
@@ -244,8 +246,21 @@
 	 * @return bool False if theme doesn't support the section or user doesn't have the capability.
 	 */
 	final public function check_capabilities() {
-		if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) {
-			return false;
+		if ( $this->capability ) {
+			$capability = (array) $this->capability;
+
+			if ( 1 === count( $capability ) ) {
+				if ( ! isset( self::$caps[ $capability[0] ] ) ) {
+					self::$caps[ $capability[0] ] = call_user_func_array( 'current_user_can', $capability );
+				}
+				if ( ! self::$caps[ $capability[0] ] ) {
+					return false;
+				}
+			} else {
+				if ( ! call_user_func_array( 'current_user_can', $capability ) ) {
+					return false;
+				}
+			}
 		}
 
 		if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) {
Index: src/wp-includes/class-wp-customize-setting.php
===================================================================
--- src/wp-includes/class-wp-customize-setting.php	(revision 42202)
+++ src/wp-includes/class-wp-customize-setting.php	(working copy)
@@ -148,6 +148,8 @@
 	 */
 	protected $is_multidimensional_aggregated = false;
 
+	protected static $caps = array();
+
 	/**
 	 * Constructor.
 	 *
@@ -816,9 +818,23 @@
 	 * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true.
 	 */
 	final public function check_capabilities() {
-		if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) )
-			return false;
+		if ( $this->capability ) {
+			$capability = (array) $this->capability;
 
+			if ( 1 === count( $capability ) ) {
+				if ( ! isset( self::$caps[ $capability[0] ] ) ) {
+					self::$caps[ $capability[0] ] = call_user_func_array( 'current_user_can', $capability );
+				}
+				if ( ! self::$caps[ $capability[0] ] ) {
+					return false;
+				}
+			} else {
+				if ( ! call_user_func_array( 'current_user_can', $capability ) ) {
+					return false;
+				}
+			}
+		}
+
 		if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) )
 			return false;
 
