Umpan berita: mengapa kita melakukan kesalahan ini?

Halo, nama saya Dmitry Karlovsky dan saya punya berita untuk Anda. Nah, seperti berita, tampilan segar pada hal yang biasa dalam bentuk artikel lain. Kemungkinan besar Anda akan mendapatkannya dari umpan berita apa pun. Atau Anda tidak akan mendapatkannya jika berita dipublikasikan pada waktu yang salah. Tidak peduli seberapa menarik artikel ini bagi Anda.


Umpan Berita Khas


Masalahnya adalah bagaimana kaset terbentuk dan bagaimana pengguna berinteraksi dengannya. Dan di sini, sayangnya, seperti biasa, solusi paling sederhana sangat salah. Mari kita lihat mengapa.


Metode konsumsi


Misalkan pengguna meminta kami daftar beberapa entitas. Bagaimana pengguna akan melihat entitas ini tergantung pada tujuannya. Ada dua cara untuk mengonsumsi:


  1. Pencarian aktif. Pengguna mencari sesuatu yang spesifik. Ia menerapkan penyaringan dan penyortiran untuk mempersempit output, setelah itu ia secara berurutan memindai materi, memeriksa masing-masing. Penting bahwa daftar yang Anda lihat tidak berubah selama proses melihat, jika tidak Anda dapat dengan mudah melewati apa yang Anda cari.


  2. Pencarian pasif. Pengguna tidak mencari sesuatu yang spesifik. Sebaliknya, ia menginginkan layanan untuk melihat apa yang dimiliki layanan ini dan menampilkan sesuatu yang menarik bagi pengguna. Di sini penting untuk menunjukkan kepada pengguna materi yang paling relevan saat ini untuk pengguna tertentu. Dan apa yang sudah dia lihat adalah tidak menunjukkan sama sekali.



Jadi, umpan berita dirancang hanya untuk konsumsi pasif dari berita-berita ini. Ya, pengguna dapat membatasi rentang minat dengan bantuan filter, tetapi ia tidak mencari berita tertentu, karena kemungkinan besar ia belum mengetahuinya dan masuk ke umpan untuk mempelajarinya. Dan kepuasannya tergantung pada seberapa banyak materi yang menarik (relevan) yang dilihatnya dan berapa banyak yang tidak menarik yang dilihatnya.


Kriteria relevansi


Banyak faktor yang dapat memengaruhi relevansi. Misalnya, mengubah prioritas tugas yang diberikan kepada Anda di task manager adalah berita yang sangat penting, yang harus ditunjukkan kepada pengguna sesegera mungkin. Kalaupun setelah itu ada komentar dari selusin tugas lainnya.


Tetapi ada kriteria umum, seperti:


  1. Visibilitas. Jika pengguna telah melihat berita ini dan entah bagaimana bereaksi terhadapnya (digulir, dihapus, ditandai sebagai sudah dibaca, pergi ke detail, dll.), Maka kedua kalinya ia tidak ingin melihatnya.
  2. Relevansi Beberapa berita kehilangan relevansinya dengan munculnya berita yang lebih baru tentang topik yang sama. Misalnya, dari berita tentang perubahan status tugas, hanya yang terbaru yang menarik, yang mencerminkan keadaan saat ini.
  3. Tanggal Berita baru seringkali lebih menarik. Dan beberapa berita lama tidak lagi begitu menarik sehingga lebih baik untuk tidak menunjukkannya sama sekali (misalnya, berita bahwa air panas dimatikan sehari yang lalu).

Kaset pada satwa liar


Dalam sebagian besar kasus, umpan berita dibentuk dengan menerbitkan materi yang diurutkan berdasarkan tanggal pembuatan, publikasi, atau perubahannya. Artinya, kriteria relevansi (lebih penting) yang tersisa sama sekali tidak diperhitungkan. Pada akhirnya, ini menyebabkan ketidakpuasan pengguna. Beberapa contoh untuk menggambarkan:


Umpan VKontakte


Pengguna membuka berita untuk pertama kalinya dan melihatnya secara berurutan - semuanya baik-baik saja di sini. Setelah beberapa waktu, pemberitahuan muncul di atas bahwa beberapa berita terbaru telah muncul. Dan kemudian dia memiliki pilihan yang sulit:


  1. Terus membalik-balik feed
  2. Putar balik umpan ke awal untuk melihat berita terbaru (yang bukan fakta yang lebih relevan).

