Dev Depot: Typeahead.js, Enhanced Site Search
A staple of “Web 2.0” coding, “typeaheads” are those helpful hints that try to guess what you’re typing, filling in the blanks. They are found on search engines and on every other imaginable form input. It’s important to note up front that typeaheads are not “spell checkers” but marketing tools that can be creatively monetized, while helping to filter and funnel a site’s traffic.
One popular site to get on the bandwagon is Twitter, which decided to implement a typeahead, but found that there wasn’t a solution allowing for prefetching data, searching that data on the client, and then falling back to the server for additional cues — so being the innovators they are, they created their own.
Inspired by Twitter.com’s auto complete search functionality, typeahead.js (www.github.com/twitter/typeahead.js) is a fast and fully-featured auto complete library that displays suggestions to end-users as they type. The script shows the top suggestion as a hint (such as background text), offers customized templates for suggestions, and works with both hardcoded data as well as remote data, allowing suggestions to be easily drawn from multiple datasets.
The system is optimized to quickly index and search these large datasets on the client. “That allows for sites without datacenters on every continent to provide a consistent level of performance for all their users,” a Twitter team spokesperson states. “It plays nicely with Right-To-Left (RTL) languages and Input Method Editors (IMEs) [as well].
“We also needed something instrumented for comprehensive analytics in order to optimize relevance through A/B testing,” the spokesperson added. “Although logging and analytics are not currently included, it’s something we may add in the future.
According to Twitter’s Open Source Manager, Chris Aniszczyk, typeahead.js is a fast and battle-tested jQuery plugin initially built to support the company’s internal needs, but now open sourced on GitHub under the MIT license in hopes that by sharing this piece of its infrastructure, Twitter will benefit from its broader evolution.
Aniszczyk says that there are three ways to get data: using local, hard-coded data passed on page render; by using a prefetch URL that will be hit to grab data on pageload and then stored in local Storage; or by using a queryable API that returns results as-you-type (with the query being passed in the ?q= parameter).
“You can also combine local or prefetch [data] with a remote fallback for the performance of local data combined with the coverage of a remote query API (e.g. quickly search your friends but be able to find anyone on your site),” Aniszczyk explains, adding that “There are lots of options for configuring everything from ranking, matching, rendering, templating engines, and more.”
Using the typeahead.js API is easy and turns any input[type=”text”] element into a typeahead, using a single dataset or an array of datasets. The script’s GitHub page delves into the numerous configuration options and provides a page of working examples to help get you started.
The datasets that define a set of data that hydrates suggestions include datums that can be represented as a string for easy manipulation. To boost performance, typeahead.js rate-limits network requests to lighten the load.
As for compatibility, typeahead.js works with popular browsers such as Chrome, Firefox 3.5+, Internet Explorer 7+, Opera 11+ and Safari 4+, and is dependent on jQuery 1.9+, which must be loaded before typeahead.js.
Boasting a high level of template engine compatibility, the ability to process custom events, and an easily skinned style set — along with a price tag of “free,” typeahead.js is an intriguing way to add suggestive capabilities to your internal search marketing efforts, while enhancing the overall user experience. Try it and see if it makes your content easier to find.