2014-09-11 13 views
7

Kürzlich bemerkte ich einige Leistungsprobleme in meiner Website Javascript-Code. Nach einigem Profiling entdeckte ich, dass das Problem der Marketo Munchking Code ist, den ich verwende, um Ereignisse zu verfolgen. Es sieht so aus, als ob sie in letzter Zeit ihren JS-Code so geändert haben, dass sie für jeden Anruf eine synchrone HTTP-Anfrage an Munchkin.munchkinFunction senden. Der entsprechende Code-Schnipsel ist:Marketo Munchkin synchrone Anfragen verletzt JS Leistung

a=new XMLHttpRequest;a.open("GET",b,!1); ... a.send(); 

Ich habe ein Ticket mit Marketo geöffnet, aber bis sie ihren Code zu beheben, ich suche eine Abhilfe. Ich dachte an ein paar:

  1. Gibt es eine Möglichkeit, ihre js-Code zu haken, um die XMLHttpRequest async zu zwingen?
  2. Es ist sicher, direkt auf ältere Versionen ihres Skripts zu verweisen, z. B. //munchkin.marketo.net/143/munchkin.js. Ich habe es getestet und es funktioniert, aber vielleicht fehlt mir etwas.

Gibt es weitere Problemumgehungen? Jeder Gedanke wird geschätzt.

UPDATE:

mich sehr über eine Antwort von Marketo Unterstützung. Sie geben zu, dass die Anrufe tatsächlich synchron sind, aber sie behaupten, dass dies der einzige Weg ist, um keine Informationen zu verlieren. Ich denke, sie denken an den Fall, wenn ein Anruf an Munchkin.munchkinFunction kurz vor einer Weiterleitung gemacht wird. Ich stimme ihnen nicht zu und werde sie um eine Alternative bitten. In der Zwischenzeit benutze ich eine alte Version ihres Codes.

UPDATE # 2:

eine andere Antwort von ihren Support Team, das die meine Ideen sind gut, aber sie können sie nicht sofort umsetzen, und sie hoffen, dass einer der Entwickler sie abholt eines Tages ... Jedenfalls habe ich eine idea in the Marketo community erstellt.

Antwort

11

Update (Okt 2015): Diese Funktion ist jetzt dokumentiert here.

Ich ging einfach über die neue Version des Munchkin-Code (150) und fand die folgenden undokumentierte Parameter:

Munchkin.init('XXXXXX', {asyncOnly: true}); 

ich es ausprobiert und es macht den Job - all HTTP-Anfragen jetzt async sind.

+0

Danke, diese Fehler wurden frustrierend! – Thomas

+0

Ich bin auch darüber gestolpert, aber ich kann nicht finden, was die Vor-/Nachteile sind, es als falsch gegen wahr zu haben. Offensichtlich sind Ihre Anfragen jetzt wirklich asynchron, aber warum ist hier der Standardwert false? – kamelkev

0

Verwenden Sie definitiv die asynchrone Version des Tracking-Codes? Wenn Sie in Ihrem Marketo-Administrator unter Tracking-Code nachsehen, gibt es ein Dropdown-Menü, um den Tracking-Code-Typ auszuwählen. Stellen Sie sicher, dass dieser auf Asynchron ist, und verwenden Sie dann diesen bestimmten Skriptblock in Ihrer Site.

Auch, wenn Sie unter der Treasure Chest Abschnitt im Admin suchen, gibt es eine Option, um die Beta-Munchkin-Code aktivieren - vielleicht versuchen, dass, wenn die oben genannten nicht funktioniert.

+0

Definitiv der Async-Code. Ich werde den Beta-Code ausprobieren, aber ich habe gerade eine Antwort vom Marketo-Support erhalten. Siehe meine aktualisierte Frage. – Tzach

+0

hmm, das ist ein bisschen ein gotcha, muss für diesen einen aufpassen. Viel Glück! – michaelroper

+0

Sie können die asynchrone Tracking-Code-Option im Marketo-Admin-Tool nicht auswählen. Es sagt, es ist asynchron, aber es ist wirklich nicht. Es wird weiterhin versuchen, Link-Klicks als synchrone Aufrufe zu behandeln, die auch nicht das in ihren Dokumenten angegebene standardmäßige "clickTime" -Zeitlimit von 350 Millisekunden einhalten.Sie müssen explizit "asyncOnly: true" angeben. Ihr JavaScript-Snippet ließ unsere Web-Eigenschaften 6+ Sekunden dauern, wenn ein Nutzer auf einen Link klickte und Popup-Blocker auslöste, wann immer wir versuchten, einen Link in einem neuen Tab zu öffnen. – user1212241