Coder Social home page Coder Social logo

Comments (6)

unclechen avatar unclechen commented on September 23, 2024 1

@RichardYou

@unclechen

@RichardYou
最近也在做埋点相关的事情,其实这里面最难而且还没解决的问题就是元素的定位。。。

是的,这件事情最难最关键的就是“元素定位”,实现元素定位时,需要考虑的指标主要有下面几个:

  • 可用性:每一个元素,都可以生成唯一的选择器
  • 唯一性:生成出来的选择器,可以唯一定位这个元素
  • 长度:生成的选择器的长度(单纯从技术角度说,肯定是越短越好)
  • 查找速度:根据选择器查找元素的速度
  • 代码量:实现这个功能的代码量多少

根据业务需求,上面几个指标,我们可以选择性能去满足一些,而不是全部,因为上面的指标有时会互相抵消。
https://github.com/fczbkk/css-selector-generator-benchmark里面是一份对多个css-selector-generator库的性能分析报告,其实目前基本上能考虑到的实现方式,都在里面有了。

目前我们公司的埋点都是基于xpath实现的,css-selector之类的方案我也看过,也是基于元素层级和属性定位的。实际上还是没有解决 dom结构频繁变动下和复杂业务场景下的定位问题。
比如:多个操作按钮根据权限展示的都不一样,这种交互复杂的场景下埋点就很容易失效。
尤其是web页面会频繁更新改版。基于层级的方案不怎么靠谱。
不过最近在做的尝试是:解析源码ast,给jsx和vue的template中的element加id。直接修改源文件。目前已经做出来demo,博主可以参考一下

完全赞同你的观点,根据xpath、css选择器,本质上无法解决页面dom变化导致定位失效的问题。而且这种埋点方案无法理解上下文,比较适合作为简单页面(比如建站工具生成的网页,且不会频繁变化的情况下)的辅助。像你说的那种根据源码,添加id的方式是非常好的思路,如果页面是自己可控的话,用你的这种方案肯定是优秀很多的。还有一些情况,比如做sdk的,可能无法侵入别人的代码,我觉得只能尽最大努力提高元素定位的准确率和稳定性,并且在失效的情况下能够告警,其他的思路目前还没有想到。。

from blog_comment_repo.

rick-yo avatar rick-yo commented on September 23, 2024

最近也在做埋点相关的事情,其实这里面最难而且还没解决的问题就是元素的定位。。。

from blog_comment_repo.

unclechen avatar unclechen commented on September 23, 2024

@RichardYou
最近也在做埋点相关的事情,其实这里面最难而且还没解决的问题就是元素的定位。。。

是的,这件事情最难最关键的就是“元素定位”,实现元素定位时,需要考虑的指标主要有下面几个:

  • 可用性:每一个元素,都可以生成唯一的选择器
  • 唯一性:生成出来的选择器,可以唯一定位这个元素
  • 长度:生成的选择器的长度(单纯从技术角度说,肯定是越短越好)
  • 查找速度:根据选择器查找元素的速度
  • 代码量:实现这个功能的代码量多少

根据业务需求,上面几个指标,我们可以选择性能去满足一些,而不是全部,因为上面的指标有时会互相抵消。
https://github.com/fczbkk/css-selector-generator-benchmark里面是一份对多个css-selector-generator库的性能分析报告,其实目前基本上能考虑到的实现方式,都在里面有了。

from blog_comment_repo.

rick-yo avatar rick-yo commented on September 23, 2024

@unclechen

@RichardYou
最近也在做埋点相关的事情,其实这里面最难而且还没解决的问题就是元素的定位。。。

是的,这件事情最难最关键的就是“元素定位”,实现元素定位时,需要考虑的指标主要有下面几个:

  • 可用性:每一个元素,都可以生成唯一的选择器
  • 唯一性:生成出来的选择器,可以唯一定位这个元素
  • 长度:生成的选择器的长度(单纯从技术角度说,肯定是越短越好)
  • 查找速度:根据选择器查找元素的速度
  • 代码量:实现这个功能的代码量多少

根据业务需求,上面几个指标,我们可以选择性能去满足一些,而不是全部,因为上面的指标有时会互相抵消。
https://github.com/fczbkk/css-selector-generator-benchmark里面是一份对多个css-selector-generator库的性能分析报告,其实目前基本上能考虑到的实现方式,都在里面有了。

目前我们公司的埋点都是基于xpath实现的,css-selector之类的方案我也看过,也是基于元素层级和属性定位的。实际上还是没有解决 dom结构频繁变动下和复杂业务场景下的定位问题。
比如:多个操作按钮根据权限展示的都不一样,这种交互复杂的场景下埋点就很容易失效。
尤其是web页面会频繁更新改版。基于层级的方案不怎么靠谱。
不过最近在做的尝试是:解析源码ast,给jsx和vue的template中的element加id。直接修改源文件。目前已经做出来demo,博主可以参考一下

from blog_comment_repo.

rick-yo avatar rick-yo commented on September 23, 2024

@unclechen

@RichardYou

@unclechen

@RichardYou
最近也在做埋点相关的事情,其实这里面最难而且还没解决的问题就是元素的定位。。。

是的,这件事情最难最关键的就是“元素定位”,实现元素定位时,需要考虑的指标主要有下面几个:

  • 可用性:每一个元素,都可以生成唯一的选择器
  • 唯一性:生成出来的选择器,可以唯一定位这个元素
  • 长度:生成的选择器的长度(单纯从技术角度说,肯定是越短越好)
  • 查找速度:根据选择器查找元素的速度
  • 代码量:实现这个功能的代码量多少

根据业务需求,上面几个指标,我们可以选择性能去满足一些,而不是全部,因为上面的指标有时会互相抵消。
https://github.com/fczbkk/css-selector-generator-benchmark里面是一份对多个css-selector-generator库的性能分析报告,其实目前基本上能考虑到的实现方式,都在里面有了。

目前我们公司的埋点都是基于xpath实现的,css-selector之类的方案我也看过,也是基于元素层级和属性定位的。实际上还是没有解决 dom结构频繁变动下和复杂业务场景下的定位问题。
比如:多个操作按钮根据权限展示的都不一样,这种交互复杂的场景下埋点就很容易失效。
尤其是web页面会频繁更新改版。基于层级的方案不怎么靠谱。
不过最近在做的尝试是:解析源码ast,给jsx和vue的template中的element加id。直接修改源文件。目前已经做出来demo,博主可以参考一下

完全赞同你的观点,根据xpath、css选择器,本质上无法解决页面dom变化导致定位失效的问题。而且这种埋点方案无法理解上下文,比较适合作为简单页面(比如建站工具生成的网页,且不会频繁变化的情况下)的辅助。像你说的那种根据源码,添加id的方式是非常好的思路,如果页面是自己可控的话,用你的这种方案肯定是优秀很多的。还有一些情况,比如做sdk的,可能无法侵入别人的代码,我觉得只能尽最大努力提高元素定位的准确率和稳定性,并且在失效的情况下能够告警,其他的思路目前还没有想到。。

嗯,这种方案的确有局限性,只能公司内部用用。不仅是定位,检查工具,圈点工具也要跟上。

from blog_comment_repo.

SoftwareEngineerPalace avatar SoftwareEngineerPalace commented on September 23, 2024

 好文章

from blog_comment_repo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.