【问题标题】:How does a browser 'find' something on a webpage? [closed]浏览器如何“找到”网页上的内容? [关闭]
【发布时间】:2019-12-23 06:47:19
【问题描述】:

现在这可能是一个非常琐碎的问题,但是现代浏览器如何处理网页上的查找(Ctrl + F )操作?

他们是否通过正则表达式从网页中取出所有 HTML/CSS/JS 并将其转换为某种纯文本表示,然后运行递归查找?

【问题讨论】:

  • 你想在这里实现什么。
  • 我只是想知道,我找不到包含浏览器如何运行查找的详细信息的资源。如果你能给我指一个,那就太好了。
  • 我不明白为什么这会被否决,可能是因为它太宽泛了。但我会做一些研究,阅读小型开源浏览器的代码并回答这个问题。

标签: algorithm browser internals


【解决方案1】:

这个问题是一个相当繁重的问题,因为根据浏览器引擎的目的和设计,各种浏览器的性能可能会与其他浏览器略有不同。但是,它们通常应该根据 W3C 标准产生相似的外观和感觉。了解每个浏览器功能的最佳方法是访问浏览器制造商的各个网站以研究其使用的映射系统。默认情况下,HTML 是一个树节点系统,文档可以在其中分支到其他子树。一种可以使用的路径系统称为 XPath。下面分别是浏览器功能、W3 Schools 和 XPath 的一些链接。希望这些将帮助您至少了解浏览器功能的概念。我会先从渲染引擎链接开始。

https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/#The_rendering_engine

https://www.w3schools.com

https://librarycarpentry.org/lc-webscraping/02-xpath/index.html

【讨论】:

    【解决方案2】:

    我不知道其他浏览器,但谷歌浏览器使用Boyer Moore 搜索算法在网页上查找单词。在这个算法中,浏览器从右到左扫描你输入的单词。

    要搜索的字符串称为P,称为“Pattern”。

    我们在其中搜索的字符串称为T,或“Test”。

    TP的长度一般分别用mn表示。该算法的优势在于,它不是使用蛮力进行搜索(这将进行m - n - 1 试验),而是预处理P 并尽可能多地跳过可能性。

    根据维基百科:

    这个算法的关键在于,如果模式的结尾是 与文本相比,则可以沿文本跳转而不是 而不是检查文本的每个字符。这样做的原因 是在将模式与文本对齐时,最后一个字符 模式中的字符与文本中的字符进行比较。如果 字符不匹配,无需继续查找 沿着文本向后。如果文本中的字符不匹配 模式中的任何字符,然后是模式中的下一个字符 要检查的文本位于文本中较远的 n 个字符处,其中 n 是模式的长度。如果文本中的字符在 图案,然后图案沿文本的部分移动完成 沿着匹配的字符排列并重复该过程。 沿着文本跳转以进行比较,而不是检查每个 文本中的字符减少了必须进行的比较次数 是算法效率的关键。

    Boyer-Moore 算法采用两种方法:

    • 坏字符启发式
    • 良好的后缀启发式

    P 被处理并形成了两种启发式的不同数组。

    T 与当前字符(P)不匹配的字符称为坏字符。

    T 的子字符串与P 的子字符串成功匹配时,就会出现一个好的后缀。

    在这两种方法或启发式中,都遵循了几条规则,您可以详细阅读herehere。复制粘贴来自不同网站的文章是没有意义的。

    【讨论】:

    • 感谢详细解答,算法有效,是的,但是浏览器如何解析网页以应用算法?
    • @RaghavKukreti 这与 HTML 有关。浏览器遍历 HTML 中显示的每个单词以检查该单词是否匹配。关键字“显示”。浏览器不会解析隐藏元素 AFAIK。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2015-06-14
    相关资源
    最近更新 更多