In letzter Zeit gibt es selten Zeit, die vorherige Serie nachzuholen, die Ihnen die vergrabenen Punkte schuldet fängt jetzt an zu starten
Warum man sich auf das System konzentrieren muss
im Film
Front-End-Entwicklung Siege Lion codiert gerne, sehr stolz auf die getrennte Entwicklung von Business und UI, verschiedene Designmuster, Algorithmusoptimierung, perfekt Code-Schreiben (Arbeitscode-Welt zuerst), es gibt keine Fehler, das Programm ist perfekt, die Kompatibilität ist Nr. 1, der Code kann eingegeben und widerstanden werden und die Qualität ist hoch. Sie können ganz einfach nach Feierabend einchecken und nach Hause gehen, um sich um Ihr Baby zu kümmern.
In Wirklichkeit
Tatsächlich sind die Entwicklungsumgebung und die Produktionsumgebung nicht identisch, und egal wie perfekt der Testprozess ist, es werden immer noch Tests verpasst. Unter Berücksichtigung der Existenz einer Reihe unsicherer Faktoren wie der Clientumgebung des Benutzers, der Netzwerkumgebung usw. Sie müssen sich also während des Entwicklungsprozesses an die drei Hauptprinzipien erinnern (
Ich rede nur Unsinn
)
Es gibt keinen perfekten Code, nur unentdeckte Fehler
Vertrauen Sie niemals der Testumgebung
, das gibt es Keine einheitliche Testumgebung. Alle Online-Situationen werden abgedeckt. Wenn es online kein Feedback gibt, zweifeln Sie nicht daran, das Problem sollte sehr tief verborgen sein.
Was ist das vergrabene Punktesystem?
Vergrabene Punkte sind wie Kameras in der Stadt, aus Produktsicht Bedenken Sie, dass es die Verhaltensverläufe der Benutzer in unseren Produkten überwachen kann und eine Grundlage für Produktiteration und Projektstabilität bietet.
WER, WANN, WO, WIE und WAS sind die grundlegenden Dimensionen für die Datenerfassung .
Für die Front-End-Entwicklung können Sie die Leistung beim Laden von Seitenressourcen, Ausnahmen usw. überwachen, Seitenerfahrung und Gesundheitsindex bereitstellen, eine Grundlage für die nachfolgende Leistungsoptimierung bereitstellen und Ausnahmen und Vorkommensszenarien zeitnah melden. Dies ermöglicht eine rechtzeitige Behebung von Problemen und eine Verbesserung der Projektqualität.
Vergrabene Punkte können grob in drei Kategorien eingeteilt werden:
Spurlose vergrabene Punkte – Alle Informationen auf der Seite werden wahllos erfasst, einschließlich Seitenein- und -austritt, Ereignisklicks usw. Um nützliche Informationen zu erhalten, ist eine Datenlöschung erforderlich
Visuelle vergrabene Punkte Punkte
– Erhalten Sie bestimmte Punkte basierend auf der generierten Seitenstruktur und vergraben Sie Punkte separat zur Analyse.
Manuelle Vergrabungspunkte für Geschäftscodes
– Entfernen Sie je nach spezifischen und komplexen Unternehmen die Orte, die nicht durch die abgedeckt werden können oben zwei Arten und vergrabene Geschäftscodepunkte
Vergrabene Punkte codieren
Visuelle vergrabene Punkte
Unsichtbare vergrabene Punkte
Typische Szenarien
Unsichtbare vergrabene Punkte können nicht abgedeckt werden, z als jene die Geschäftsdaten erfordern
Einfache und standardisierte Seitenszenarien
Einfache und standardisierte Seitenszenarien,
Vorteile
Klare Geschäftsdaten
Geringe Entwicklungskosten, Betreiber können relevante vergrabene Punkte direkt konfigurieren
Keine Konfiguration erforderlich, Daten können zurückverfolgt werden
Unzureichend
Daten können nicht zurückverfolgt werden, die Entwicklungskosten sind hoch
Geschäftsdaten können nicht zugeordnet werden, die Daten können nicht zurückverfolgt werden
Die Datenmenge ist groß, Geschäftsdaten können nicht zugeordnet werden
In den meisten Fällen können wir alle Informationsdaten über spurlose vergrabene Punkte sammeln und dann mit den visuellen vergrabenen Punkten zusammenarbeiten, um einen bestimmten Punkt gezielt zu lokalisieren, sodass die meisten Informationen zu vergrabenen Punkten entsprechend analysiert werden können.
Unter besonderen Umständen können Sie mehr Geschäftscode hinzufügen, um die Punkte manuell zu vergraben, um spezielle Szenarien zu bewältigen (in den meisten Fällen hat ein starkes Geschäft nichts mit normalen Klicks und Aktualisierungsereignissen zu tun und muss Informationen melden).
Vergraben Sie die SDK-Entwicklung
Bury Point-Datenerfassung und -analyse
Basisdaten des Ereignisses
Zeitpunkt des Ereignisses
Momentaufnahme der Seiteninformationen, als es auftrat
Seite
Seiten-PV, UV
Verweildauer der Benutzerseite
Seitensprungereignis
Die Seite tritt in den Hintergrund ein.
Benutzer verlässt die Seite.
Benutzerinformationen
Benutzerklick
Klickziel
Seiten-AJAX-Anfrage
Anfrage erfolgreich
Anfrage fehlgeschlagen
Anfrage-Timeout
Seitenfehlermeldung
Ressourcenladefehlermeldung
JS wird ausgeführt Fehlerberichterstattung
Neue Leistung beim Laden von Ressourcen
Bilder
Skript
Leistung beim Laden von Seiten
Die oben genannten Daten definieren vergrabene Ereignisse durch
3 Dimensionen
·LEVEL: Beschreibt die Protokollebene vergrabener Daten
INFO: einige Benutzeroperationen, Anforderungserfolg, Ressourcenladen usw. normale Datensätze
ERROR: JS-Fehlerberichterstattung, Schnittstellenfehlerberichterstattung usw. Datensätze von Fehlern Typen
DEBUG: Reserviert Entwickler können manuelle Aufrufe verwenden, um Datensätze zurückzugeben, um Fehler zu beseitigen
WARN: Es ist Entwicklern vorbehalten, manuelle Aufrufe zu verwenden, um Datensätze von zurückzugeben anormales Benutzerverhalten
CATEGORY: Beschreibt die Klassifizierung von Daten zu vergrabenen Punkten
TRACK: Der Lebenszyklus des SDK-Objekts zu vergrabenen Punkten verwaltet die gesamten Daten zu vergrabenen Punkten. LEVEL: 描述埋点数据的日志级别
INFO:一些用户操作,请求成功,资源加载等等正常的数据记录
ERROR: JS报错,接口报错等等错误类型的数据记录
DEBUG: 预留开发人员通过手动调用的方式回传排除bug的数据记录
WARN: 预留开发人员通过手动调用的方式回传非正常用户行为的的数据记录
CATEGORY:描述埋点数据的分类
TRACK: 埋点SDK对象的生命周期管理整个埋点数据。
WILL_MOUNT:sdk对象即将初始化加载,生成一个默认ID,跟踪全部相关事件
DID_MOUNTED:sdk对象初始化完成,主要获取设备指纹等等的异步操作完成
AJAX: AJAX相关数据
ERROR:页面中的异常相关数据
PERFORMANCE: 关于性能相关数据
OPERATION: 用户操作相关数据
EVENT_NAME:具体的事件名称
根据上述的维度,我们可以简单设计如下的架构
根据上图的架构,再进行下面的具体代码开发
代理请求
在浏览器中现在主要有 2 种请求方式,一个是 XMLHttpRequest, 一个是 Fetch。
代理 XMLHttpRequest
function NewXHR() { var realXHR: any = new OldXHR(); // 代理模式里面有提到过
realXHR.id = guid() const oldSend = realXHR.send;
realXHR.send = function (body) {
oldSend.call(this, body) //记录埋点
}
realXHR.addEventListener('load', function () { //记录埋点
}, false);
realXHR.addEventListener('abort', function () { //记录埋点
}, false);
realXHR.addEventListener('error', function () { //记录埋点
}, false);
realXHR.addEventListener('timeout', function () { //记录埋点
}, false); return realXHR;
}复制代码
WILL_MOUNT: Das SDK-Objekt wird gerade initialisiert und geladen, eine Standard-ID wird generiert und alle zugehörigen Ereignisse werden verfolgt. 🎜🎜DID_MOUNTED: Das SDK-Objekt wird initialisiert , hauptsächlich asynchrones Abrufen von Gerätefingerabdrücken usw. Der Vorgang ist abgeschlossen🎜🎜🎜🎜AJAX: AJAX-bezogene Daten🎜🎜ERROR: Ausnahmebezogene Daten auf der Seite🎜🎜LEISTUNG: Informationen zu leistungsbezogenen Daten 🎜🎜OPERATION: Benutzerbetriebsbezogene Daten🎜🎜🎜🎜EVENT_NAME: Spezifischer Ereignisname🎜🎜🎜🎜Gemäß oben Dimensionen können wir einfach die folgende Architektur entwerfen: 🎜🎜 data-width="800" data-height= "600"/>
🎜Fahren Sie entsprechend der Struktur des obigen Bildes mit der folgenden spezifischen Codeentwicklung fort🎜 blockquote>
Derzeit gibt es zwei Hauptanforderungsmethoden für Proxy-Anfragen in Browsern: eine ist XMLHttpRequest und die andere ist Fetch . 🎜
Überwachen Sie den PV, UV der Seite 🎜🎜Beim Aufrufen der Seite generieren wir über einen Algorithmus eine eindeutige Sitzungs-ID als globale ID für das Vergrabungsverhalten , Meldebenutzer-ID, Gerätefingerabdruck, Geräteinformationen. Wenn der Benutzer nicht angemeldet ist, wird UV über den Gerätefingerabdruck berechnet und PV wird über Sitzungs-ID berechnet. 🎜
Abfangen von Ausnahmen🎜🎜Ausnahmen sind ungewöhnliche Vorfälle, die den normalen Ablauf des Programms beeinträchtigen🎜
LAUFZEITFEHLER
🎜 In< In Code>JS können Laufzeitausnahmen über window.onerror und window.addEventListener('error', callback) erfasst werden >window wird verwendet.onerror, was eine bessere Kompatibilität bietet. 🎜
🎜Hier haben wir Skriptfehler herausgefiltert, der hauptsächlich durch in die Seite geladene domänenübergreifende Skripte von Drittanbietern verursacht wird Melden Sie Fehler, z. B. js-Skripte, die in CDNs von Drittanbietern gehostet werden. Diese Art von Problem ist schwieriger zu beheben. Die Lösung ist: 🎜🎜🎜Öffnen Sie CORS (Cross Origin Resource Sharing, domänenübergreifende Ressourcenfreigabe) wie folgt 🎜🎜<srcipt src="another domain/main.js" cossorigin ="anonymous"></script>🎜🎜Modify Access-Control-Allow-Origin: * | Specify domain name🎜🎜🎜🎜Use try Catch</. Code ><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">window.addEventListener(&#39;hashchange&#39;, event => { const { oldURL, newURL } = event; const oldURLObj = url.parseUrl(oldURL); const newURLObj = url.parseUrl(newURL); const from = oldURLObj.hash && url.parseHash(oldURLObj.hash); const to = newURLObj.hash && url.parseHash(newURLObj.hash); if(!from && !to ) return; // 记录埋点})复制代码</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div>🎜🎜<h4 data-id="heading-14">Promise Reject</h4>🎜<code>js kann bei einer asynchronen Ausnahme nicht von der Methode onerror erfasst werden Tritt auf, wenn das Objekt gleichzeitig abgelehnt und nicht verarbeitet wird
Es wird ein unhandledrejection-Fehler ausgegeben, der von der oben genannten Methode nicht abgefangen wird. Daher muss ein separates Behandlungsereignis hinzugefügt werden. 🎜
Das obige ist der detaillierte Inhalt vonEine vorläufige Erkundung des vergrabenen Punktesystems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn