Guides / Building Search UI / Going further

Improve performance for InstantSearch iOS

As of May 1st, 2024, Apple requires all iOS apps to include a privacy manifest. Ensure you incorporate our provided privacy manifest files into your documentation. For more details, see Privacy Manifest.

Algolia is fast by default. But network speed and bandwidth can vary. This page lists a few best practices you can implement to adapt to your users’ network conditions.

Add a loading indicator

You can mitigate the impact of a slow network on your search experience by managing user expectations. One way of letting them know that the network is suboptimal is by displaying a loading indicator, which prevents them from becoming frustrated by network delays and blaming your app for lack of responsiveness.

Use the Loading widget to implement this behavior.

Optimize build size

To optimize build size, only download the parts of the InstantSearch library that you will use:

CocoaPods

1
2
3
4
pod 'InstantSearch', '~> 5.0'
# pod 'InstantSearch/UI' for access to everything
# pod 'InstantSearch/Core' for access to everything except the UI controllers
# pod 'InstantSearch/Client' for access only to the API Client

Carthage

1
2
3
github "algolia/instantsearch-ios" ~> 5.0 # for access to everything
# github "algolia/instantsearch-core-swift" ~> 6.0 # for access to everything except the UI widgets
# github "algolia/algoliasearch-client-swift" ~> 7.0 # for access only to the API Client

Queries per second (QPS)

Search operations aren’t limited by a fixed “search quota”. Instead, they’re limited by your plan’s maximum QPS and operations limit.

Every keystroke in InstantSearch using the SearchBox counts as one operation. Then, depending on the widgets you add to your search interface, you may have more operations being counted on each keystroke. For example, if you have a search interface with a SearchBox, a HierarchicalMenu, and a RefinementList, then every keystroke triggers one operation. But as soon as a user refines the HierarchicalMenu or RefinementList, it triggers a second operation on each keystroke.

Did you find this page helpful?