您的搜索引擎 Zensearch
来源:dev.to
时间:2024-12-06 16:54:45 488浏览 收藏
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《您的搜索引擎 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在终端中创建 vite@latest my-vue-app -- --template react-ts ,这无疑让我对自己作为一名程序员和我所知道的事情感到不安全,但由于这种不安全感,我现在学到了新东西我一直在努力学习更多东西,并且很乐意从您的反馈中学习,所以感谢您聆听我的 ted 演讲。
Zensearch 的 Github 存储库
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。
-
505 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
438 收藏
-
280 收藏
-
181 收藏
-
371 收藏
-
236 收藏
-
416 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习