informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Nama ilmiahnya adalah Pelacakan Peristiwa, yang terutama berfokus pada penangkapan, pemrosesan, dan pengiriman teknologi terkait dan proses implementasi untuk perilaku pengguna atau proses bisnis.
Mengubur suatu titik adalah istilah profesional di bidang data, dan juga merupakan nama umum di bidang Internet.
Poin terkubur adalah dasar untuk analisis data produk dan umumnya digunakan untuk umpan balik dari sistem rekomendasi, pemantauan dan analisis perilaku pengguna, analisis statistik fungsi baru atau efek aktivitas operasional, dll.
Poin penyematan mencakup dua konsep penting: peristiwa (event) dan atribut (param)
Penguburan tanpa jejak (penguburan penuh) menggunakan metode pemantauan bawaan browser atau APP untuk memantau halaman penelusuran pengguna, klik, dan perilaku lainnya
kekurangan:
Poin mengubur kode, pengembang front-end menyesuaikan pemantauan dan pengumpulan dalam kode
kekurangan:
SDK titik terkubur, SDK memperlihatkan antarmuka untuk melaporkan titik terkubur, dan pengembang tidak mengetahui proses pemantauan dan pengumpulan, seperti teh perusahaan
Kekurangan: TIDAK
keuntungan:
Biasanya front-end menghitung poin yang terkubur menurut dimensi halaman. Atribut peristiwa yang umum adalah sebagai berikut:
Atribut | menggambarkan |
---|---|
cairan | Id pengguna, jika pengguna tidak masuk, mengembalikan id identifikasi tertentu |
alamat urlnya | URL halaman pemicu peristiwa saat ini |
waktuacara | Stempel waktu yang memicu titik tersembunyi |
waktu lokal | Waktu lokal pengguna yang memicu titik tersembunyi dinyatakan dalam format standar YYYY=MM-DD HH:mm:ss, yang berguna untuk kueri string langsung nanti. |
tipe perangkat | Jenis perangkat yang saat ini digunakan oleh pengguna, seperti apple, Samsung, chrome |
idperangkat | Id perangkat yang digunakan oleh pengguna saat ini |
Tipe os | Tipe sistem masuk windows, macos, ios, android |
Versi os | versi sistem |
versi aplikasi | Versi aplikasi |
idAplikasi | ID aplikasi saat ini |
tambahan | Data khusus, biasanya string berseri, dan struktur data harus tetap stabil |
peristiwa | Waktu pelaporan | menggambarkan |
---|---|---|
Halaman tetap | Ketika halaman saat ini dialihkan atau halaman dibongkar | Catat waktu penelusuran halaman sebelumnya |
pv | Saat memasuki halaman | Jumlah kunjungan halaman, uv hanya perlu difilter berdasarkan deviceId |
peristiwa interaksi | Saat peristiwa interaksi pengguna dipicu | Seperti klik, tekan lama, dll. |
peristiwa yang logis | Ketika kondisi logis terpenuhi | Seperti login, lompat halaman, dll. |
Saat ini, sebagian besar data indikator kinerja berasal dari window. Performance API.
nama parameter | menggambarkan |
---|---|
hubungkanAkhir | HTTP (TCP) Mengembalikan stempel waktu saat koneksi antara browser dan server dibuat. Jika koneksi persisten dibuat, nilai yang dikembalikan sama dengan nilai atribut FetchStart. Pembuatan koneksi mengacu pada selesainya semua proses jabat tangan dan otentikasi. |
hubungkanMulai | Stempel waktu HTTP (TCP) di akhir kueri nama domain. Jika koneksi persisten digunakan, atau informasi disimpan dalam cache atau sumber daya lokal, nilai ini akan konsisten dengan FetchStart. |
domLengkap | Penguraian dokumen saat ini selesai, yaitu stempel waktu ketika Document.readyState menjadi 'selesai' dan perubahan readystate terkait dipicu. |
domKontenAcara yang DimuatAkhir | Stempel waktu ketika semua skrip yang perlu segera dieksekusi telah dijalankan (terlepas dari urutan eksekusi). |
domContentLoadedEventMulai | Ketika parser mengirimkan acara DOMContentLoaded, stempel waktu ketika semua skrip yang perlu dieksekusi telah diurai. |
domInteraktif | Stempel waktu ketika struktur DOM halaman web saat ini mengakhiri penguraian dan mulai memuat sumber daya yang disematkan (yaitu, ketika properti Document.readyState berubah menjadi "interaktif" dan peristiwa readystatechange terkait dipicu). |
domMemuat | Stempel waktu ketika struktur DOM halaman web saat ini mulai diuraikan (yaitu, ketika properti Document.readyState berubah menjadi "memuat" dan peristiwa readystatechange terkait dipicu). |
domainLookupEnd | Waktu penyelesaian kueri nama domain DNS.Sama dengan nilai FetchStart jika cache lokal (yaitu tidak ada kueri DNS) atau koneksi persisten digunakan |
domainLookupMulai | Stempel waktu DNS UNIX saat kueri nama domain dimulai. Jika koneksi persisten digunakan, atau informasi disimpan dalam cache atau sumber daya lokal, nilai ini akan konsisten dengan FetchStart. |
ambilMulai | Browser siap mengambil stempel waktu dokumen menggunakan permintaan HTTP. Saat ini adalah sebelum cache aplikasi apa pun diperiksa. |
muatAcaraAkhir | Saat peristiwa pemuatan berakhir, yaitu stempel waktu saat peristiwa pemuatan selesai. Jika event ini belum terkirim, atau belum selesai, nilainya akan menjadi 0. |
memuatAcaraMulai | Stempel waktu saat acara pemuatan dikirim. Jika event ini belum terkirim, nilainya akan menjadi 0. |
navigasiMulai | Stempel waktu saat pembongkaran halaman sebelumnya di browser yang sama berakhir. Jika tidak ada halaman sebelumnya, nilai ini akan sama dengan FetchStart. |
pengalihanAkhir | Stempel waktu saat pengalihan HTTP terakhir selesai (yaitu, saat bit terakhir respons HTTP diterima secara langsung). Jika tidak ada pengalihan, atau pengalihan berasal dari asal yang berbeda, nilai ini akan menghasilkan 0. |
pengalihanMulai | Stempel waktu saat pengalihan HTTP pertama dimulai. Jika tidak ada pengalihan, atau pengalihan berasal dari asal yang berbeda, nilai ini akan menghasilkan 0. |
permintaanMulai | Mengembalikan stempel waktu ketika browser membuat permintaan HTTP ke server (atau mulai membaca cache lokal). |
tanggapanAkhir | Mengembalikan stempel waktu saat browser menerima (atau membaca dari cache lokal, atau membaca dari sumber daya lokal) byte terakhir dari server (atau saat koneksi HTTP ditutup jika sudah ditutup sebelumnya). |
responMulai | Mengembalikan stempel waktu saat browser menerima byte pertama dari server (atau membaca dari cache lokal).Jika lapisan transport gagal setelah permintaan awal dan koneksi dibuka kembali, atribut ini akan dihitung sebagai waktu inisiasi yang sesuai dari permintaan baru. |
KoneksiAmanMulai | HTTPS mengembalikan stempel waktu saat browser dan server memulai jabat tangan untuk koneksi aman. Jika halaman web saat ini tidak memerlukan koneksi aman, kembalikan 0. |
bongkarAcaraAkhir | Sesuai dengan unloadEventStart, stempel waktu saat pemrosesan acara unload selesai. Jika tidak ada halaman sebelumnya, nilai ini akan menghasilkan 0. |
bongkarAcaraMulai | Stempel waktu saat acara pembongkaran halaman sebelumnya dilempar. Jika tidak ada halaman sebelumnya, nilai ini akan menghasilkan 0. |
Nama indikator | menggambarkan |
---|---|
Bahasa Inggris | Waktu pengambilan halaman pertama |
FCP | Waktu saat konten digambar pada halaman untuk pertama kalinya |
FMP | Waktu penarikan efektif pertama pada halaman FMP>=FCP |
TTI | Halaman sepenuhnya waktu interaktif |
Informasi Umum | Selama fase pemuatan halaman, waktu tunda interaksi pertama pengguna |
MPFID | Selama tahap pemuatan halaman, waktu tunda maksimum yang mungkin ditemui oleh interaksi pengguna |
MEMUAT | Waktu saat halaman dimuat penuh (waktu terjadinya peristiwa pemuatan) |
Indikator FP (First Paint) biasanya mencerminkan waktu layar putih suatu halaman. Waktu layar putih akan mencerminkan situasi saat ini. Semakin pendek waktu tunggu pengguna untuk konten, semakin baik kinerja pemuatan jaringan halaman Web sangat bagus, layar putih Semakin pendek waktunya, semakin rendah kemungkinan churn pengguna.
Indikator ini dapat memperoleh informasi titik yang disediakan oleh PerformancePaintTming API melalui metode dalm.getEntriesByType('paint') Temukan objek dengan nama first-paint, dan deskripsinya adalah data indikator FP:
FCP (First Contentful Paint) adalah titik waktu ketika konten dirender untuk pertama kalinya. Dalam indikator statistik kinerja, waktu sejak pengguna mulai mengakses halaman web ke FCP dapat dianggap sebagai waktu tanpa konten , FCP >= FP
Indikator dapat memperoleh informasi titik yang disediakan oleh PerformancePaintTiming API melalui metode performance.getEntriesByType('paint') Temukan objek dengan nama first-contentful-paint, yang menjelaskan data indikator FCP, seperti yang ditunjukkan pada gambar berikut:
FMP (First Meaningful Paint) adalah waktu ketika konten bermakna digambar untuk pertama kalinya. Ketika tata letak dan konten teks seluruh halaman dirender secara lengkap, lukisan bermakna pertama dari konten bermakna dapat dianggap selesai.Oleh karena itu, FMP mengukur waktu yang dibutuhkan pengguna untuk melihat konten utama halaman web, dan merupakan indikator pengukuran penting dari perspektif pengalaman pengguna.
Metode penghitungan FMP yang kini dikenal oleh industri front-end adalah "waktu gambar setelah perubahan tata letak halaman maksimum selama pemuatan dan rendering". Anda dapat menggunakan MutationObserver untuk memantau setiap perubahan DOM keseluruhan halaman, memicu callback MutationObserver, dan menghitung skor perubahan pohon DOM saat ini selama callback. Momen ketika skor paling banyak berubah adalah titik waktu FMP.
TTI (Time To Interactive), yaitu waktu yang dibutuhkan dari awal pemuatan halaman hingga halaman berada dalam keadaan interaktif penuh. Saat halaman berada dalam keadaan interaktif penuh, tiga kondisi berikut terpenuhi:
Halaman tersebut sudah menampilkan konten yang bermanfaat.
Fungsi respons peristiwa yang terkait dengan elemen yang terlihat di halaman telah didaftarkan.
Fungsi respons peristiwa dapat mulai dijalankan dalam waktu 50 md setelah peristiwa terjadi.
window.kinerja.getEntriesByType('resource') akan mengembalikan berbagai indikator kinerja semua sumber daya (js, css, img...) yang dimuat pada halaman saat ini, yang dapat digunakan untuk pengumpulan data kinerja sumber daya statis.
Tipe utamanya adalah: skrip, tautan, img, css, xmlhttprequest, beacon, ambil, lainnya.
PerformanceResourceTiming - API Web | MDN
Nama indikator | menggambarkan | Perhitungan |
---|---|---|
permintaan DNS | Fase DNS membutuhkan waktu | domainLookupEnd - domainLookupStart |
koneksi TCP | Waktu fase TCP | connectEnd - connectStart |
Pembentukan koneksi SSL | Waktu koneksi SSL | connectEnd - mulai koneksi aman |
Permintaan jaringan byte pertama | Waktu respons byte pertama (ttfb) | responsMulai - permintaanMulai |
Ada tiga macam
// 在捕获阶段,捕获资源加载失败错误
Element.addEventListener('error', e => {
const target = e.target
if (target != window) {
monitor.errors.push({
type: target.localName,
url: target.src || target.href,
msg: (target.src || target.href) + ' is load error',
time: Date.now()
})
}
})
// 监听 js 错误
window.onerror = function(msg, url, row, col, error) {
monitor.errors.push({
type: 'javascript',
row: row,
col: col,
msg: error && error.stack? error.stack : msg,
url: url,
time: Date.now()
})
}
// 监听 promise 错误 缺点是获取不到行数数据
addEventListener('unhandledrejection', e => {
monitor.errors.push({
type: 'promise',
msg: (e.reason && e.reason.msg) || e.reason || '',
time: Date.now()
})
})
Dalam skenario ini, ada dua masalah yang perlu dipertimbangkan:
Jika antarmuka pelaporan data dan sistem bisnis menggunakan nama domain yang sama, browser memiliki batasan jumlah permintaan secara bersamaan, sehingga ada kemungkinan persaingan untuk sumber daya jaringan.
Browser biasanya mengabaikan permintaan ajax asinkron saat halaman dibongkar. Jika permintaan data diperlukan, permintaan ajax sinkron biasanya dibuat di acara unload atau beforeunload untuk menunda pembongkaran halaman. Dari sudut pandang pengguna, lompatan halaman melambat.
keuntungan:
Mengirimkan data dengan andal saat halaman dibongkar, tanpa memblokir halaman agar tidak ditutup.
Mendukung pengiriman data di latar belakang.
kekurangan:
Hanya permintaan POST yang dapat dikirim, dan hasil respons tidak dapat diperoleh.
Selain Internet Explorer, browser modern arus utama saat ini memiliki tingkat dukungan yang sangat tinggi untuk beacon. Beacon - Dokumentasi MDN
Antarmuka Beacon digunakan untuk menjadwalkan permintaan non-pemblokiran asinkron ke server Web.
Dalam istilah awam, Beacon dapat mengirim data secara asinkron ke server, dan dapat memastikan bahwa permintaan dikirim sebelum pembongkaran halaman selesai (memecahkan masalah bahwa pembongkaran halaman ajax akan menghentikan permintaan). Bagaimana cara menggunakannya:
navigator.sendBeacon(url, data);
Parameter data bersifat opsional, dan tipenya dapat berupa ArrayBufferView, Blob, DOMString, atau FormData. Jika browser berhasil menambahkan permintaan suar ke antrian yang akan dikirim, metode ini akan mengembalikan nilai true, jika tidak maka akan mengembalikan false
Saat menggunakan Beacon, backend perlu menggunakan metode post untuk menerima parameter. Mengingat masalah lintas domain, backend juga perlu memodifikasi antarmuka dan mengkonfigurasi CORS. Pada saat yang sama, header permintaan harus memenuhi header permintaan yang masuk dalam daftar aman CORS, yang tipe kontennya harus berupa application/x-www-form-urlencoded, multipart/form-data, atau text/plain.
type ContentType = 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
const serilizeParams = (params: object) => {
return window.btoa(JSON.stringify(params))
}
function sendBeacon(url: string, params: object) {
const formData = new FormData()
formData.append('params', serilizeParams(params))
navigator.sendBeacon(url, formData)
}
keuntungan:
Mudah digunakan, memiliki kompatibilitas yang baik, dan dapat dilaporkan ke seluruh domain.
Tidak akan memblokir pemuatan dan penutupan halaman.
kekurangan:
Hanya permintaan GET yang dapat dikirim, dan hasil respons tidak dapat diperoleh.
Operasi asinkron tidak didukung.
Masalah kompatibilitas sendBeacon tidak dapat dihindari, namun Anda dapat memanfaatkan sepenuhnya fitur yang sebagian besar browser akan menyelesaikan pemuatan gambar sebelum halaman dibongkar, dan melaporkan data dengan menambahkan img ke halaman.
function sendImage(url: string, params: object) {
const img = new Image()
img.style.display = 'none'
const removeImage = function() {
img.parentNode.removeChild(img)
}
img.onload = removeImage
img.onerror = removeImage
img.src = `${url}?params=${serilizeParams(params)}`
document.body.appendChild(img)
}
Karena gambar img adalah permintaan get, server yang berbeda memiliki batasan panjang uri. Jika panjangnya melebihi batas, kesalahan HTTP 414 akan terjadi. Oleh karena itu, Anda juga harus memperhatikan frekuensi pelaporan untuk mengurangi terlalu banyak atribut diunggah sekaligus.
Metode sendBeacon lebih disukai, dan metode Image digunakan sebagai cadangan.
function sendLog(url: string, params: object) {
if(navigator.sendBeacon) {
sendBeacon(url, params)
} else {
sendImage(url, params)
}
}
Faktanya, banyak orang menggunakan GIF untuk mengubur maksudnya?
Pelaporan data ke server dapat dilakukan melalui permintaan antarmuka, permintaan file biasa, atau permintaan sumber daya gambar. Selama data dapat dilaporkan, apakah itu meminta file GIF, meminta file js, atau memanggil antarmuka halaman, server sebenarnya tidak peduli dengan metode pelaporan tertentu. Jadi mengapa semua sistem secara seragam menggunakan metode meminta gambar GIF untuk melaporkan data?
●Mencegah lintas domain
Secara umum, nama domain bertitik bukanlah nama domain saat ini, sehingga semua permintaan antarmuka akan merupakan permintaan lintas domain. Permintaan lintas domain dapat dengan mudah disadap oleh browser karena kesalahan konfigurasi dan pelaporan yang tidak tepat, dan hal ini tidak dapat diterima. Namun, atribut src pada gambar tidak melintasi domain, dan permintaan juga dapat dimulai. (Kecualikan pelaporan antarmuka)
●Mencegah pemblokiran pemuatan halaman dan memengaruhi pengalaman pengguna
Biasanya, setelah membuat node sumber daya, browser tidak akan benar-benar mengirimkan permintaan sumber daya sampai objek tersebut dimasukkan ke dalam pohon DOM browser. Mengoperasikan DOM berulang kali tidak hanya akan menyebabkan masalah kinerja, tetapi memuat sumber daya js/css juga akan memblokir rendering halaman dan memengaruhi pengalaman pengguna.
Pengecualian adalah permintaan gambar. Tidak hanya tidak perlu dimasukkan ke dalam DOM saat membuat gambar, tetapi juga dapat memulai permintaan selama objek Gambar baru dibuat di js, dan tidak ada masalah pemblokiran di lingkungan browser tanpa js juga dikelola secara normal melalui tag img, yang merupakan jenis permintaan sumber daya lainnya. (Kecualikan metode file)
●Dibandingkan dengan PNG/JPG, GIF memiliki ukuran paling kecil
File BMP terkecil membutuhkan 74 byte, PNG membutuhkan 67 byte, dan GIF legal hanya membutuhkan 43 byte.
Untuk respons yang sama, GIF dapat menghemat 41% lalu lintas dibandingkan BMP dan 35% lalu lintas dibandingkan PNG.
Dan kebanyakan dari mereka menggunakan GIF transparan 1*1 piksel untuk melaporkan.
1x1 piksel adalah gambar legal terkecil. Selain itu, karena dilakukan melalui gambar, maka sebaiknya gambar dibuat transparan, sehingga tidak mempengaruhi efek tampilan halaman itu sendiri, untuk menunjukkan bahwa gambar tersebut transparan, Anda hanya perlu menggunakan bit biner untuk menandai gambar sebagai warna transparan, dan tidak perlu menyimpan data ruang warna, yang dapat menghemat volume.
keuntungan:
Permintaan asinkron dapat dikirim dan beberapa metode HTTP seperti GET dan POST didukung.
Hasil respon dapat diperoleh dan diproses lebih lanjut.
kekurangan:
Logika permintaan dan respons perlu ditangani secara manual.
Perlu menangani masalah permintaan lintas domain (seperti menyiapkan CORS).
Gunakan XMLHttpRequest atau Fetch API untuk mengirim permintaan asinkron untuk melaporkan data. Anda dapat memilih untuk menggunakan metode GET atau POST dan mengirim data sebagai isi permintaan atau parameter URL.
keuntungan:
Performa real-time yang baik dan mendukung komunikasi dua arah.
Cocok untuk pemantauan waktu nyata dan pelaporan data skala besar.
kekurangan:
Server harus mendukung protokol WebSocket.
Lebih kompleks dan tidak cocok untuk persyaratan titik terkubur yang sederhana.
Alat penguburan data front-end yang umum mencakup Google Analytics, Statistik Baidu, Statistik Umeng, dll. Tentu saja, Anda juga dapat menggunakan antarmuka atau platform internal perusahaan untuk pelaporan.
Ambil Google Analytics sebagai contoh:
Google Analytics adalah alat analisis situs web yang dikembangkan oleh Google untuk melacak dan melaporkan lalu lintas situs web. Ini membantu pemilik situs web memahami perilaku pengunjungnya, termasuk siapa mereka, dari mana asal mereka, apa yang mereka lakukan di situs, dan banyak lagi. Melalui Google Analytics, pemilik website dapat lebih memahami audiensnya, mengoptimalkan konten situs web dan strategi pemasaran, sehingga meningkatkan kinerja situs web dan pengalaman pengguna. Google Analytics menyediakan banyak fungsi analisis data, termasuk data waktu nyata, analisis perilaku pengguna, pelacakan konversi, analisis sumber lalu lintas, dan banyak lagi. Ini adalah alat ampuh yang banyak digunakan di berbagai situs web dan kampanye pemasaran online.
Karena kita menggunakan Google Analytics, kita harus memiliki akun Google terlebih dahulu, yang harus Anda buat sendiri. Kedua, Anda perlu mengetahui pintu masuk ke Google Analytics. Berikut adalah dua alamat yang digunakan:
Pengelola Tag Google:tagmanager.google.com/
Analisis: analytics.google.com/
Pengelola Tag Google
Google Pengelola Tag (GTM) adalah sistem pengelolaan tag yang dikembangkan dan disediakan oleh Google. Hal ini memungkinkan administrator situs web untuk mengelola dan menyebarkan berbagai kode pelacakan, kode analitik, dan tag pemasaran tanpa mengubah kode situs web. Dengan GTM, pengguna dapat dengan mudah menambahkan, memperbarui, dan menghapus tag tanpa bergantung pada pengembang.
Fitur utama GTM meliputi:
Dalam bahasa Inggris sederhana: platform ini digunakan untuk mengumpulkan peristiwa tersembunyi yang dipicu oleh front-end, dan dapat mewujudkan pelaporan data dengan menyesuaikan kondisi pemicu dan memicu panggilan balik peristiwa. Ini digunakan di sini untuk mengumpulkan data dan melaporkannya ke Google Analytics.
Analisis Google
Seperti namanya, ini adalah situs web yang digunakan untuk mengumpulkan, melihat, dan menampilkan data