2010-07-01 4 views
0

J'ai dû développer un gestionnaire de newsletter avec JS + PHP + MYSQL et je voudrais savoir quelques choses sur le navigateur qui temporise les fonctions JS. Si j'exécute une fonction récursive qui retarde un appel à lui-même (alors que PHP retourne une liste d'email), comment puis-je être sûr que le navigateur ne temporise pas cette fonction JS? Je demande cela, parce que je me souviens avoir utilisé un gestionnaire de newsletter similaire, que tout en faisant les requêtes ajax, après quelques appels, il s'est arrêté sans raison apparente. Je sais que JS n'est pas bon pour cela, et je devrais utiliser Crontab sur le serveur, mais, je ne peux pas supposer que le serveur des utilisateurs gère cron, donc je devais coller avec JS + php. PS - Cela ne s'est pas encore produit sur cette application, j'essaie juste d'éviter le pire des scénarios (depuis que j'ai testé un gestionnaire de newsletter, qui a fonctionné de la même manière que celui que je développe). Étant donné que ma liste de courriels est petite et que les délais entre les appels sont également faibles, cela fonctionne très bien, mais imaginons une liste de 1 000 contacts, avec un délai entre les envois de 120 secondes: Envoi de 30 courriels toutes les 2 minutes.navigateur temporisateur sur la fonction récursive Javascript, comment résoudre?

Au fait, pourquoi ça? Eh bien, de nombreux serveurs d'hébergement a une limite sur les e-mails envoyés par jour ou par heure et cela permet d'éviter de violer cette politique.

Merci pour votre temps tout commentaire à ce sujet est apprécié, du point de vue Mootools D

+0

Je suppose que je pourrais juste demander à, des conseils sur la façon de maintenir en vie sur le navigateur un script javascript récursif, qui s'appelle avec un long délai? – punkbit

+1

Si vous publiez un exemple du type de code dont vous parlez, les gens pourraient peut-être vous aider. "Expirer des fonctions récursives" n'a pas de sens (pour moi au moins). – Pointy

+0

En outre, il ne s'agit pas d'une "récursivité" lorsqu'une fonction de délai d'attente est configurée pour un autre délai. Je ne suis pas familier avec un navigateur qui refuse d'honorer les gestionnaires de timeout (à moins que la page d'appel ne disparaisse, bien sûr). – Pointy

Répondre

0

, il y a plusieurs solutions possibles ici.

a beaucoup d'options qui permettent de manipuler des lots d'emplois, regardez comme un .periodical plus complexe (setInterval) qui comprend la nature async du résultat et peut compenser le retard, etc. Je pense qu'il peut littéralement faire ce que vous définissez dans vos exigences hors de la boîte, tout ce dont vous avez besoin est un rappel inachevé qui efface le fait de votre tableau en attente (par exemple).

essentiellement, configurer toutes vos demandes pour gérer les blocs de données et de les transmettre à Request.Queue pour traiter séquentiellement. Probablement moins sophistiqué du point de vue de l'envoi de contrôle de taux.

0

Que diriez-vous d'un meta refresh. Cela ne provoquera pas de délai d'attente dans votre fonction javascript. Vous suffit de recharger votre page après un certain temps et ensuite envoyer les prochains emails. En ajoutant un paramètre à l'URL, vous pouvez savoir sur quel "round" vous êtes.

Est-ce que cela peut faire le travail pour vous?

0

Vous devez utiliser setTimeOut. Le code doit céder le contrôle au thread d'interface utilisateur et laisser le navigateur répondre pour éviter l'arrêt du script.

Lire la suite par Nick Z. http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

Il y a aussi quelque chose que le Spec W3C sur ce appelé « Script efficace Cédant » Je ne sais pas à quel point il est long ou si tous les navigateurs soutiennent. https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html

Vous pouvez également essayer HTML5 Web Workers.

Questions connexes