上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

⭐ [源码解析|前言] 从 0 到 1,手把手带你剖析异步查询库 elmGetter 的源码

[复制链接]
  • TA的每日心情
    奋斗
    2025-3-1 19:55
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    10

    主题

    11

    回帖

    124

    积分

    荣誉开发者

    积分
    124

    油中2周年新人报道荣誉开发者

    发表于 2025-2-25 20:47:56 | 显示全部楼层 | 阅读模式

    本帖最后由 溯水流光 于 2025-2-26 00:11 编辑

    本帖最后由 溯水流光 于 2025-2-25 21:17 编辑

    本文是《从 0 到 1,手把手带你剖析异步查询库 elmGetter 的源码,进行深度定制和二次开发,附 MutationObserver 讲解》系列文章中的一篇。

    该系列文章目录网址为:

    https://bbs.tampermonkey.net.cn/thread-8196-1-1.html

    作者: 溯水流光 (脚本猫论坛, 油猴中文网)

    [源码解析|前言] 从 0 到 1,手把手带你剖析异步查询库 elmGetter 的源码,进行深度定制和二次开发,附 MutationObserver 讲解

    作者注:
    阅读本文,希望你具备以下基础:

    1. 掌握JS基础,熟悉promise、await。若不熟悉,推荐观看Coderwhy的JS高级教程“手撕await”,从生成器演进到await,纯js实现await语法糖:https://www.bilibili.com/video/BV1f44y187PS
    2. 会使用elmGetter。若不会,直接看源码容易一头雾水,建议参考cxxjackie原作者写的使用说明。
    3. 不会jQuery也没事,我会进行简要讲解。

    更精彩的还在后头,我将炮轰 waitForKeyElements 源码,指出其系列代码逻辑的问题, 详情见正文后的 <附录 A:再来点源码阅读,评鉴经典的异步库设计> 和 <附录B: 祖师爷的代码, fork的起源, BlockA版waitForKeyElements>

    初学者建议优先阅读<附录 A:再来点源码阅读,评鉴经典的异步库设计> 。该部分解析经典老式异步查询库设计,阅读难度较低。 我写文的时候也是先写附录AB,再写正文的。

    学习目标: 期待我的文章能帮助大家将 elmGetter 改造成自己理想中的异步查询库,使其成为大家得心应手的如意兵器。

    作者: 溯水流光 (脚本猫论坛, 油猴中文网)

    前言

    翻论坛时,我发现没有关于elmGetter的源码解析。推测是大佬们觉得源码过于简单,没必要分析。但我认为适当解析很有必要,就决定自己写一篇。

    我曾辅导弟弟妹妹做作业,发现一些很简单的题目,他们却理解不了。我觉得这背后的原因是知识点有缺失,对知识点的运用也不够熟练。

    所以我在这里会尽力提供代码背景知识点,方便大家阅读

    这篇文章主要面向初学者: 重点聚焦于JS语法解析,以及阅读源码的基础思路与技巧 。

    此外,还有进阶内容。我会围绕 elmGetter 的 CSS 模式展开,分析执行流程,同时解读大部分边界情况的设计原理,让大家知其然更知其所以然。

    写这篇文章,难点在于梳理知识点,引导大家上手MutationObserve,以及把源码讲解得更通俗易懂。好在源码逻辑清晰,阅读难度不大。只要掌握背后的知识点,找准切入点,阅读源码就像热刀切黄油一样,轻松解决。

    写这篇文章时,我有个小感悟:一个人教学能力最强的时候,往往是处于从小白迈向大神的过渡阶段。等真正成了大神,看什么都像小学作文一样简单,觉得一切稀松平常,就很难站在学员的角度去思考问题了。

    elmGetter源码本身不难读,只是我补充了较多知识点,才让文章超万字。还望各位看官耐心阅读,可以跳读、略读,挑重点看,把文章读透。

    QA

    Q: 为何把waitForKeyElement的源码解析设为附录?

    A: 一方面,基于setTimeout和setInterval设计的异步状态库已过时。
    另一方面,waitForKeyElement不太通用,底层代码逻辑也存在问题,后续文章我会分析。
    附录A、B能帮新手快速上手源码分析,当作小试牛刀的开胃小菜正合适

    Q: 你文章有点冗长。

    A: 我曾试着删除重复表述和一些看似无用的“废话”,结果发现文字的信息熵变得极大。中文本身信息熵就高,这样精简,只会让文章变成只有作者自己能懂的“忍者暗号”。

    Q: 重复的文字是否无用?

    A: 我认为重复是一门艺术。读者通常难以在第一遍阅读时就完全掌握知识点,这时重复就很有必要。我的目标是每次重复讲解知识点时,都尽量扩充些内容,从不同角度进行阐述。

    与AI共舞

    文章部分段落经AI润色,但主要内容、脉络架构和代码都是我亲笔撰写,不然也不至于耗费近三天时间。AI润色后的文字,阅读更流畅、看着更舒服 。

    204632uqekrsmbrrsjnrds.jpg

    学习源码的意义

    深入了解原理,才能更便捷地定制,添加所需功能。

    gitee

    同时,我已把文章上传到gitee。要是您有修改意见,比如发现语病、错别字,或是有更好的讲解方法,欢迎修改文章后向我发起PR,我会进行merge。要是您不会发起PR,加我QQ (2402398917),我来给您指导。

    gitee 地址: https://gitee.com/HHandHsome/learn-elmGetter

    下一章节: <MutationObserver 快速上手>

    文章地址: https://bbs.tampermonkey.net.cn/thread-8199-1-1.html

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表