Решение для статистики данных одностраничного приложения Front-end SPA (ReactJS / VueJS)
1. Код статистики Baidu: возможны проблемы со статистическим методом UV PV
Статистика во фронтенд-проекте SPA часто хлопотная штука, то же самое верно и для React и Vue. Прежде чем мы найдем проблему, мы должны подумать о статистике Baidu.
统计原理
что это такое?
1-1: Статистический код Baidu
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?xxx";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
JS-файл статистики Baidu загружается через JSONP.Этот JS-файл относительно большой. Грубый взгляд на файл исходного кода hm.js, получение локального файла cookie, сеанса, URL-адреса, ua и т. д., а также некоторые методы обработки данных и некоторые методы загрузки данных.
那么在什么情况下,百度统计 会去触发上传的操作?
Давайте поэкспериментируем?
- 1. Это обязательно будет срабатывать при каждом обновлении страницы.
- 2. Вызовет ли это перенаправление на следующую новую страницу? (подлежит проверке)
- 3. Будет ли срабатывать маршрут возврата на старую страницу? (подлежит проверке)
Ниже: мы реализуем сцену для проверки, чтобы увидеть, сработает ли она.
1-2: Добавьте в проект реактивный маршрутизатор
const GetBaidu = props => {
let children = props.children;
let _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?xxx";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
return children;
};
const App = () => {
return (
<div>
<h2>测试百度统计代码</h2>
<h3>
<Link to={"/"}>Index</Link>
</h3>
<h3>
<Link to={"/home"}>Home</Link>
</h3>
<h3>
<Link to={"/my"}>my</Link>
</h3>
<Switch>
<GetBaidu>
<Route exact path="/" component={Index} />
<Route exact path="/home" component={Home} />
<Route exact path="/my" component={My} />
</GetBaidu>
</Switch>
</div>
);
};
Это похоже на перехватчик, и код статистики Baidu снова перемещается перед скачком маршрутизации.
Точно так же проект Vue-router похож.
1-3: Добавьте Vue-маршрутизатор в проект
router.afterEach( ( to, from, next ) => {
setTimeout(()=>{
var _hmt = _hmt || [];
(function() {
//每次执行前,先移除上次插入的代码
document.getElementById('baidu_tj')&&document.getElementById('baidu_tj').remove();
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?xxxx";
hm.id = "baidu_tj"
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
},0);
} );
Вот просто простой и грубый демонстрационный дисплей Протестирование таких данных и статистические задачи необходимо решать во многих проектах.
Резюме: методы React и Vue аналогичны, и операция перехвата выполняется перед переходом маршрута. Добавьте методы и статистические коды, которые необходимо добавить на страницу.
Здесь представлена статья о статистике данных одностраничных приложений, приглашаем обсудить ее вместе~
Адрес GitHub: (добро пожаловать в звезду, добро пожаловать, чтобы порекомендовать:)
Решение для статистики данных одностраничного приложения Front-end SPA (ReactJS / VueJS)