首页  >  文章  >  后端开发  >  您的搜索引擎 Zensearch

您的搜索引擎 Zensearch

Barbara Streisand
Barbara Streisand原创
2024-11-06 12:05:02647浏览

Your search engine, Zensearch

贝宁宁号

从构建 React 应用程序到构建我自己的搜索引擎和用于索引的网络爬虫。我很高兴向您介绍 Zensearch,这是一个搜索引擎,作为用户,您可以更好地控制您想要的搜索内容,您可以创建条目来抓取不同的网站,并继续使用搜索引擎功能(如果您有现有的搜索引擎功能)在数据库中索引数据,同时它工作,现在我知道这可能不是世界上最复杂或最先进的搜索引擎,如谷歌或勇敢的搜索,但我构建这个东西是为了衡量我自己可以做多少事情并学习在做的过程中尽我所能,天哪,我学到了很多东西。

这一切都始于我构建 React Web 应用程序时,这是一本常见的书,用于插入您最喜欢的引言或向特定页面添加注释,就好像您试图与作者交谈或输入您的想法一样在那一刻,在与你的实体书页面相对应的页面上,这不是一个糟糕的项目,但我只是厌倦了构建 Reactjs 应用程序,并不是说它很糟糕,而是感觉我不会带着它去任何地方,我所做的事情没有技术深度,而且我没有从构建这些 ReactJs 项目中学到任何东西。

所以我尝试研究计算机网络、操作系统、计算机体系结构等,然后经过几个月的学习和构建我自己的应用程序层协议(例如 websocket),我可以在其中处理多个用户,并且每个用户可以加入这些不同的用户他们可以互相交流的房间或命名空间,我感到欣喜若狂,甚至充满活力。我觉得只要我了解计算机的工作原理,我就可以做很多事情,例如:线程,信号量,进程,内存布局,中断信号等,所以我想,我可以做哪些项目来利用这些东西我学会了?

哦,顺便说一句,我是一个自学成才的人,我使用 Odin 项目来学习编程和 Web 开发,所以要向那些家伙大声喊叫,因为他们教会了我如何独立学习,并拒绝在整个课程中牵手程序员.

挑战

我只能使用 Nodejs 进行编程,那是我的面包和黄油以及打字稿,所以我使用 Nodejs 构建了网络爬虫......很愚蠢,对吧?我的意思是计划是创建一个爬虫,可以从前端爬取一组源URL,并让每个爬虫将这些提取的数据发送到数据库,并且众所周知Yabascript是单线程的,并且处理每个异步任务由 Yavascript 运行的环境决定,例如:浏览器的 api、node、deno、bun 和 did。

所以使用 Nodejs 进行多任务操作是一个自杀任务,它是将要编码的网页对象转换为 8 位缓冲区,但由于数据原因,共享数组缓冲区只能传输 64 位数组缓冲区因此我必须通过添加一些偏移填充来从 8 位缓冲区转换为 64 位,然后在将数据从爬虫发送到主线程后从 64 位缓冲区返回到 8 位缓冲区,最后将其解析为vajascript 对象...哇,这很有趣,还有另一种消息传递方式,但是会创建爬虫中相同数据的副本到主线程,所以我不想这样做,因为它会占用太多内存.

我必须使用 Nodejs 的原子模块来处理竞争条件,直到今天我仍然不明白该模块是如何工作的,说实话,这让我非常恼火,所以我不得不转向 Golang。我非常喜欢这种语言,使用信号量和等待组创建处理竞争条件的线程非常容易,我还不需要使用互斥体,我很高兴学习它,所以也许在将来,以及学习上下文会很有趣。

让我们继续讨论前端吧?你们有人读过前端大师的这篇文章吗?你可能不需要那个框架,还记得我说过我厌倦了 ReactJs 吗?嗯,这让我欣赏框架,因为它们的可重用性和数据绑定机制。

我不想深入了解有关前端的太多细节,但我使用 PubSub 模式在数据更改时更新任何 UI 更改,并使用 Web 组件和 Shadow dom 来创建可重用组件,即 Shadow dom在 javascript 和 style 中访问是很痛苦的,因为它与整个 dom 树隔离,所以使用 CSS 和 DOM API 访问它是行不通的,所以是的,这些是我遇到的唯一挑战,但这很有趣......当我正在将爬虫从 Nodejs 迁移到 Go。

需要考虑的事项

有些功能我还没有实现,因为我非常渴望展示这个项目,但这对我来说并不重要,即使这是一个正在进行的项目,这也不会是一个项目完成的项目我将在未来不断改进 zensearch,所以现在这里缺少一些关键的东西:

  • 实现已索引网站的列表,以在前端向用户显示。

  • 保存最近抓取的网页以便继续。

  • 创建抓取取消,但仍保存到目前为止的索引页面。

  • Rabbitmq 的缩放消息大小限制,如果数据库包含的内容超过rabbitmq 中设置的默认大小,消息代理将抛出错误并崩溃,因此为了避免这种情况,我将尝试实现一个窗口框架tcp 中使用的算法,通过创建管道机制,将网页数组分成段并按 N 大小发送到搜索引擎,其中 N 是窗口的大小,我仍然需要考虑这一点。

  • 让用户能够删除其索引网站。

结语

我想写更多关于我学到的东西和我的开发旅程的一些细微差别,但我认为这太长了,所以现在我想展示我最伟大的项目,我很高兴得到一些反馈如果你们有时间的话,请告诉我是否有任何问题和改进可以让 Zensearch 变得更好,哦,这全归功于 theprimeagean,这个人激励我更深入地研究事物并学习基础知识只是在终端中运行 npm create vite@latest my-vue-app -- --template react-ts ,这无疑让我对自己作为一名程序员以及我所知道的事情感到不安全,但由于我学到了这种不安全感现在我一直在努力学习更多东西,并且很乐意从您的反馈中学习,所以感谢您聆听我的 ted 演讲。

Zensearch 的 Github 存储库

以上是您的搜索引擎 Zensearch的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn