Встраивание — это отслеживание поведения пользователя на уровне представления приложения, что очень важно для итерации продукта. Анализ данных о скрытых точках является требованием к продуктуисточник, чтобы убедиться, что функция работает должным образомсвидетельство. Внешний интерфейс ближе к пользователю, чем к серверу.Этот Сяобай объяснит здесь несколько вещей о плане статистики скрытых точек внешнего интерфейса.
Для сбора данных о закопанных точках можно провести следующий анализ (в качестве примера возьмем статистику Baidu):
будетСвойства пользователя,поведение пользователяПреобразование различных диаграмм визуализации:
Разные продукты обращают внимание на данные с разных сторон, которые можно собирать по запросу. Например, продукты информационных потоков уделяют больше внимания продолжительности пребывания (подсчет посещений страниц и времени отказов), торговые центры больше внимания уделяют «коэффициенту повторных покупок» (подсчет новых и старых пользователей), а реклама больше ориентирована на максимальную .
Статистика погребенных точек обычно делится на две категории:
-
статистика посещаемости страницы
-
Статистика кликов по функциям
статистика посещаемости страницы
Статистика посещаемости страниц обычно делится на две категории:
-
PV: количество посещений страницы
-
UV: количество посетителей страницы
Количество посещений страницы определяется не только привлекательностью ее содержания, к влияющим факторам относится входВнешний вид,Место расположения,глубинаи так далее (не учитывая здесь жестких потребностей). Внешний вид входа относится к сфере дизайна пользовательского интерфейса, расположение входа можно настроить, анализируя тепловую карту кликов пользователя, а глубину входа можно настроить, анализируя путь доступа пользователя.
пользовательские кликиТепловая картаВ форме:
Поместить запись основной страницы в красную область тепловой карты?
Зафиксировать загрузку страницыfrom,toЧтобы узнать путь доступа пользователя:
Анализ показывает, что пользователи, как правило,глубина доступа, на глубину и на страницуСкорость оттокаПодождите, настроить источник входа и глубину входа основной страницы в соответствии с результатами?
Просмотры страниц определяются не только дизайном продукта. Если PV стабилен в посещаемости страницырезко падать, вам нужно учитывать вероятность успешной загрузки (возможно, техническая ошибка).
Как реализовать глобальную статистику PV во внешнем интерфейсе, возьмем в качестве примера приложение Vue.
Вариант первый
Определив его глобально в файле ввода index.jsRouter.beforeEach:
import App from './app'
import Router from './router'
Router.beforeEach((to, from, next) => {
App.logEvent({
type: 'visit',
name: to.name,
time: new Date().valueOf(),
params: {
from: {
name: from.name,
path: from.path,
query: from.query
},
to: {
name: to.name,
path: to.path,
query: to.query
}
}
})
next()
})
Продолжительность пребывания может быть пройдена(время страницы перехода - время текущей страницы)Да, но как считать, когда приложение закрыто? Приложение мониторинга закрытьonbeforeunload + onunload?
вApp.logEventЭто метод в пользовательском приложении плагина Vue, который используется для запуска сервера.Запрос отчета о месте захоронения:
import Request from './utils/request'
const App = {
// ...
logEvent (opts) {
Request({
url: '/log/event',
method: 'POST',
data: {
type: opts.type,
name: opts.name,
time: opts.time,
params: opts.params || {}
}
})
}
}
App.install = (Vue, options) => {
Vue.prototype.$app = {
// ...
logEvent: App.logEvent
}
}
export default App
Вариант 2
Путем глобальной регистрации миксина в файле ввода index.jsbeforeRouteEnter,beforeRouteLeaveОбъект:
import Vue from 'vue'
Vue.mixin({
beforeRouteEnter (to, from, next) {
next(vm => {
vm.$app.logEvent({
type: 'visit',
name: to.name,
time: new Date().valueOf(),
params: {
from: {
name: from.name,
path: from.path,
query: from.query
},
to: {
name: to.name,
path: to.path,
query: to.query
}
}
})
})
},
beforeRouteLeave (to, from, next) {
this.$app.logEvent({
type: 'visit',
name: to.name,
time: new Date().valueOf(),
params: {
from: {
name: from.name,
path: from.path,
query: from.query
},
to: {
name: to.name,
path: to.path,
query: to.query
}
}
})
next()
}
})
При закрытии приложенияbeforeRouteLeaveЭто срабатывает?
Вышеприведенная схема имеет явные недостатки:
-
Официально используйте объекты глобального микширования с осторожностью! ! !
-
Для одноименной функции хука на страницеbeforeRouteEnter,beforeRouteLeave,какmerge? какnext?
-
Страницы с дочерними маршрутами будут звонить2второсортныйbeforeRouteEnter,beforeRouteLeave, PV невидимые двойники...
Я предполагаю, что на данный момент есть глобальный миксинcreated,destroyedи черезthis.$routeЧеловек, которому пришла в голову идея объекта посещения, попробовать?
Подавляющий результат, печать столько раз, сколькотаблица маршрутизацииДлина одинаковая~
вthis.$app.logEvent(vm.$app.logEvent)Эквивалентная программа одинApp.logEvent,Больше никогда.
Как правильно выбрать схему глобальной статистики PV?
-
СПА-приложение: только одна запись, определенная глобально в файле записейRouter.beforeEachУдобно и реализуемо.
-
МПА-приложение: Несколько записей, определенных в каждом файле записейRouter.beforeEach? Он может инкапсулировать общую логику (притворяться одной записью), чтобы избежать затрат на повторное создание записи.
-
Гибридное приложение SPA + MPA:emmmmmm... Статистическая схема с использованием приложения MPA.
-
приложение ССР: в погоне за лучшимSEOВместо этого используйте рендеринг на стороне сервера (SSR). отJinja (шаблон Python)Например, вызовTemplateViewЭто страница рендеринга (в отличие от проектов разделения внешнего и внутреннего интерфейса, сервер не может знать соответствующую связь между вызовами интерфейса и рендерингом страницы) и подсчитывает количество вызовов иTemplateNameЗнай страницу PV.
Что касается УФ, собирается при подсчете PVuserIdПросто уберите вес. Если в приложении нет системы управления пользователями, соберитеIP,deviceIdUV также могут быть приблизительно известны (неточны).
Статистика кликов по функциям
Нажатия разных функций разные, и нажатия разных областей одной и той же функции тоже разные:
Количество нажатий кнопок, влияющие факторы включают кнопкиВнешний вид,Место расположения,Входи так далее (не учитывая здесь жестких потребностей). Внешний вид кнопки относится к категории дизайна пользовательского интерфейса.Положение кнопки можно настроить, проанализировав тепловую карту кликов пользователя, а вход кнопки можно настроить, проанализировав распределение источника триггера.
Возьмите пример:
Студенты-операторы разрезают изображение на n областей и нажимают на каждую область, чтобы рекомендовать различные продукты. Щелкните координаты статистической области и настройте сортировку продуктов в соответствии с тепловой картой, чтобы получитьМаксимизируйте преимущества.
Как во внешнем интерфейсе реализована функция статистики кликов?
Я разделяю функциональные клики на две категории:
-
С запросом бизнес-интерфейса
-
Нет запроса бизнес-интерфейса
Вариант первый
Отчет о скрытых точках смешивается с запросом бизнес-интерфейса, а клик без запроса интерфейса принимает пользовательский отчет:
вparam keysУказывает параметры бизнес-запроса, которые необходимо сообщитьkey list(Не все параметры необходимо сообщать со скрытой точкой).
Приведенная выше схема сильно экономит количество запросов, но есть явные недостатки:
-
Смешивание отчетов о скрытых точках в бизнес-интерфейсе и отчетов о сбоях не только приведет к потере статистических данных, но и повлияет на основную функцию.
-
Статистика и бизнесвысокое сцепление, постарайтесь не смешивать их в одном и том же сервисе.
Вариант 2
Рассматривайте все события кликов как один и тот же класс и используйте унифицированный интерфейс отчетности:
logEvent (opts) {
Request({
url: '/log/event',
method: 'POST',
data: {
type: opts.type,
name: opts.name,
time: opts.time,
params: opts.params || {}
}
})
}
Приведенная выше схема имеет и явные недостатки:
-
Объем запросов удваивается: однако после разделения статистики и бизнес-сервисов запросы не обрабатываются одной и той же группой серверов.
-
Все функции события щелчка, о которых необходимо сообщить, должны быть вызваныlogEvent: инкапсулировать пакет со скрытой точкой для отчетакомпоненты, используя Vue в качестве примера.
<template>
<div class="vc-trace" @click="triggerClick">
<slot></slot>
</div>
</template>
<script>
import Request from './utils/request'
export default {
name: 'Trace',
props: {
type: {
type: String,
default: ''
},
name: {
type: String,
default: ''
},
from: {
type: String,
default: ''
},
params: {
type: Object,
default: () => ({})
}
},
methods: {
triggerClick () {
Request({
url: 'XXX/log/event',
method: 'POST',
data: {
type: this.type,
name: this.name,
from: this.from,
time: new Date().valueOf(),
params: this.params
}
})
}
}
}
</script>
В программе нет плюсов и минусов, важнее быть подходящей, что нужно рассматривать комплекснодизайн продукта,Использование продукта,использование услуги Т. Д. Например, приложения с низким уровнем использования могут совмещать статистику и бизнес в одном сервисе для экономии затрат, а приложения с высоким уровнем использования могут использоватьлокальный кеш,Пакетный отчетСнизить сервисное давление, но стоит ли увеличивать статистику в пакетной отчетностиошибка?
Эта статья — только верхушка айсберга, вы можете оставить сообщение для вашего ценного опыта~
19.12.2018 Продолжение
Видел несколько хороших статей:
Обсуждение проблемы потери статистических данных при переадресации страницы
Руководство по API жизненного цикла страницы
Автор: Глупое маленькое Мяу
мой задний сад:sunmengyuan.github.io/garden/
мой гитхаб:github.com/sunmengyuan
Оригинальная ссылка:Сунь Мэнъюань.GitHub.IO/garden/2018…