프런트엔드 포인트를 어떻게 묻어야 하나요? 다음 글에서는 Vue맞춤 지침을 통해 프런트엔드 임베딩을 구현하는 방법을 소개하겠습니다. 모든 분들께 도움이 되길 바랍니다!
(학습 영상 공유: vue 영상 튜토리얼)
마케팅 활동에서는 포인트를 매립하여 사용자의 선호도와 상호작용 습관을 파악하여 프로세스를 최적화하고 사용자 경험을 더욱 향상시키며 전환율을 높일 수 있습니다.
기존 히든 포인트 방식 구현에서는 특정 버튼이나 그림을 클릭하거나 노출 시 이벤트를 통해 히든 포인트가 적극적으로 신고되었습니다. 프로젝트에 매몰점이 상대적으로 적은 경우에는 이 방법이 괜찮지만, 프로젝트에 매몰점이 많이 필요하게 되면 비즈니스 코드를 많이 추가할 수밖에 없습니다. 이는 또한 숨겨진 논리와 비즈니스 논리 사이의 높은 결합을 크게 야기했습니다.
이러한 상황을 개선하기 위해 기존의 포인트 매립 방식을 약간 개선하여 포인트 매립 효율성을 크게 향상시켰습니다.
매장점 변환에 대해 자세히 설명하기 전에 매몰점에 대한 상식을 간략하게 이해하는 것이 필요합니다.
숨겨진 포인트 신고방법은 무엇인가요?
숨겨진 포인트의 종류도 다양하고 신고방법도 다양하다는 점 꼭 알아두세요. 프런트엔드에 포인트를 매장하는 일반적인 방법은 세 가지가 있습니다.
- Manual burying
- Visual burying
- Invisible burying
Manual burying은 이름에서 알 수 있듯이 코드를 순전히 수동으로 작성하고, 제공되는 기능을 호출하는 것을 의미합니다. SDK를 매립하고, 필요 시 매몰지 비즈니스 로직에 해당 메소드를 추가하여 매장지 데이터를 보고합니다. 이는 기존에 사용되었던 방법이기도 합니다.
시각적 매립점은 시각적 시스템을 통해 매립점을 구성하는 것을 말합니다. 이 방법에 노출되는 사람이 많지 않으므로 자세히 설명하지 않겠습니다.
흔적 없는 매설, 자동매설, 완전매설이라고도 합니다. 즉, 모든 전역 이벤트와 페이지 로딩 주기를 가로채서 묻어버립니다.
보통 어떤 종류의 데이터가 묻혀있나요?
데이터 분석을 달성하고 후속 운영 및 제품 전략 조정을 촉진하려면 일반적으로 다음 사항에 대한 통계를 작성해야 합니다.
- 페이지 포인트: 페이지에 들어오거나 나가는 사용자의 정보를 계산합니다. 페이지 조회수(pv), 페이지를 탐색한 사람 수(uv), 페이지에 머문 시간, 기기 정보 등
- 클릭 포인트: 페이지 탐색 중에 사용자가 트리거한 클릭 이벤트(예: 버튼, 탐색 또는 사진 클릭 횟수
- 노출 지점 : 특정 요소가 효과적으로 노출되는지에 대한 통계
요구 사항 분석
이 기사는 최근 프로젝트에 묻힌 지점을 추가해야 할 필요성을 기반으로 합니다. 필요한 것은:
- 매장된 포인트는 비즈니스와 최대한 분리되어야 하며, 포인트 로직은 비즈니스와 독립적이어야 합니다.
- 침입하지 마세요. 비즈니스 코드에
- 사양에 동의하고 통합 클로징 포트를 통해 숨겨진 포인트 로직을 처리합니다
프로젝트가 Vue
에서 개발되었으므로 이를 사용하는 지침을 사용자 정의하여 숨겨진 포인트 보고를 완료하세요. 맞춤 지시사항을 선택하는 이유도 비즈니스와 숨은 포인트를 어느 정도 분리할 수 있기 때문이다. Vue
开发的,所以考虑使用自定义指令的方式来完成埋点上报。选择自定义指令的原因也是因为他能一定程度上能让业务和埋点解耦。
页面埋点在框架层面已经帮我们做掉了,这里主要关心的是点击埋点和曝光埋点。
实现思路其实也很清晰:在需要埋点的DOM
节点挂载特殊属性,通过埋点SDK
监听挂载了相应属性对应的事件,在事件触发时进行埋点数据上报。
那么问题来了,怎么监听呢?
对于点击事件,我们可以采用addEventListener
来监听click
事件。这很简单。
对于元素的曝光就稍微有点麻烦了。
首先我们来看一下为什么需要监测曝光:
为了衡量用户对产品的兴趣程度,需要计算区域的点击率(点击次数/曝光次数)。为了保证点击率的准确性,我们必须保证用户真正的浏览到了这些产品(就比如上图中最下方的机酒产品区域,由于需要滚动页面,用户才有可能看到这一区域)。
那么怎么判断元素出现在页面的可视区域呢?
按照以往的做法:监听滚动事件,通过getBoundingClientRect()
方法计算监测区域与视窗的位置,然后判断元素是否出现在页面的可视区域内。但是由于scroll
事件的频繁触发,性能问题很大。
基于此,浏览器特意为我们打造了一个Intersection Observer
구현 아이디어는 실제로 매우 명확합니다. 매립이 필요한
DOM
노드에 특수 속성을 마운트하고, 매립 지점 SDK. 이벤트가 발생하면 숨겨진 데이터를 보고합니다.
그럼 질문은 어떻게 모니터링할 것인가 입니다.
🎜클릭 이벤트의 경우addEventListener
를 사용하여 click
이벤트를 수신할 수 있습니다. 매우 간단합니다. 🎜🎜요소를 노출하는 것이 조금 번거롭습니다. 🎜🎜먼저 노출을 모니터링해야 하는 이유를 살펴보겠습니다. 🎜🎜getBoundingClientRect()
메서드를 통해 모니터링 영역과 창의 위치를 계산한 다음 요소가 보이는 영역에 나타나는지 확인합니다. 페이지. 그러나 스크롤
이벤트가 자주 발생하기 때문에 성능 문제가 큽니다. 🎜🎜이를 바탕으로 브라우저는 성능과 관련된 모든 세부 사항을 처리하고 개발자가 비즈니스 로직에만 관심을 가질 수 있도록 하는 Intersection Observer
API를 특별히 만들었습니다. 🎜🎜🎜🎜🎜사용자의 불확실성 페이지 탐색 시에도 반복적인 노출 행위를 피해야 합니다. 노출된 후에는 관찰을 위해 제거하세요. 🎜코드 구현
위의 요구 사항 분석은 여전히 상대적으로 추상적입니다. 코드를 기반으로 한 최종 구현을 살펴보겠습니다.
클릭 클래스 캡슐화
클릭 이벤트 처리는 비교적 간단합니다. 클릭할 때마다 데이터 보고가 트리거됩니다.
// src/directives/track/click.js import { sendUBT } from "../../utils/ctrip" export default class Click { add(entry) { // console.log("entry", entry); const traceVal = entry.el.attributes["track-params"].value const traceKey = entry.el.attributes["trace-key"].value const { clickAction, detail } = JSON.parse(traceVal) const data = { action: clickAction, detail, } entry.el.addEventListener("click", function() { console.log("上报点击埋点", JSON.parse(traceVal)) console.log("埋点key", traceKey) sendUBT(traceKey, data) }) } }
노출 클래스 캡슐화
노출은 비교적 복잡합니다.
먼저 new IntersectionObserver()
를 통해 전역 _observer
를 인스턴스화합니다. 효과적인 노출을 얻으면(여기서는 요소의 절반 이상이 나타날 때 요소가 노출됩니다) 그런 다음 DOM 노드 trace-key
(매장된 키) 및 track-params
(매장된 값)를 가져옵니다. new IntersectionObserver()
实例化一个全局_observer
,如果得到有效曝光的(这里当元素出现一半以上则进行曝光),就去获取 DOM 节点上的trace-key
(埋点 key)和track-params
(埋点 value)。
// src/directives/track/exposure.js import "intersection-observer" import { sendUBT } from "../../utils/ctrip" // 节流时间调整,默认100ms IntersectionObserver.prototype["THROTTLE_TIMEOUT"] = 300 export default class Exposure { constructor() { this._observer = null this.init() } init() { const self = this // 实例化监听 this._observer = new IntersectionObserver( function(entries, observer) { entries.forEach((entry) => { // 出现在视窗内 if (entry.isIntersecting) { // 获取参数 // console.log("埋点节点", entry.target.attributes); const traceKey = entry.target.attributes["trace-key"].value const traceVal = entry.target.attributes["track-params"].value console.log("traceKey", traceKey) console.log("traceVal", traceVal) const { exposureAction, detail } = JSON.parse(traceVal) const data = { action: exposureAction, detail, } // 曝光之后取消观察 self._observer.unobserve(entry.target) self.track(traceKey, data) } }) }, { root: null, rootMargin: "0px", threshold: 0.5, // 元素出现面积,0 - 1,这里当元素出现一半以上则进行曝光 } ) } /** * 元素添加监听 * * @param {*} entry * @memberof Exposure */ add(entry) { this._observer && this._observer.observe(entry.el) } /** * 埋点上报 * * @memberof Exposure */ track(traceKey, traceVal) { // console.log("曝光埋点", traceKey, JSON.parse(traceVal)); sendUBT(traceKey, traceVal) } }
指令封装
有了点击和曝光类,下一步就是 Vue 指令的封装了,也是之所以能实现半自动埋点的核心。
这里存在一个场景就是对于同一个按钮或者图片,同时存在既需要点击埋点又需要曝光埋点的场景。所以在指令的设计时支持了单独传入和同时传入的场景:
v-track:click|exposure
v-track:exposure
// src/directives/track/index.js import Vue from "vue" import Click from "./click" import Exposure from "./exposure" // 实例化曝光和点击 const exp = new Exposure() const cli = new Click() Vue.directive("track", { bind(el, binding) { // 获取指令参数 const { arg } = binding arg.split("|").forEach((item) => { // 点击 if (item === "click") { cli.add({ el }) } else if (item === "exposure") { exp.add({ el }) } }) }, })
同时需要在src/index.js
引入即可:
import "./directives/track"
使用
在需要埋点的地方使用也是很简单的:
<img ref="imageDom" trace-key="o_img" v-track:click|exposure :track-params=" JSON.stringify({ exposureAction: 's_pictures', clickAction: 'c_pictures', detail: { value: '测试', }, }) " />
不足
通过Vue
自定义指令的一个简单封装,业务代码和埋点代码就达到了一定的解耦,相较之前,无论是埋点的开发成本还是维护成本都降低了很多。
但是这也只是一个最简单的实现,还有很多情况需要考虑:
- 曝光时频次很高,是否可以考虑批量上报?
- 用户访问一半页面,突然切出,之后又重新进入,这种情况埋点又该如何上报?
- 用户设备不支持
Intersection Observer
rrreee 명령 캡슐화
-
v-track:click|exposure
rrreee🎜는v-track: Exposure
src/index.js
에도 도입되어야 합니다. 🎜rrreee🎜필요할 때 🎜🎜🎜를 사용하세요. 묻어두세요 포인트를 사용하는 것도 매우 간단합니다: 🎜rrreee
🎜Insufficient🎜🎜🎜
Vue
의 사용자 정의 지침, 비즈니스 코드를 간단하게 캡슐화함으로써 및 매장지점 코드는 어느 정도의 디커플링을 달성했습니다. 이전에 비해 매장지점의 개발 비용과 유지 비용이 많이 절감되었습니다. 🎜🎜하지만 이는 가장 간단한 구현일 뿐이며 고려해야 할 상황이 많습니다. 🎜- 노출 빈도가 매우 높은데 일괄 보고를 고려할 수 있나요? 🎜
- 사용자가 페이지의 절반을 방문했다가 갑자기 끊겼다가 다시 들어가는 경우 이 상황을 어떻게 신고해야 하나요? 🎜
- 사용자 기기가
Intersection Observer
API를 지원하지 않는 경우 이전 버전과의 호환성을 고려해야 합니까? 🎜🎜🎜본 매장 계획은 아직 개선 중인 점을 감안하여 향후 개선과 원활한 사업 운영을 기다리겠습니다. 자세한 내용을 여러분과 공유하겠습니다. 🎜🎜【추천 관련 동영상 튜토리얼: 🎜vuejs 입문 튜토리얼🎜, 🎜웹 프론트엔드 시작하기🎜】🎜
위 내용은 프런트 엔드를 묻는 방법은 무엇입니까? Vue 사용자 정의 명령어를 사용하여 프런트엔드 포인트를 묻어두는 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

NetflixusesAcustomFrameworkCalled "Gibbon"BuiltonReact, NotreactorVuedirectly.1) TeamExperience : 2) ProjectComplexity : vueforsimplerProjects, 3) CustomizationNeeds : reactoffersmoreflex.4)

Netflix는 주로 프레임 워크 선택의 성능, 확장 성, 개발 효율성, 생태계, 기술 부채 및 유지 보수 비용을 고려합니다. 1. 성능 및 확장 성 : Java 및 SpringBoot는 대규모 데이터 및 높은 동시 요청을 효율적으로 처리하기 위해 선택됩니다. 2. 개발 효율성 및 생태계 : React를 사용하여 프론트 엔드 개발 효율성을 향상시키고 풍부한 생태계를 활용하십시오. 3. 기술 부채 및 유지 보수 비용 : Node.js를 선택하여 유지 보수 비용과 기술 부채를 줄이기 위해 마이크로 서비스를 구축하십시오.

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
