RSS és If-modified-since - kompatibilitási lista létrehozása
Egy dolog az, hogy SELECT MAX(created) FROM cikk. A kérdés, hogy mi történik a kieső RSS bejegyzésekkel? Az olvasók megtartják az összes valaha kapott bejegyzést (ami nem öregebb a user által kapott korlátnál), vagy mindig a legutolsó letöltött listát használják?
Gondolom melyik így, melyik úgy... Kézenfekvő gyorsítás lenne, hogy csak a megadott (If-modified-since) dátum utáni bejegyzéseket küldje el a szerver.
Így elsőre úgy gondolom lehetetlen a kérésből eldönteni, hogy milyen módon kezeli az olvasó a bejegyzéseket, de ismert program esetén a user-agent alapján ez is megállapítható (lenne). Már csak egy lista kéne a népszerű olvasókról. Az MS felmérésében ezek szerepelnek: NetNewsWire, Firefox Live Bookmarks, Outlook 12, Pluck, NewsFire, Live.com, Opera RSS Reader, Sage, Bloglines, Firefox, RssReader, RSS Bandit, Thunderbird, IE7, Google Reader, LiveJournal, Newsgator online, SharpReader, OnFolio, Newsgator desktop, My Yahoo!, FeedDemon.
Ha valakinek van kedve megragadni párat csinálhatnánk egy listát, azokkal az olvasókkal amik nem törlik azonnal feedből kikerült elemeket - azaz amiknek elég a friss elemeket küldeni.
■ Gondolom melyik így, melyik úgy... Kézenfekvő gyorsítás lenne, hogy csak a megadott (If-modified-since) dátum utáni bejegyzéseket küldje el a szerver.
Így elsőre úgy gondolom lehetetlen a kérésből eldönteni, hogy milyen módon kezeli az olvasó a bejegyzéseket, de ismert program esetén a user-agent alapján ez is megállapítható (lenne). Már csak egy lista kéne a népszerű olvasókról. Az MS felmérésében ezek szerepelnek: NetNewsWire, Firefox Live Bookmarks, Outlook 12, Pluck, NewsFire, Live.com, Opera RSS Reader, Sage, Bloglines, Firefox, RssReader, RSS Bandit, Thunderbird, IE7, Google Reader, LiveJournal, Newsgator online, SharpReader, OnFolio, Newsgator desktop, My Yahoo!, FeedDemon.
Ha valakinek van kedve megragadni párat csinálhatnánk egy listát, azokkal az olvasókkal amik nem törlik azonnal feedből kikerült elemeket - azaz amiknek elég a friss elemeket küldeni.
user agent sniffing?
s lehetne még folytatni a sort. Biztos ezt akarod csinálni? S ha igen, miért?
igen. az
Természetesen az oldal egy normál módban működne, csak a megfelelő olvasóknak szolgálá ki ezt a fajta tartalmat. Nem hiszem, hogy RSS-nél bármilyen hátrányt jelenthet, hiszen itt egyértelműen változó tartalomról van szó. A google (kereső) legjobb tudásom szerint nem foglalkozik RSS fájlokkal (az XML-t ugyan indexeli, de plaintext szinten).
Ha új verzió jön ki, azt egyszerűen ismeretlen lehet venni, és normális feedet kaphat. A user agent módosítása nem értem, hogy jön ide.
Az RSS csak tippeket ad a atartalomra. A szabvány nem állítja, hogy minden cikknek szerepelnie kell benne. Ha a bejegyzések száma limitálva van, és te hetente töltöd le, könynen kicsúszhat belőle valami.
Itt csak a feed tartalma változna (bár gondoltam rss/atom váltására is). Ezzel szerintem semmi probléma. Ha ismerjük az egyes olvasók (filozófiai szinten) hogyan értelmezik az RSS mibenlétét, azaz önálló entitásként kezelik a bejegyzéseket, vagy pedig egy listának, ahol az elemek csak a lista részei (kihullás után nincsenek értelmezve).
kérdések
Kifejtenéd? S akkor az eredeti kérdésemre (miért) is válaszolnál. Bár sejtem, hogy PUSH protokolt szeretnél
Ez a "belefér" a hírforrástól függ. Bár szvsz még a weblabornál is bőven belefér a félóra. Tőzsdeindexnél már valóban más a helyzet. S a protokoll ügyetlensége alatt mit értesz? Hogy PULL? Ha fontos a mihamarabbi információ eljuttatása ahhoz, aki ezt szeretné, akkor csinálj hírlevelet.
Itt csak az URI definicója zavar be. Én úgy gondolom, hogy ugyanabban az időpillanatban ugyanarra a tartalomra kellene mutatnia
Csak annyi, mint ahogy a böngésző user-agent-ét is módosíthatom, egy RSS olvasóét is lehet.
Ez így igaz, szabi után egy pár napig én is mindig elveszve érzem magam, de nem látom, hogy a user agent sniffing hol segít ezen - erre inkább a személyre szabott RSS csatornák jelentenék a megoldást.
Amúgy a sávszélességet, meg a gyakori full letöltések elkerülése a cache szolgál, bár igaz, nem minden UA veszi figyelembe a HTTP headereket
PUSH, PULL
Az, hogy egy URL mögött egy tartalom jó irányelv, de ez az eset a kivétel. Az "ugyanabban az időpillanatban" dolog kicsit eröltetettnek tűnik. Mondhatnám, hogy nincs két kérés ugyanabban az időpillanatban, de az kekeckedés lenne... :)
A useragent módosítása pedig pontosan erre jó. Ha a szerver egy user-agentnek megfelelő választ ad. Ha módosítjuk a user-agent stringet azért tesszük, hogy azt a választ kapjuk, amit az XY kliens kapna. De épp itt a lényeg az UA megváltozatásában.
A lényeg, hogy senki nem mondja meg, milyen tartalmat kell RSS-elni, ezt a gyakorlat mondja meg. (Lent folytatom...)
Érdekes
If-Modified-Since
felhasználatának ötlete. Ezzel egycsapásra meg lehetne oldani (leszámítva azt a csekélységet hogy mindenkinek be kéne építenie a feedkiszolgáló rendszerébe, ami köbö = lehetetlen) szóval meg lehetne oldani azt is, ami engem igencsak zavart régebben, hogy pl. egy hét után frissítek egy feedet akkor ne hiányozzon belőle egy rakás elem. Meg azt az agyatlanságot hogy x időnként keresi a frissítést, ahelyett hogy csak akkor frissítené a reader a hírcsatornákat amikor olvasom. Többek közt ezért is használok webes feedolvasót mert az megoldja ezeket.Nem vagyok benne biztos hogy minden esetben jelentős sávszélesség spórolást lehetne elérni, statisztikákból kiderülne. Mindenesetre az a reader ami
If-Modified-Since
-t támogatja tölthetné csak addig a feedet amíg régi elemet nem talál benne, nem?Hátránya viszont hogy a statikus fájl helyett egy program ami ezt így ki tudná szolgálni jóval lassabb lenne futásidőt nézve.
Amúgy ha ilyet csinálsz, akkor ne csak az új bejegyzéseket, hanem plusz egy régit is küldj, mivel ha minden bejegyzés új, akkor azt veheti a feedolvasó úgy hogy hoppá, itt lehet kimaradtak elemek, így mondjuk gyakrabban kéne ellenőrizni azt a feedet. Amit én írtam program legalábbis így működött.
Mindet küldeni vagy csak az újakat?
Szerintem a feed csak az új bejegyzéseket kell hogy tartalmazza, mivel a kliens a régieknek a birtokában van (vagy volt). Volt lehetősége a kliensnek, hogy feldolgozza őket, tárolja őket. Miért kéne a szervernek külön jeleznie: "az elemek még mindig aktuálisak"? És miért kéne ezt azon a buta módon tennie, hogy újra és újra elküld X darab bejegyzést?
Ahogy írtátok, a mostani redundáns módszernek is vannak hiányosságai. Ez sem győződik meg arról, hogy az összes bejegyzés mindenképen eljusson hozzád. Megengedhető, hogy kimaradjon olyan elem, amiről a kiszolgáló valamilyen elv alapján úgy gondolja, nem szükséges elküldenie (pl. nincs benne az utolsó 20ban). Ki mondja, hogy ehhez kell ragaszkodni?
Sajnos a gyakorlat. Léteznek olyan (szörnyen primitív) kliensek, amik nem tárolják a régebbi bejegyzéseket, ehelyett a szervertől várják, hogy elküldje azokat újra meg újra. Őket csak azzal lehet kiszolgálni amit várnak, amivel képesek dolgozni, az utolsó X darab elemet. Sőt, akár feltételezzük minden kliensről, hogy buta, és csak azokat szolgáljuk ki logikusan, amikről tudjuk, hogy megfelel nekik ez a válogatás.
A +1 bejegyzést küldése nem tűnik túl elegánsnak. Inkább, mint egy lépés előe és egy fél vissza. (Ez most olyan pártvezéresen hangzott.. :) Persze, az kérdés, hogy ez az egész az olvasók mekkora részét érinti. Így számok nélkül elég sok a kérdés.
Mindet egyszerűbb
A dolognak meg az a része hogy X-nél több elemet küldesz (ha a kapott
If-Modified-Since
kisebb mint az X. elem dátuma) könnyen megvalósítható és nem nagyon vet fel kérdéseket.Igazándiból a
LINK
elemmel mintrel="alternate"
, alternatív verzió van megadva.Több vagy kevesebb bejegyzés küldése
Az X darab elemet csak azért kevertem be a dologba, hogy a mostani módszer elég primitív, és nincs igazán logikus oka, hogy ezt használja az ember.
A sok elem kérdése jó ötlet. Ott még csak nem is zavarnak a fenti kompatibilási problémák, viszont valami ésszerű (biztonági) korlátot szivem szerint bevezetnék rá. A baj csak az, hogy elég nehéz megkülönböztetni azt aki szabi után egyszer letölt száztizennégy bejegzést, és azt aki ezt percenként teszi. (Bár az IP talán jó közelítés...)
Goba 2004
http://weblabor.hu/blog/20040505/rssakadaly
Felhő
Lehet rosszul fogalmaztam