Maison  >  Article  >  développement back-end  >  Votre moteur de recherche, Zensearch

Votre moteur de recherche, Zensearch

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 12:05:02647parcourir

Your search engine, Zensearch

Le Beninging

De la création d'applications React à la création de mon propre moteur de recherche et de mon propre robot d'exploration Web pour l'indexation. Je suis heureux de vous présenter Zensearch, un moteur de recherche dans lequel vous, en tant qu'utilisateur, avez plus de contrôle sur ce que vous souhaitez que soient vos recherches, vous pouvez créer des entrées pour explorer différents sites Web et continuer à utiliser la fonctionnalité du moteur de recherche si vous en avez déjà. J'ai indexé les données dans la base de données pendant qu'il fait son travail, maintenant je sais que ce n'est peut-être pas le moteur de recherche le plus complexe ou le plus sophistiqué au monde comme Google ou Brave Search, mais j'ai construit cette chose pour évaluer tout ce que je peux faire par moi-même et apprendre autant que je peux en le faisant, et oh mon Dieu, j'ai beaucoup appris.

Tout a commencé lorsque je construisais mon application Web React, une sorte de livre banal pour insérer vos citations préférées ou ajouter des notes sur cette page spécifique comme si vous essayiez de converser avec l'auteur ou de taper ce que vous pensiez à ce moment-là sur une page qui correspond à la page de votre livre physique, ce n'est pas un mauvais projet mais je m'ennuyais tellement de construire des applications Reactjs, non pas que ce soit mauvais mais j'avais l'impression que je n'allais nulle part avec ça, il n'y a aucune profondeur technique dans ce que je faisais et je n'apprenais rien en construisant ces projets ReactJs.

J'ai donc essayé d'étudier les réseaux informatiques, les systèmes d'exploitation, l'architecture informatique, etc., puis après quelques mois d'étude et de construction de mon propre protocole de couche d'application, comme un websocket où je peux gérer plusieurs utilisateurs et chaque utilisateur peut rejoindre ces différents des pièces ou des espaces de noms où ils peuvent communiquer entre eux et je me sentais extatique, vivant même. J'avais l'impression que je pouvais faire tellement de choses tant que je comprenais comment fonctionne l'ordinateur, par exemple : les threads, les sémaphores, les processus, la disposition de la mémoire, les signaux d'interruption, etc. Alors je me suis demandé quels projets puis-je faire pour utiliser certaines des choses qui J'ai appris ?

oh et je suis autodidacte et j'ai utilisé le projet Odin pour apprendre la programmation et le développement Web, alors merci à ces gars-là parce qu'ils m'ont appris à devenir indépendant pour étudier et ont refusé de tenir les programmeurs dans leurs bras tout au long du programme. .

Défis

Je n'ai pu programmer qu'en utilisant Nodejs, c'était mon pain quotidien avec dactylographié, alors j'ai construit le robot d'exploration Web en utilisant Nodejs... assez stupide, non ? Je veux dire que le plan était de créer un robot capable d'explorer un tableau d'URL sources à partir du front-end et de laisser chaque robot envoyer ces données extraites à la base de données, et comme nous le savons tous, Yabascript est monothread et chaque tâche asynchrone est gérée. par l'environnement dans lequel Yavascript s'exécute, par exemple : les API, le nœud, le deno, le chignon et le terminé du navigateur.

donc effectuer des opérations multitâches à l'aide de Nodejs était une mission suicide et c'était le cas, de la conversion de l'objet de page Web à encoder en un tampon de 8 bits, mais le tampon de tableau partagé ne peut transporter que le tampon de tableau de 64 bits en raison des données alignement, j'ai donc dû convertir du tampon 8 bits en 64 bits en ajoutant des remplissages de décalage, puis revenir du tampon 64 bits au tampon 8 bits après avoir envoyé les données du robot au thread principal, puis enfin les analyser en un Objet vajascript... wow, c'était amusant, il existe un autre moyen de transmettre des messages mais cela crée une copie des mêmes données qui se trouvent dans le robot vers le thread principal, donc je ne voulais pas cela car cela prendrait tellement de mémoire .

