MDN 的自动完成搜索是如何实现的
上个月,我和 Gregor Weber 为 MDN Web Docs 添加了 自动完成搜索(autocomplete search)功能,有了这个功能,你可以通过输入文档的部分标题来快速查找并跳转到想查看的文档。这篇文章我会介绍这个功能是圣魂纷争 源码如何实现的。如果你坚持看到文章末尾,我还会分享一个 “彩蛋” 功能,一旦你学会使用它,你一定会成为派对上最靓的仔。不过,或许你只是想比普通人更快的浏览 MDN。
简单来说,输入框上有一个onkeypress 事件监听器 用于过滤 (每个地区的)完整的文档标题列表。在我写这篇文章时,English US 有 ,开源代挂源码 个不同的文档标题和对应的 URL。你可以打开 developer.mozilla.org/e... 来预览这些文档。没错,这个文件很大,但还没大到无法被全部放进内存。毕竟,执行搜索逻辑的代码只会在发现用户要输入某些内容时,该文件才会被加载。而提到文件大小,由于文该件通过 Brotli 算法进行了压缩,所以在网络上该文件大小仅为 KB。
实现细节:默认情况下,加载的 JavaScript 代码 只有一小段 shim 代码,用于设定监听 搜索框的 onmouseover 和 onfocus 。还有一个绑定在 document 上用于监听输入特定按键的事件监听器。在任何地方输入 /,期货日线交易源码和你用鼠标把焦点放在 是一样的。一旦 focus 事件被触发,首先会 下载两个 JavaScript 包 来将 转变为更高级的东西。简单来说(通过伪代码),就是这样的:
而这里加载的/static/js/autocomplete.js 才是最神奇的。通过伪代码我来深入解释一下:
正如你看到的,这是对实际工作原理的过度简化,但现在还不是深入这些细节的时候。下一步 就是展示匹配项。我们使用 (TypeScript) React 来实现,但是下面的伪代码应该更容易理解:
然后通过一些 CSS,我们会把这些匹配项变成一个浮层,然后简单放在 下方。除此之外,我们还会根据 inputValue 突出展示每个文档标题,microduino温控风扇源码当通过上下按键浏览时,各个事件监听器会突出展示你正在浏览的行。
好的,我们再深入一下实现细节:我们只创建了一次FlexSearch 索引,并在每一次新的键击出现时复用它。由于用户在等待网络响应时,可能会输入更多东西,所以当全部的 JavaScript 和 JSON XHR 都加载完毕,才会执行实质上的搜索。
在我们深入FlexSearch 是什么之前,我想先说一下我们实际上是如何展示搜索结果的。我们使用了一个 React 库 downshift 来处理交互、展示 并确保搜索结果具有可访问性(Accessible,译者注:无障碍相关,国外页面对于 让残障人士更加便利的ansys+命令源码访问 比较重视)。 downshift 是一个很成熟的库,解决了我们在构建这个小组件时遇到的很多挑战,尤其是让搜索结果具有可访问性。
那么, FlexSearch 是一个怎样的库呢?它是我们引入的另一个第三方库,确保在标题上的搜索是以自然语言为基础的。它将自己描述为 “Web 上最快,内存最灵活 的 零依赖 全文搜索库”,它比简单的在字符串中搜索要准确高效很多。
决定优先展示哪些结果:有一说一,假设用户输入了foreac ,从 ,+ 的文档标题列表找到那些标题包含 foreac 的项 并不困难,在这之后我们需要决定优先展示哪些结果。我们根据 PV 数据来实现这一点。我们会记录每一个 MDN URL,如果一个页面获得很多的 PV ,那可能它是 “受欢迎” 的。大多数人选择访问的文档就是受欢迎的,也最有可能是用户想要搜索的。
我们在生成search-index.json 文件的 构建阶段 可以知道每个 URL 的 PV 量。我们实际上并不关心绝对数字,我们真正关心的是其中的相对差异。例如,我们知道 Array.prototype.forEach() (文档标题之一)比 TypedArray.prototype.forEach() 更受欢迎,我们就会利用这一点,在 search-index.json 中对条目进行排序。现在,通过 FlexSearch 进行简化,我们利用数组的 “自然顺序” 来为用户提供他们可能在搜索的文档。这实际上和我们在全站搜索中使用的 Elasticsearch 是相同的技术。详见: How MDN’s site-search works 。
彩蛋:如何通过 URL 搜索:事实上,这个彩蛋可不是闹着玩的,而是一个功能,利用自动完成用来帮助我们的内容创作者。当你创作 MDN 中的内容 时,你会启动一个本地的 “预览服务器”,它是所有文档的完整拷贝,但运行在本地,作为一个静态站点 运行于 /github/fetch è¿ä¸ªæ¯fetchçgithub ä¸é¢ç»åºäºfetchç¨æ³.
,Windows和其他其内格式会发生改变的应用程序使用的配置文件
CNM Windows应用程序菜单选项和安装文件
CNQ Compuworks Design Shop文件
CNT Windows(或其他)系统用于帮助索引或其他目的内容文件
COB TrueSpace 2对象文件
COD Microsoft C编译器产生的可显示机器码/汇编代码文件,其中附有源C代码作为注释
COM 命令文件(程序)
CPD Corel Print Office文件(图形)
CPD,CPE 传真覆盖文档
CPI Microsoft MS-DOS代码页信息文件
CPL 控制面板扩展名,Corel颜色板
CPO Corel打印存储文件
CPP C++代码文件
CPR Corel提供说明书文件
CPT Corel 照片-箨�枷?
CPX Corel Presentation Exchange压缩图形文件
CRD Windows Cardfile文件
CRP Corel 提供的运行时介绍文件;Visual dBASE自定义报表文件
CRT 认证文件
CSC Corel脚本文件
CSP PC Emcee On_Screen图像
CSS 瀑布式表格文件
CST Macromedia Director Cast文件
CSV 逗号分隔的值文件
CT Scitex CT位图文件;Paint Shop Pro Grapic编辑器文件
CTL 通常用于表示一个包含控件信息的文件;FaxWork用它来保持有关每个传真收到或发出的信息
CUE Microsoft提示牌数据文件
CUR Windows光标文件
CUT Dr Halo位图文件
CV Corel版本的档案文件;Microsoft CodeView信息屏幕文件
CWK ClarisWorks数据文件.
CWS ClarisWorks模块
CXT Macromedia Director受保护的(不可编辑的)投影文件
CXX C++源代码文件
DAT 数据文件;WrodPerfect合并数据文件;用于一些MPEG格式的文件
DB Borland的Paradox 7表
DBC Microsoft Visual FoxPro数据库容器文件
DBF dBASE文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 打开);Oracle 8.1.x表格空间文件
DBX DataBearn图像;Microsoft Visual FoxPro表格文件
DCM DCM模块格式文件
DCR 冲击波文件
DCS 桌面颜色分隔文件
DCT Microsoft Visual FoxPro数据库容器
DCU Delphi编译单元文件
DCX Microsoft Visual FoxPro数据库容器;基觉CX的传真图像;宏
DC5 DataCAD绘图文件
DDF Btrieve或Xtrieve数据定义文件,它包含用于描述Btrieve或Xtrieve文件的元数据
DDIF Digital Equipment或 Compaq格式,用于保存他们图像与字处理文档
DEF SmartWareⅡ数据文件;C++模块定义文件
DEFI Oracle 7 卸载脚本文件
DEM 用于表示数字高度模型的USGS基准的文件
DER 认证文件
DEWF Macintosh Sound Cap/Sound Edit录音设备格式
DGN Macintosh CAD绘图文件
DIB 设备无关位图
DIC 目录
DIF 可进行数据互换的电子表格
DIG DigiLink格式;Sound DesignerⅠ音频文件
DIR MacromediaDirector文件
DIZ 描述文件
DLG C++对话框脚本文件
DLL 动态链接库
DLS 可下载声音文件
DMD Visual dBASE数据模块文件
DMF X-Trakker音乐模块(MOD)文件
DOC FrameMaker或FrameBuilder文档;Word Star文档、Word Perfect文档、Microsoft Word文档;DisplayWrite文档
DOT Microsoft Word文档模板
DPL Borland Delph3压缩库
DPR Borland Delphi工程头文件
DRAW Acorn的基于对象的矢量图像文件
DRV 驱动程序
DRW Micrografx Designer/Draw;Pro/E箨�募?
DSF Micrografx Designer VFX文件
DSG DOOM保存的文件
DSM Dynamic Studio音乐模块(MOD)文件
DSP Microsoft Developer Studio工程文件
DSQ Corel QUERY(查询)文件
DST 刺绣机图形文件
DSW Microsoft Developer Studio工作区文件
DTA Word Bank(世界银行)的STARS数据文件
DTD SGML文档类型定义(DTD)文件
DTED 地面高度数字数据(图形的数据格式)文件
DTF Symantec Q&A相关的数据库数据文件
DTM DigiTrakker模块文件
DUN Microsoft拔号网络导出文件
DV 数字视频文件(MIME)
DWD DiamondWare数字化文件
DWG AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式
DXF 可进行互交换的绘图文件格式,二进制的DWG格式的文本表示;数据交换文件
DXR Macromedia Director受保护(不可编辑)**文件
D Commodore的位模拟磁盘图像文件
EDA Ensoniq ASR磁盘映像
EDD 元素定义文档(FrameMaker+SGML文档)
EDE Ensoniq EPS磁盘映像
EDK Ensoniq KT磁盘映像
EDQ Ensoniq SQ1/SQ2/Ks磁盘映像
EDS Ensoniq SQ磁盘映像
EDV Ensoniq VFX-SD磁盘映像
EFA Ensoniq ASR文件
EFE Ensoniq EPS文件
EFK Ensoniq KT文件
EFQ Ensoniq SQ1/SQ2/Ks文件
EFS Ensoniq SQ文件
EFV Ensoniq VFX-SD文件
EMD ABT扩展模块
EMF Windows增强元文件
EML Microsoft Outlook Express邮件消息(MIME RTC)文件
ENC 重演文
ENFF 中性文件格式扩展名
EPHTML Perl解释增强HTML文件
EPS 压缩的PostScript图像
EPSF 压缩的PostScript文件
ERI ERWin文件
ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件
EPX ERWin文件
ESPS ESPS音频文件
EUI Ensoniq ESP家族的压缩磁盘映像
EVY 特使文档
EWL Microsoft Encarta文档
EXC Microsoft Word禁止字字典
EXE 可执行文件(程序)
F FORTRAN文
F2R Farandoyle线性模块格式
F3R Farandoyle分块线性模块格式
F FORTRAN文件
F FORTRAN文件
FAR Fradole Composer音乐模块(MOD)文件
FAV Microsoft Outlook导航条
FAX 传真类型图像
FBK Navison 金融备份
FCD 虚拟CD-ROM
FDB Navison 金融数据库
FDF Adobe Acrobat表单文档文件
FEM CADRE有限元素网络文件
FFA,FFL,FFO,FFK Microsoft快速查找文件
FFF GUS PnP银行文件格式
FFT 最终格式文本(IBM的DCA一部分)
FH3 Aldus Freehand 3绘图文件
FIF Fractal图像文件
FIG REND/AVRIL使用的文件格式
FITS CCD照相机图像;灵活图像传输系统
FLA Macromedia Flash**
FLC Autodesk FLIC动画文件
FLF Corel Paradox产生的格式:Navison Financials许可文件;OS/2驱动程序文件
PDG 超星阅读器文件
PLI Autodesk FLIC动画
FLT StarTrekker音乐模块(MOD)文件;MultiGen Inc的Open Flight使用的文件格式;Corel过滤器文件
FM Adobe FrameMaker文档
FMB Oracle4.0疖蛞院蟀姹颈淼サ亩��圃创�胛募?
FML 文件镜象列表(GetRight)
FMT Oracle 4.0疖蛞院蟀姹颈淼サ奈谋靖袷剑籑icrosoft Schedule+ 打印文件
FMX Oracle 4.0疖蛞院蟀姹究芍葱斜淼?
FND Microsoft Explorer保存的搜索文件(Find applet)
FNG 字体组文件(字体导航器,Font Navigator)
FNK Funk Tracker模块格式
FOG Fontographer模块字体
FON 系统字体
FOR FORTRAN文件
FOT 字体相关文件
FP FileMaker Pro文件
FP1 Flying Pigs for Windows数据文件
FP3 FileMaker Pro文件
FPT FileMaker Pro文件;Microsoft Fox Pro备注字体文件
FPX FlashPix位图
FRM 表单;Frame Maker或Frame Builder文档;Oracle可执行表(3.0疖蛟缙诎姹?;Visual Basic表单;WordPerfect Merge表单;DataCAD标志报表文件
FRT Microsoft FoxPro报表文件
FRX Visual Basic表单文本;Microsoft FoxPro报表文件
FSF fPrint Audit Tool文件格式
FSL Borland的Paradox 7表单;Corel Paradox保存的表单
FSM Parandoyle示例格式
FT Lotus Notes全文本索引
FTG 全文本搜索组文件,由Windows帮助系统查找时产生——可以删除,并在需要时重建起来
FTS 全文本搜索引文件,由Windows帮助系统查找时产生
FW2 Framework Ⅱ文件
FW3 Framework Ⅲ文件
FW4 Framework Ⅳ文件
FXP 经Microsoft FoxPro编译的源文件
FZB Casio FZ-1银行转储
FZF Casio FZ-1完全转储
FZV Casio FZ-1声音转储
G Raw CCITT G. $bit ADPCM格式数据
G Raw CCITT G. 3或5bit ADPCM格式数据
GAL Corel多媒体管理器相集
*** Generic CADD箨�募�ê笮�姹荆?
GCP Ground Control Point(地面控制点)文件,用于远景数据形成图像过程,经常用于生成图工程—CHIPS(copenhagen image processing system)使用这些文件
GDB InterBase数据库文件
GDM 铃声、口哨声和声音板模块格式
GED GEDCOM 系谱数据文件,用于记录和交换系谱数据的流行格式;图形环境文档箨?
GEM GEM元文件
GEN Ventura产生的文本文件
GetRight GetRight未完成的下载文件
GFC Patton&Patton FlowCharting 4 flowchart文件
GFI,GFX Genigraphics图形链接表示文件
GHO Norton 克隆磁盘映像
GID Windows 全局索引文件(包括帮助状态)
GIF CompuServe位图文件
GIM,GIX Genigraphics图形链接介绍文件
GKH Ensoniq EPS家簇磁盘映像文件
GKS Gravis Grip Key文档
GL 动画格式
GNA Genigraphics图形链接介绍文件
GNT 生成代码,Micro Focus属性格式里的可执行代码
GNX Genigraphics图形链接介绍文件
GRA Microsoft Graph文件
GRD 用于远程视景数据产生地图过程的格式文件,通常应用于形成地图工程—CHIPS(copenhagen image processing system)使用这些文件
GRF Grapher(Golden Software公司)图形文件
GRP 程序管理组
GSM Raw GSM 6.音频流;Raw“byte aligned(比特对齐的)” GSM 6.音频流;US Robotics语音调制解调器
GTK Graoumftracker(老)音乐模块(MOD)文件
GT2 Graoumftracker(新)音乐模块(MOD)文件
GWX,GWZ Cenigraphis图形链接介绍文件
GZ UNIX gzip压缩文件
H C程序头文件
HCM IBM HCM配置文件
HCOM 声音工具HCOM格式
HCR IBM HCD/HCM产品配置文件
HDF 高级计算机应用程序本地中心(NCSA) geospatial Hierarchial数据格式文件
HED HighEdit文档
HEL Microsoft Hellbender格式保存的游戏文件
HEX Macintosh BinHex2.0文件
HGL HP图形语言绘图文件
HH 映射文件,包括一些话题ID和在帮助文件系统中话题的映射数字—允许运行中应用程序发送给用户合适的上下文帮助话题
HLP 帮助文件;Date CAD Windows帮助文件
HOG Lucas Arts的Dark Forces WAD文件
HPJ Visual Basic帮助工程
HPP C++程序头文件
HQX Macintosh BinHex 4.0文件
HST 历史文件
HT HyperTerminal(超级终端)
HTM,HTML 超文本文档
HTT Microsoft超文本模板
HTX 扩展HTML模板
HXM Descent2 HAM文件扩展
ICA Citrix文件
ICB Targa位图文件
ICC Kodak打印机格式文件
ICL 图标库文件
ICM 图形颜色匹配配置文件
ICO Windows图标
IDB MSDev中间层文件
IDD MIDI设备定义
IDF MIDI设备定义(Windows 需要的文件)
IDQ Internet数据查询文件
IDX Microsoft FoxPro相关数据库索引文件;Symantec Q&A相关数据库索引文件;Microsoft Outlook Express文件
IFF 交换格式文件;Amiga ILBM
IGES 初始图形交换说明文件
IGF 插入系统元文件
IIF QuickBooks for Windows交换文件
ILBM 位图图形文件
IMA WinImage磁盘映像文件
IMG GEM映像
IMZ WinImage压缩磁盘映像文件
INC 汇编语言或动态服务器包含文件
INF 信息文件
INI 初始化文件;MWave DSP Synth的“nwsynth.ini” GMS安装;Cravis Ultrasound bank安装
INP Oracle 3.0疖蛟缙诎姹镜谋淼ピ创�?
INRS INRS远程通信声频
INS InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备
INT 中间代码,当一个源程序经过语法检查后编译产生一个可执行代码
IOF Findit文档
IQY Microsoft Internet查询文件
ISO 根据ISD 有关CD-ROM文件系统标准列出CD-ROM上的文件
ISP X-Internet签字文件
IST 数字跟踪设备文件
ISU InstallShield卸装脚本
IT 脉冲跟踪系统音乐模块(MOD)文件
ITI 脉冲跟踪系统设备
ITS 脉冲跟踪系统抽样,Internet文档位置
IV Open Inventor中使用的文件格式
IVD 超过/微观数据维数或变量等级文件
IVP 超过/的用户子集配置文件
IVT 超过/表或集合数据文件
IVX 超过/微数据目录文件
IW Idlewild屏幕保护程序
IWC Install Watch文档
J Ricoh照相机格式
JAR Java档案文件(一种用于applet和相关文件的压缩文件)
JAVA Java源文件
JBF Paint Shop Pro图像浏览文件
JFF,JFIF,JIF JPEG文件
JMP SAS的JMPDiscovery表格统计文件
JN1 Epic MegaGames的Jill of the Jungle数据文件
JPE,JPEG,JPG JPEG图形文件
JS javascript源文件
JSP HTML网页,其中包含有对一个Java servlet的参考
JTF JPEG位图文件
K Kurzweil 抽样文件
KAR 卡拉OK MIDI文件(文本+MIDI)
KDC Kodak光增强器
KEY DataCAD图标工具条文件
KFX KoFak Group 4图像文件
KIZ Kodak数字明信片文件
KKW RoboHELP帮助工程索引设计器中与主题无关的K开头的所有关键字
KMP Korg Trinity KeyMap文件
KQP Konica照相机本地文件
KR1 Kurzweil 抽样(多软驱)文件
KRZ Kurzweil 抽样文件
KSF Korg Trinity抽样文件
KYE Kye游戏数据
LAB Visual dBASE标签文件
LBM Deluxe Paint位图文件
LBT,LBX Microsoft FoxPro标签文件
LDB Microsoft Access加锁文件
LDL Corel Paradox分发库
LEG Legacy文档
LES Logitech娱乐系统游戏配置文件(与REC文件一样)
LFT 3D Studio(DOS)放样文件
LGO Paintbrush(Microsoft画图应用程序)的徽标文件
LHA LZH更换文件后缀
LIB 库文件
LIN DataCAD线型文件
LIS 结构化查询报告(SQR)程序产生的输出文件
LLX Laplink交换代理
LNK Windows快捷方式文件
LOG [非法语句]志文件
LPD Helix Nut和Bolt文件
LRC Intel可视电话文件
LSL Corel Paradox保存的库文件
LSP AutoLISP、CommonLISP和其他LISP语言文件
LST 列表文件
LU ThoughtWing库单元文件
LVL Parallax Software的 Miner Descent/D2 Level扩展
LWLO Lightwave分层对象文件
LWOB Lightwave对象文件
LWP Lotus WordPro /文件
LWSC Lightwave视景文件
LYR DataCAD层文件
LZH LH ARC压缩档案
LZS Skyroads数据文件
M1V MPEG相关文件(MIME“mpeg”类型)
M3D Corel Motion 3D动画文件
M3U MPEG URL(MIME声音文件)
MAC MacPaint图像文件
MAD Microsoft Access模块文件
MAF Microsoft Access表单文件
MAG 在一些[非法语句]本文件中发现的图形文件格式
MAGIC 魔力邮件监视器配置文件
MAK Visual Basil或Microsoft Visual C++工程文件
MAM Microsoft Access宏
MAN UNIX手册页输出
MAP 映射文件;Duke Nukem 3D WAD游戏文件
MAQ Microsoft Access查询文件
MAR Microsoft Access报表文件
MAS Lotus Freelance Graphics Smart Master文件
MAT Microsoft Access表;3D Studio MAX材料库
MAUD MAUD抽样格式
MAX Kinetx的3DStudio MAX文件;该格式用于一个3D场景文件;Paperport文件;OrCAD设计文件
MAZ Hover迷路数据;Division的dVS/dVISE使用的文件格式
MB1 Apogee Monster Bash数据文件
MBOX Berkeley Unix邮箱格式
MBX Microsoft Outlook保存email格式;Eudora邮箱
MCC Dailerl0呼叫卡
MCP Metrowerks CodeWarrior工程文件
MCR DataCAD键盘宏文件
MCW Microsoft Word的Macintosh文档
MDA Microsoft Access内抽入器;Microsoft Access 2.0版及其后续版本的工作组事件
MDB Microsoft Access数据库
MDE Microsoft Access MDE文件
MDF Alcohol的文件格式
MDL 数字跟踪器音乐模块(MOD)文件;Quake模 块文件
MDN Microsoft Access空数据库模板
MDS Alcohol的文件格式
MDW Microsoft Access工作组文件
MDZ Microsoft Access向导模板文件
MED 音乐编辑器,OctaMED音乐模块(MOD)文件
MER 电子表格/数据库数据交换格式;FileMaker、Excel及其他软件能识别
MET 表示管理器元文件
MFG Pro/ENGINEER制造文件
MGF 在材料与几何学里的文件格式
MHTM,MHTML MHTML文档(MIME)
MI 杂项
MIC Microsoft Image Composer文件
MID
2024-11-19 08:30
2024-11-19 07:38
2024-11-19 07:29
2024-11-19 07:20
2024-11-19 06:37