If you decide to go with async - when searching a request to the server is made with the query string. The expected return value would be the ID of the nodes that need to be opened, so that the matching node is loaded. Also take a look at the search function second parameter for case-insensitive searching.