J'ai dû gérer des conditions de concurrence en utilisant le module atomique de nodejs et à ce jour, je ne comprends toujours pas comment ce module fonctionne pour être honnête et cela m'a tellement ennuyé que j'ai dû me tourner vers Golang. J'aime tellement ce langage, il est si facile de créer des threads gérant les conditions de concurrence, en utilisant des sémaphores et des groupes d'attente, je n'ai pas encore eu besoin d'utiliser mutex et je suis impatient de l'apprendre alors peut-être dans le futur, avec le contexte serait amusant à apprendre.

Passons au front-end, d'accord ? L'un d'entre vous a-t-il lu cet article rédigé par des maîtres du frontend ? Vous n'aurez peut-être pas besoin de ce framework, vous vous souvenez que j'ai dit que je m'ennuyais des ReactJ ? eh bien, cela m'a fait apprécier les frameworks en raison de leur réutilisabilité et de leurs mécanismes de liaison de données.

Je ne veux pas entrer dans trop de détails sur le front-end, mais j'ai utilisé un modèle PubSub pour mettre à jour toutes les modifications de l'interface utilisateur lorsque les données changent et j'ai utilisé des composants Web avec le shadow dom pour créer des composants réutilisables, le shadow dom C'était difficile d'y accéder en javascript et en style car il est isolé de l'ensemble de l'arborescence dom, donc y accéder en utilisant CSS et l'API DOM ne fonctionnera pas, alors oui, c'étaient les seuls défis que j'ai eu mais c'était amusant... c'était amusant quand je était en train de migrer le robot de Nodejs vers Go.

Choses à considérer

Il y a certaines fonctionnalités que je n'ai pas encore implémentées parce que j'avais tellement hâte de montrer le projet mais cela ne m'importe pas beaucoup même s'il s'agit d'un projet en cours, ce n'en sera pas un et projet terminé, je continuerai à améliorer zensearch à l'avenir, donc pour l'instant, voici quelques éléments clés qui manquent :

  • Mise en place d'une liste de sites Web déjà indexés à afficher aux utilisateurs sur le front-end.

  • Enregistrez la page Web la plus récemment explorée pour continuer.

  • Créez une annulation pour l'exploration mais enregistrez toujours les pages indexées jusqu'à ce point.

  • Limitation de la taille des messages de Rabbitmq pour la mise à l'échelle, si une base de données contient plus que la taille par défaut définie dans Rabbitmq, le courtier de messages générera une erreur et plantera, donc pour éviter cela, je vais essayer d'implémenter un cadre de fenêtre algorithme utilisé dans TCP en créant un mécanisme de pipeline dans lequel le tableau de pages Web sera divisé en segments et envoyé au moteur de recherche par taille N où N est la taille de la fenêtre, je dois encore y réfléchir.

  • Donnez aux utilisateurs la possibilité de supprimer leurs sites Web indexés.

Épilogue

J'aimerais écrire davantage sur ce que j'ai appris et certaines nuances de mon parcours de développement mais je pense que ce serait trop long, donc pour l'instant je veux montrer mon plus grand projet, et je serais heureux d'avoir des retours de votre part, si vous avez le temps et faites-moi savoir s'il y a des problèmes et des améliorations que je pourrais faire pour améliorer Zensearch, oh et tout cela est grâce au primeagean, ce type m'a inspiré à approfondir les choses et à apprendre les bases à la place de simplement exécuter npm create vite@latest my-vue-app -- --template react-ts dans le terminal, ce qui m'a certes rendu peu sûr de moi-même en tant que programmeur et des choses que je connais, mais à cause de cette insécurité que j'ai apprise de nouvelles choses maintenant, je m'efforce toujours d'apprendre plus de choses et je serais heureux d'apprendre de VOS commentaires, alors merci d'avoir écouté ma conférence Ted.

Dépôt Github pour Zensearch

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn