2010-11-17 5 views
1

J'ai un dictionnaire de spécialité JS qui trouve certains mots-clés sur une page et leur ajoute des info-bulles explicatives. À l'heure actuelle, j'utilise RegEx pour trouver les mots-clés, mais je soupçonne que ça va ralentir très bientôt, quand mon dictionnaire s'agrandira. Je stocke les entrées de dictionnaire dans un tableau, donc je pense que cela peut aussi être amélioré. La langue de mon site est le vietnamien et mes mots-clés seront tous en anglais.Algorithme rapide pour trouver des mots-clés dans une page HTML en utilisant Javascript

Toute idée sur l'amélioration des performances sera très appréciée. Merci.

+0

montrez-nous du code s'il vous plaît. – galambalazs

Répondre

1

Vous pouvez traiter votre côté serveur de dictionnaire (vérifie la sortie par rapport aux mots-clés), puis ajoutez un gestionnaire à chaque élément correspondant (une classe ou un autre élément html pour identifier la définition à utiliser ..). puis utilisez javascript pour lier chaque élément à votre dictionnaire. De cette façon, votre serveur fait le gros du travail.

1) Server charge votre fichier dictionnaire et compare contre le texte que vous êtes sur le point de sortie

2) Lorsqu'une correspondance est trouvée ajouter

<span class="definition">yourword</span> 

3) gestionnaire d'événements javascript générique (ce qui est écrit dans jQuery, mais bien sûr, vous pouvez FDO toute façon vous aimez)

$('.definition').mouseOver(function(){ 
    var keyword = $(this).html(); 
    //load your definition using the keyword... 
}) 
+0

Merci pour la réponse détaillée. J'ai pensé à déplacer l'opération vers le côté serveur, mais mon serveur n'est pas très rapide et je veux pouvoir utiliser ce dictionnaire sur d'autres sites que je n'ai pas accès au code source. – hellocrowley

+0

O.K - mais peu importe la lenteur de votre serveur, il sera plus rapide que le navigateur de votre utilisateur. Cependant, je ne connais pas votre niveau de trafic qui serait le briseur d'affaire - si vous avez un trafic élevé et un serveur lent alors ne pas faire ce côté serveur de traitement est peut-être la meilleure chose à faire. Dépend aussi de la taille de votre page :-) – calumbrodie

0

Voir ma réponse à une question connexe: javascript: find strings in dom and emphasize it

Voir aussi la réponse acceptée à cette question qui est un plugin jQuery pour faire exactement ce que vous voulez. Le problème de faire cela avec regexp n'est pas la vitesse puisque certaines personnes affirment que la méthode d'analyse DOM peut être plus lente. Le problème est d'éviter les fausses casses comme: vous ne voulez pas remplacer une chaîne javascript qui contient le mot-clé, vous ne voulez pas remplacer le nom de classe css ou l'ID qui contient le mot-clé, etc.

Dans mon expérience, la façon DOM est assez rapide. En fait, mon site Web a une liste de plus de 100 mots-clés et il parvient à installer des infobulles sur chacun d'eux en moins d'une demi-seconde (certainement plus vite que ce que je peux voir).

+1

Votre oeil peut différencier entre ~ 40ms. :) – galambalazs

+0

Je vois ce que vous obtenez. En fait ce que je fais est d'aller à certains noeuds et regex là, je ne regex pas tout le noeud BODY ... Votre conseil pour éviter certains noeuds est certainement utile, merci. Cependant, je m'attends à ce que mon dictionnaire contienne bientôt un millier de mots. Est-ce que le javascript pourrait bloquer le navigateur ou fonctionnerait-il en arrière-plan lentement? Je n'ai pas vraiment besoin des mots-clés à traiter tout de suite, je ne veux tout simplement pas ralentir le chargement de la page. – hellocrowley

Questions connexes