搜索
首页后端开发Golang您的搜索引擎 Zensearch

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
初始功能和副作用:平衡初始化与可维护性初始功能和副作用:平衡初始化与可维护性Apr 26, 2025 am 12:23 AM

Toensureinitfunctionsareeffectiveandmaintainable:1)Minimizesideeffectsbyreturningvaluesinsteadofmodifyingglobalstate,2)Ensureidempotencytohandlemultiplecallssafely,and3)Breakdowncomplexinitializationintosmaller,focusedfunctionstoenhancemodularityandm

开始GO:初学者指南开始GO:初学者指南Apr 26, 2025 am 12:21 AM

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

进行并发模式:开发人员的最佳实践进行并发模式:开发人员的最佳实践Apr 26, 2025 am 12:20 AM

开发者应遵循以下最佳实践:1.谨慎管理goroutines以防止资源泄漏;2.使用通道进行同步,但避免过度使用;3.在并发程序中显式处理错误;4.了解GOMAXPROCS以优化性能。这些实践对于高效和稳健的软件开发至关重要,因为它们确保了资源的有效管理、同步的正确实现、错误的适当处理以及性能的优化,从而提升软件的效率和可维护性。

进行生产:现实世界的用例和示例进行生产:现实世界的用例和示例Apr 26, 2025 am 12:18 AM

Goexcelsinproductionduetoitsperformanceandsimplicity,butrequirescarefulmanagementofscalability,errorhandling,andresources.1)DockerusesGoforefficientcontainermanagementthroughgoroutines.2)UberscalesmicroserviceswithGo,facingchallengesinservicemanageme

go中的自定义错误类型:提供详细的错误信息go中的自定义错误类型:提供详细的错误信息Apr 26, 2025 am 12:09 AM

我们需要自定义错误类型,因为标准错误接口提供的信息有限,自定义类型能添加更多上下文和结构化信息。1)自定义错误类型能包含错误代码、位置、上下文数据等,2)提高调试效率和用户体验,3)但需注意其复杂性和维护成本。

使用GO编程语言构建可扩展系统使用GO编程语言构建可扩展系统Apr 25, 2025 am 12:19 AM

goisidealforbuildingscalablesystemsduetoitssimplicity,效率和建筑物内currencysupport.1)go'scleansyntaxandaxandaxandaxandMinimalisticDesignenhanceProductivityAndRedCoductivityAndRedCuceErr.2)ItSgoroutinesAndInesAndInesAndInesAndineSandChannelsEnablenableNablenableNableNablenableFifficConcurrentscorncurrentprogragrammentworking torkermenticmminging

有效地使用Init功能的最佳实践有效地使用Init功能的最佳实践Apr 25, 2025 am 12:18 AM

Initfunctionsingorunautomationbeforemain()andareusefulforsettingupenvorments和InitializingVariables.usethemforsimpletasks,避免使用辅助效果,andbecautiouswithTestingTestingTestingAndLoggingTomaintAnainCodeCodeCodeClarityAndTestesto。

INIT函数在GO软件包中的执行顺序INIT函数在GO软件包中的执行顺序Apr 25, 2025 am 12:14 AM

goinitializespackagesintheordertheordertheyimported,thenexecutesInitFunctionswithinApcageIntheirdeFinityOrder,andfilenamesdetermineTheOrderAcractacractacrosmultiplefiles.thisprocessCanbeCanbeinepessCanbeInfleccessByendercrededBydeccredByDependenciesbetenciesbetencemendencenciesbetnependendpackages,whermayleLeadtocomplexinitialitialializizesizization

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。