对搜索引擎的偏执与我的四年前端生涯

发布于: 2024-09-25

转眼间,入门前端已经有四年了。从我的第一个独立前端项目"Gleandu"到现在最新的项目“inSearch”,都是有关搜索引擎的。我好像自始至终都对它有一种偏执:不满足于现有的搜索引擎体验,想把极致的搜索体验带给所有人。

Google Search 不必多说,是绝对的业界标杆,是最优雅的搜索引擎,可惜在中国大陆不能用;Bing 固然也不错,但依然存在一些广告堆砌在搜索结果列表的顶端;至于 Baidu 等国内大厂的搜索引擎更不必多说,piece of shit...做一个国内普通群众能够使用的纯净、优雅的搜索引擎便是我的最终目的。

产品设计

Gleandu

顾名思义,就是“Clean version of Baidu made by Gloridust”的意思。这大概是两年多前做的,也是入门前端后的第一个独立作品(之前大概是一些练手小作品,现有模板改改代码做的页面)。Gleandu主要作为一个聚合多种搜索引擎的首页,提供了一个简洁的 Landing page,但搜索结果还是跳转到了搜索引擎提供方--这也是迫于当时能力不足的无奈。

gleandu-webui

这个项目最后的结果是,完结即破产:它太丑了,丑到我自己都不想用它。它虽然解决了 Baidu 首页信息流碍眼的问题,但还是实在太丑了:搜索框排版太畸形,下拉列表无法对齐,设计风格不统一...无论从技术还是设计上来讲,都是失败品。

我曾经有一年的时间把它当作 chrome 主页,但是几乎每次搜索都是通过 URL 栏直接用 Google 搜索。一方面,我的 PC & Mac 一直挂着 Clash,能使用 Google;另一方面,丑陋的设计让我没有使用欲望,尽管它的功能很完善。再后来,我就完全放弃这个项目了。

inSearch

直至今年,我们大学里有一个十分体面的教授提起了“我们没有一个体面的搜索引擎”这件事,让我再次想起了我最初的作品,我意识到,这十几年来,“需要一个优雅/体面的搜索引擎”这个需求始终没有变过。如今,我的技术水平有了提升,UI 设计能力也有了进步,还有 LLM 辅助我。我想,也许我应该再试试。

我用了 React/NextJS 构建了前后端主体,通过爬虫来模拟用户请求,这样就避免了跳转到原搜索引擎的结果页面,让用户体验能牢牢的掌握在我自己手里。简约、扁平化风格的设计一直是我所推崇的,顶部悬浮的导航栏也是我最得意的设计语言之一。这样,我就构建了一个至少让我自己愿意使用的 UI;对用户系统的适配是必选项,我认为这是对操作系统设计的一种尊敬,所以我也适配了深色模式等。

inSearch-webui

这样,用户可以体验到和 Google 一样水准的搜索结果。可是新的问题又来了:有些搜索结果,用户打不开。

像维基百科这类高质量网站,大陆用户是无法访问的,但是它又是高质量的。我认为搜索结果可访问也是对搜索引擎“高质量”的评判标准之一。所以我利用 Workers 制作了“网页代理”功能,只要打开它,就能让一些无法访问的高质量网站显示基础内容。尽管这样的反向代理方式仍然可能导致一些布局失效、媒体文件打不开,但访问不了和质量不高是两回事--至少能看了。

inSearch-proxy

技术进步

此处不得不提及一下他们的相关技术。两年多前我构建Gleandu 时,我还只会使用 Html/CSS/JS 三大件,这样繁琐的代码工作对于开发者是十分枯燥和痛苦的。尽管它的代码文件很少,但十分难看。

gleandu-github

gleandu-language

而 inSearch 得益于 React/NextJS 的组件化编写,代码可读性很高,维护和更新也十分方便。语言和技术栈上也体现了一些技术进步:TS, React, NextJS, Workers...这些都是帮助我创造 inSearch 的必要得力工具。

inSearch-github

inSearch-language

我一直以为四年间我没什么进步,但对比这两个项目,我已经很好了。我现在已经把它作为日常搜索引擎使用了。它非常优雅、体面,你一定会爱上它。