從建立 React 應用程式到建立我自己的搜尋引擎和用於索引的網路爬蟲。我很高興向您介紹Zensearch,這是一個搜尋引擎,作為用戶,您可以更好地控制您想要的搜尋內容,您可以創建條目來抓取不同的網站,並繼續使用搜尋引擎功能(如果您有現有的搜索引擎功能)在數據庫中索引數據,同時它工作,現在我知道這可能不是世界上最複雜或最先進的搜索引擎,如穀歌或勇敢的搜索,但我構建這個東西是為了衡量我自己可以做多少事情並學習在做的過程中盡我所能,天哪,我學到了很多東西。
這一切都始於我建立React Web 應用程式時,這是一本常見的書,用於插入您最喜歡的引言或向特定頁面添加註釋,就好像您試圖與作者交談或輸入您的想法一樣在那一刻,在與你的實體書頁面相對應的頁面上,這不是一個糟糕的項目,但我只是厭倦了構建Reactjs 應用程序,並不是說它很糟糕,而是感覺我不會帶著它去任何地方,我所做的事情沒有技術深度,而且我沒有從建立這些ReactJ 專案中學到任何東西。
所以我嘗試研究電腦網路、作業系統、電腦體系結構等,然後經過幾個月的學習和建立我自己的應用程式層協定(例如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中文網其他相關文章!