Karena rekaman itu semi-tak terbatas, dan tab browser tidak bisa hidup selamanya, dan tidak ada yang membatalkan rasa ingin tahu. Cepat atau lambat, pengguna akan kembali berada di "awal" rekaman itu. Ok, gulir ke bawah. Tidak ada yang menandakan masalah, ketika tiba-tiba berita yang sudah dilihat pengguna mulai muncul. Dan di sini lagi, pengguna bukanlah pilihan yang sulit:


  1. Dengan cepat dan cepat memutar kaset itu, menurunkan lalu lintas Internet ke dalam pipa, berharap untuk menyelesaikan berita yang belum dia lihat.
  2. Berkendara di tape dan lakukan sesuatu yang lain.

Ternyata setiap kali pengguna tidak mendapatkan berita apa pun, maka ia tidak pernah melihat mereka. Tapi mereka bisa menarik baginya. Selain itu, mereka bisa menjadi kritis dan secara radikal mengubah hidupnya.


Masalah ini sangat khas sehingga tepat untuk memberikannya nama khusus. Biarkan itu menjadi "Sindrom Kesadaran Terpecah."


Beranda Habra


SFO di sini diperparah dengan pagination. Saat berpindah antar halaman, pengguna melihat berita dari halaman sebelumnya. Dan jika dia bertahan di beberapa halaman sedikit lebih lama, maka dia dapat dengan mudah mendapatkan beberapa halaman "pembantaian" berturut-turut. Saya menjelaskan masalah ini secara lebih rinci dalam catatan tentang Piyamaisasi .


Youtube


Dalam "direkomendasikan" hanya memberikan 18 video yang sering menakutkan dan hanya itu. Untuk melihat sesuatu yang baru dalam rekomendasi, Anda perlu menghapus secara manual semua yang tidak menimbulkan minat. Tentu saja, pengguna yang jarang akan melakukan ini. Dalam "berlangganan" - mereka hanya mengurutkan berdasarkan tanggal, karena yang lama, tetapi mungkin menarik untuk klip pengguna, dia tidak akan pernah melihat. Kecuali itu tersandung pada mereka dalam "direkomendasikan".


Akar masalahnya


Ketika pengguna pertama kali membuka feed untuk pertama kalinya, ia hanya memiliki satu titik penerimaan berita - segera setelah sebelumnya dilihat. Dia melihat ke bawah dan tiba-tiba titik masuk kedua muncul - di suatu tempat di atas. Dan sulit mengatakan di mana berita itu lebih relevan. Ketika, setelah istirahat, dia kembali, dia segera memiliki setidaknya dua poin: awal rekaman dan tempat di mana dia selesai menonton berita terakhir kali. Dan karena secara pribadi pengguna tidak memiliki kesempatan untuk menonton berita sebelum dilihat sebelumnya, poin-poin penerimaan berita ini berlipat ganda dan berlipat ganda.


Solusi


Titik penerimaan berita yang relevan harus hanya satu. Pada saat yang sama, berita yang paling relevan secara real time harus diterima di dalamnya. Di antara semua berita, kelompok berikut dapat dibedakan:


  1. Terlihat. Berita yang sebelumnya kami ambil untuknya dan dia lihat sekarang di layar.
  2. Dilihat Berita bahwa pengguna telah menonton dan menggulir. Saat berita meninggalkan area yang terlihat - Anda dapat dengan aman menandainya sebagai sudah dibaca.
  3. Ceritanya Daftar berita yang dibuat untuk pengguna tertentu. Ini termasuk berita yang telah dilihat pengguna dan yang sedang dilihatnya saat ini.

Newsgroup


