假设您使用的是Chrome,当我按Cmd + F或Ctrl + F ...时,我键入一个字符,它将搜索整个页面并为我突出显示文本。它立即搜索。 Chrome使用哪种算法?为什么它可以这么快地键入和搜索?有什么想法吗?谢谢你。
最佳答案
您可以在此处找到有关该体系结构的更多信息:
http://www.chromium.org/developers/design-documents/find-bar
我将尝试解释更详细的响应,这将在您下次需要更多内容时帮助您浏览Chromium源。
当用户在Chromium中启动查找时,我们基本上会向观察者注册一个通知以获取结果。每个find调用都是异步的,并且渲染器将搜索结果作为通知消息发送。这在FindBarController::Observe中处理
当您按下下一个/上一个/回车键FindBarView::ButtonPressed时发生的第一件事是,它告诉当前的选项卡内容开始查找TabContents::StartFinding。您会注意到,在这段代码中,它向IPC发送了一个异步请求。您可以在此处查看我们的发送方式:RendererViewHost::StartFinding
由于Chromium是multi-process architecture,我们通过IPC消息处理程序发送消息。您可以查看上面的链接以查看消息的发送方式。渲染主机将消息发送到渲染 View RenderView::OnFind。从那时起,您知道查找逻辑显然是在WebKit源代码中,而不是在Chromium中。 WebFrameImpl::find
现在在WebKit中,找到字符串的逻辑在Editor::findString中,如果您注意到算法是什么,基本上就使用WebKit/WebCore/editing/TextIterator.h在给定范围内遍历DOM。与Chromium相比,WebKit中的注释不是那么好,但是代码很高,因此阅读3000+ loc毫无问题。
我之所以告诉您所有这些信息都是为了您的利益,因此,如果您想了解更多有关Chromium/WebKit的知识,那么您将知道如何查看源代码:)我强烈建议http://dev.chromium.org/developers
关于search - Chrome搜索中使用什么算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4233157/