diff --git src/js/_enqueues/wp/updates.js src/js/_enqueues/wp/updates.js
index 1e101f0c59..6367ec0a08 100644
--- src/js/_enqueues/wp/updates.js
+++ src/js/_enqueues/wp/updates.js
@@ -139,6 +139,15 @@
 	 */
 	wp.updates.searchTerm = '';
 
+	/**
+	 * Minimum number of characters before an ajax search is fired.
+	 *
+	 * @since 5.4.0
+	 *
+	 * @type {number}
+	 */
+	wp.updates.searchMinCharacters = 2;
+
 	/**
 	 * Whether filesystem credentials need to be requested from the user.
 	 *
@@ -2502,6 +2511,15 @@
 			$pluginInstallSearch.attr( 'aria-describedby', 'live-search-desc' );
 		}
 
+		// Track the previous search string length.
+		var previousSearchStringLength = 0;
+		wp.updates.shouldSearch = function( searchStringLength ) {
+			var shouldSearch = searchStringLength >= wp.updates.searchMinCharacters ||
+				previousSearchStringLength >= wp.updates.searchMinCharacters;
+			previousSearchStringLength = searchStringLength;
+			return shouldSearch;
+		};
+
 		/**
 		 * Handles changes to the plugin search box on the new-plugin page,
 		 * searching the repository dynamically.
@@ -2509,7 +2527,8 @@
 		 * @since 4.6.0
 		 */
 		$pluginInstallSearch.on( 'keyup input', _.debounce( function( event, eventtype ) {
-			var $searchTab = $( '.plugin-install-search' ), data, searchLocation;
+			var $searchTab = $( '.plugin-install-search' ), data, searchLocation,
+				searchStringLength = $pluginInstallSearch.val().length;
 
 			data = {
 				_ajax_nonce: wp.updates.ajaxNonce,
@@ -2520,6 +2539,14 @@
 			};
 			searchLocation = location.href.split( '?' )[ 0 ] + '?' + $.param( _.omit( data, [ '_ajax_nonce', 'pagenow' ] ) );
 
+			// Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in.
+			if ( wp.updates.shouldSearch( searchStringLength ) ) {
+				$pluginInstallSearch.attr( 'autocomplete', 'off' );
+			} else {
+				$pluginInstallSearch.attr( 'autocomplete', 'on' );
+				return;
+			}
+
 			// Clear on escape.
 			if ( 'keyup' === event.type && 27 === event.which ) {
 				event.target.value = '';
@@ -2579,6 +2606,7 @@
 
 		if ( $pluginSearch.length ) {
 			$pluginSearch.attr( 'aria-describedby', 'live-search-desc' );
+
 		}
 
 		/**
@@ -2594,7 +2622,16 @@
 				pagenow:       pagenow,
 				plugin_status: 'all'
 			},
-			queryArgs;
+			queryArgs,
+			searchStringLength = $pluginSearch.val().length;
+
+			// Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in.
+			if ( wp.updates.shouldSearch( searchStringLength ) ) {
+				$pluginSearch.attr( 'autocomplete', 'off' );
+			} else {
+				$pluginSearch.attr( 'autocomplete', 'on' );
+				return;
+			}
 
 			// Clear on escape.
 			if ( 'keyup' === event.type && 27 === event.which ) {
diff --git src/wp-includes/blocks/latest-comments.php src/wp-includes/blocks/latest-comments.php
index 6343a46d0b..555a125c4a 100644
--- src/wp-includes/blocks/latest-comments.php
+++ src/wp-includes/blocks/latest-comments.php
@@ -41,8 +41,8 @@ function wp_latest_comments_draft_or_post_title( $post = 0 ) {
  * @return string Returns the post content with latest comments added.
  */
 function render_block_core_latest_comments( $attributes = array() ) {
+	// This filter is documented in wp-includes/widgets/class-wp-widget-recent-comments.php.
 	$comments = get_comments(
-		// This filter is documented in wp-includes/widgets/class-wp-widget-recent-comments.php.
 		apply_filters(
 			'widget_comments_args',
 			array(