Idealnya, bahkan memuat ulang halaman tidak boleh mengubah apa pun di daftar berita. Ketika pengguna meminta lebih banyak berita (dengan mengklik tombol atau menggulir ke bawah), kami memilih bagian lain dari berita yang paling relevan saat ini dan memasukkannya ke dalam cerita. Dengan demikian, pengguna memiliki gagasan yang jelas tentang rekaman itu sebagai sesuatu yang menarik dan tidak berubah. Segala sesuatu yang pernah dia lihat adalah dalam urutan di mana dia melihatnya. Dan dengan gemetar, dia terus-menerus mendapatkan sesuatu yang menarik, tanpa khawatir ada sesuatu yang terlewatkan. Benar, mungkin perlu angin untuk waktu yang lama jika ada banyak berita.


Relevansi


Hal yang paling sederhana, tentu saja, adalah menganggap berita terbaru lebih relevan. Tetapi Anda dapat membiarkan pengguna membantu layanan memahami apa yang menarik baginya dan apa yang tidak. Anda dapat melakukan ini dengan menambahkan kemampuan untuk menghapus berita. Jika pengguna tidak hanya menggulir berita, tetapi menghapusnya sehingga tidak menyumbat ceritanya, maka jenis berita ini tidak menarik baginya dan informasi ini dapat digunakan untuk kompilasi selanjutnya.


API


Karena sejarah kita sedang diisi ulang dan dilihat dari akhir, kita tidak dapat menggunakan pagination tradisional, karena berita kemudian akan terus-menerus berpindah antar halaman. Selain itu, meminta sekitar 100500 halaman untuk DBMS mungkin terlalu berat. Karena itu, untuk pengambilan sampel data, kami akan menggunakan jangkar. Untuk melakukan ini, kami akan menunjukkan data berikut dalam permintaan:


  1. Jangkar Pengidentifikasi berita mulai dari mana data harus dikembalikan. Jika anchor tidak ditentukan, maka berita yang dibaca terakhir diambil sebagai anchor.
  2. Offset. Jumlah berita untuk sampel. Angka ini bisa positif dan kemudian berita kembali setelah jangkar. Atau negatif dan kemudian berita kembali ke jangkar.

Jika bias negatif, tetapi tidak ada jumlah berita yang diperlukan sebelum jangkar, maka itu hanya mengembalikan berapa banyak. Dengan perbedaan jumlah yang diminta dan jumlah pengunjung, klien dapat memahami bahwa kita berada di awal cerita.


Jika bias positif, dan tidak ada jumlah berita yang diperlukan setelah jangkar, maka cerita ditambahkan ke nomor yang diperlukan dengan berita yang paling relevan saat ini. Jika berita benar-benar selesai, sekali lagi, kami mengembalikan berapa dan klien mendeteksi akhir rekaman itu.


Script permintaan


Kami membuka kaset itu, kami belum memiliki jangkar:


GET /feed?offset=5 

Kami membuat permintaan untuk berita yang belum dibaca:


 SELECT FROM history WHERE user = 123 AND read_at NOT NULL ORDER BY id ASC limit 5 

Pengguna melihat pilihan berita yang belum dibaca yang ia hentikan terakhir kali:


 [ { id : 3232 } , { id : 5343 } , { id : 7346 } , { id : 9825 } , { id : 9967 } ] 

Pengguna berayun untuk melihat berita yang dilihatnya terakhir kali:


 GET /feed?anchor=3232&offset=-5 

 SELECT FROM history WHERE user = 123 AND id < 3232 ORDER BY id DESC limit 5 

 [ { id : 323 } , { id : 329 } , { id : 544 } , { id : 843 } , { id : 898 } ] 

Pengguna terguncang untuk melihat sesuatu yang baru:


 GET /feed?anchor=7346&offset=5 

 SELECT FROM history WHERE user = 123 AND id > 7346 ORDER BY id ASC limit 5 

Jika Anda menerima sedikit berita, kami memilih jumlah yang diperlukan dari yang paling relevan yang tidak ada dalam sejarah dan menambahkannya ke sejarah, setelah itu kami mengembalikan semuanya:


 [ { id : 38574} , { id : 47246} , { id : 52378} , { id : 69238} , { id : 73294} ] 

Realisasi satwa liar


Jika Anda mengetahui layanan apa pun yang menerapkan umpan dengan cara ini atau yang serupa, saya akan dengan senang hati mengirimkan tautan ke sana di sini sehingga pembaca dapat menghargai kenyamanan dari pendekatan ini.

Source: https://habr.com/ru/post/id416555/


All Articles