Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika fewtoast w Hydepark

Inspirator

w Hydepark

7piorunów

Otwieram 50 kart z pojedynczymi wpisami na Twitterze. Przeglądarka zjada kilkanaście GB RAM-u. Wiecie, ile w tym jest realnej treści (tekst + obrazki)? Jakieś 10 MB. Reszta — ponad 99% — to 50 kopii tej samej maszynerii, ładowanej od zera w każdej karcie.

Winne jest jedno ciche założenie, które wszyscy traktują jak prawo natury: „jedna karta = jedna osobna, w pełni załadowana strona". A wcale nie musi tak być.

Opisałem pomysł, jak to skasować, nie zmieniając niczego, co widzisz w przeglądarce — plus czemu to nie jest ani nowe, ani ryzykowne (bo ten wzorzec siedzi już w History API), i co z tego mają same serwisy.

https://claude.ai/public/artifacts/6bed38d9-9ca1-474c-a3dc-5403c9204085

Da się przełamać ten paradygmat, czy gadam głupoty?

Komentarze (31)

Zawodowiec0piorunów

@fewtoast wiesz że dochodzi problem z bezpieczeństwem? Karty są konteneryzowane właśnie po to by uniknąć ciekawych ataków, gdzie na jednej karcie otworzysz okno banku, a na drugiej JS będzie próbował podmienić <div> z login-em i hasłem (albo chociaż cookie) by wysłać dane logowania na podmieniony URL.

Kiedyś już tam byliśmy, było optymalnie, cacheowane, ale były problemy bezpieczeństwa.

Inspirator0piorunów

@Meverth Wiem, ale to tego nie dotyczy, to w żaden sposób nie zmienia bezpieczeństwa. Nie robi przejścia między domenami wcale, ani nawet między stronami tej samej domeny tak właściwie, tylko ogranicza się do jednej jedynej strony na całe okno, po prostu karty przeglądarki (jako element UI a nie logiczne karta-strona, bo to nie jest wtedy karta-strona, tylko wiele kart-jedna strona) dostają inne zachowanie, o ile należą do tej samej domeny.

Polecam jednak przeczytać propozycję jeśli cię interesuje, bo zrzucanie propozycji z góry, na podstawie błędnej przesłanki to jednak słabe.

Osobistość0piorunów

@fewtoast Mi się bardzo podoba ten pomysł i na pierwszy rzut oka ma sporo sensu.
W dłuższej perspektywie nigdy nie mam otwartych wielu kart przeglądarki, ale czasami jak przeglądam jakiś sklep to otworzę z 20 kart, aby porównać produkty i faktycznie bez sensu ładować wszystko od zera, skoro różnią się paroma komponentami i danymi. Tylko to wszystko musiałby ogarniać przeglądarka, nie? Takie SPA tylko o poziom wyżej, brzmi fajnie.

Ale tylko sprecyzuję. Przeglądarka wciąż pytałaby o całą stronę, tylko po odpytaniu i sprawdzeniu, nie dublowałaby rzeczy w ram, tak?
Czyli np. odpalam na karcie hejto.pl tworzy się jakiś kontener "hejto.pl" i on ma np.
aaa.js, bbb.png, ccc.js
Odpalam drugą kartę hejto.pl, leci request po całą stronę, ale przeglądarka sprawdza, że aaa.js, bbb.png, ccc.js jest już załadowany w ramie i jest w obrębie tego samego kontenera (hejto.pl), więc nie dubluję tego w ram, tylko reużywa tego, tak?

Inspirator0piorunów

@HmmJakiWybracNick Nie, nie dublowanie to zupełnie inny mechanizm i istnieje, ale ma swoje ograniczenia ze względu na izolację wielu procesów oraz bezpieczeństwa (to raczej gdy chodzi o osobne domeny). Najlepiej zobacz dema: https://claude.ai/public/artifacts/973661ff-bc7d-41ce-bfe5-35cff1beb8bf

Bo raczej lepiej tego w komentarzu nie wyjaśnię.

Strona na całe okno jest jedna, nie tylko jej elementy, ale cała strona. A kliknięcie w kartę tylko podmienia ten mały element, którym się podstrony tej samej strony różnią. Zamiast wielu kompletnych stron, każda ze swoją kartą, jedna kompletna strona a klikanie w karty podmienia tylko maleńki element na tej jednej jedynej kompletnej stronie.

To wymaga zmiany sposobu obsługi przez przeglądarkę i maleńkiego API po stronie strony, analogicznego do istniejącego History API w Single Page Application (przy przyciskach wstecz/naprzód).

Claude ArtifactTry out Artifacts created by Claude usersClaude
Osobistość0piorunów

Każda karta jest sandboxowana i ma to swój powód dla bezpieczeństwa i innych takich. Plus nie wiem skąd te liczby bo odpaliłem teraz z ciekawości 47 kart Twittera u siebie i cały mój system operacyjny zużywa jedynie 14,5 GiB z czego Chrome jakieś ~11 GiB a mam w nim otwarte jeszcze masę innych kart.

Osobistość1piorunów

@fewtoast W10, Firefox, mam 16gb ramu ddr3, rezultat jak na obrazku, jakby mógł, to by pewnie więcej wszamał.
Jutro jak wrócę do domu, to mogę sprawdzić na W11, Firefox, 32gb ramu ddr4.

Inspirator0piorunów

@Catharsis To zbadam ile to u mnie zajmuje, bo AI tylko robił wyliczenia, najwyżej skoryguję. Bo mi realnie całe moje 32 GB zabiera jak otworze sporo kart, w ciągu dnia może się zebrać (plus jakiś jeden dwa inne programy co nie tak mało zajmują).

Osobistość0piorunów

@fewtoast Załadowane, każdą otworzyłem i dałem czas na załadowanie się. Mam wyłączone usypianie kart. Jedyne co to adblock działa w tle i może częźć RAMu zwalniać usuwając reklamy ale wątpie żeby to robiło aż taką różnice.

Inspirator0piorunów

@Catharsis moja propozycja nie ma wpływu na bezpieczeństwo, nic się pod tym względem nie pogarsza, bo to jedna i ta sama strona. Izolacja jest między odrębnymi domenami i z tym się nic nie zmienia.

Inspirator0piorunów

@Catharsis te karty masz zaladowane czy tylko uśpione?

Kosmonauta1piorunów

@fewtoast to jest specjalnie tak zrobione, żeby karty nie wchodziły z sobą w interakcje. Dla bezpieczeństwa i stabilności.

Części współdzielone i tak mają pod spodem te same strony pamięci zmapowane. Jest copy-on-write, więc sumaryczna zajmowana pamięć wirtualna to nie jest zajmowana pamięć fizyczna.

Inspirator0piorunów

@globalbus Wiem, ale to co proponuję nie wpływa na bezpieczeństwo. To jest ta sama strona, a nie próba otwarcia furtki między różnymi stronami.
Współdzielenie jednak nie rozwiązuje problemu, on nadal jest taki jaki był. Właściwie te współdzielenie jest takim kombinowaniem, żeby coś zoptymalizować, ale nie łamać paradygmatu, który siedzi bardziej w głowach niż technologii ani bezpieczeństwie.

Tytan0piorunów

Być może da się to sensownie zrobić, tylko pytanie jest, czy będzie z tego jakikolwiek zysk? Zapewne twórcy przeglądarek mają statystyki użytkowania i wydaje mi się, że przypadek użycia dziesiątek kart tego samego portalu jest niszowy i stąd nikt się nad tym nie pochylił. Dla niektórych ta rozdzielność może być też pożądana.

Inspirator0piorunów

@Roark W Firefox jak zajrzysz w kod źródłowy, to masz listę treści w elemencie DOM, i jak klikniesz kartę to się albo jedna albo druga ładuje jako viewport. No to podmianka od strony przeglądarki tylko taka:
https://claude.ai/public/artifacts/3637a996-d9bd-47f0-9a17-2d7539ab02eb

A od strony Twittera obsługa tego eventu, gdzie i tak korzysta Twitter z History APi czyli czegoś analogicznego, wysiłek jest niemal zerowy tak realnie. Są pewne rzeczy wokół tego, które trzeba wesprzeć, może da się natywnie, ale niemal sto procent to identyczne problemy jak przy History API.

Claude ArtifactTry out Artifacts created by Claude usersClaude
Tytan0piorunów

@fewtoast też żeby nie było, nie jestem przeciwny rozwiązaniu, innowacja jest potrzebna, natomiast zawsze szukam dziury w całym i w tym przypadku stosunek wysiłku do korzyści może być niekorzystny

Inspirator0piorunów

@Roark Niby tak, ale można pomyśleć, jak wiele stron różnorodnych ludzie otwierają, i zwykle więcej siedzą na tych samych najpopularniejszych, a nie nie na różnorodnych. :grinning: Stąd mój wniosek, chociaż no prawda że trochę pośredni.

Tytan0piorunów

@fewtoast z usypianiem nieużywanych kart to jest dowodem na to, że ludzie mają mnóstwo kart, natomiast niekoniecznie są z tego samego portalu

Inspirator0piorunów

@Roark Znam te wątpliwości, ale właśnie nie musi tak być, wiele API dojrzewa i wyskakuje jak Filip z konopi, albo coś niszowego nagle jest wprowadzane. Motywacje twórców standardów są niezbadane. :)

Ja wiem, że ja mam ten problem bo mam ten nawyk. A właściwie, samo istnienie zaawansowanego zarządzania usypiania nieużywanych kart, jest jakimś dowodem, że więcej ludzi tak robi.
Rozdzielność potrafi być przydatna, na pewno nie zakładam że każdy i zawsze będzie tego używał, ale chciałbym żeby to było powszechne i domyślne dla co najmniej dotychczasowych aplikacji SPA.

A nie mówiąc o nietypowych przypadkach, które dopuszczają tylko jedną instancję swojej strony i automatycznie blokują te z każdej innej karty. No dla nich to rozwiązanie jak znalazł. :grinning: Będą mieli pełną kontrolę, to to nawet przy więcej niż jednej karcie byłaby tylko jedna strona na całe okno. :grinning:

Osobistość1piorunów

Kontenery, VMki, izolacja, masturbacja. Z drugiej strony przeglądarka typu Lynx.

Czy da się zrobić przeglądarkę, która działa dobrze i optymalnie wykorzystuje zasoby? Pewnie że się da, tylko kto wtedy będzie kupował RAM i resztę sprzętu?

Autorytet4piorunów

Tyle pierdolenia AI, że nie wiem na czym polega rozwiązanie.

Inspirator0piorunów

@MostlyRenegade Już pokazuję na trzech demach:
Mechanizm działania: https://claude.ai/public/artifacts/3637a996-d9bd-47f0-9a17-2d7539ab02eb
Bezpieczeństwo - skąd pomyłka: https://claude.ai/public/artifacts/b002071c-fb11-4b85-95ca-1c3ff30f08b3
Bonusowo - Zajętość RAMu: https://claude.ai/public/artifacts/07488a78-cdf2-42fd-b1c3-c80185b45923

Ja z RAMem mam problem, że mi się zacina cały komp, mimo że mam 32 GB. xD Jak miałem 2 GB to jeszcze rozumiem, ale teraz? A otwierałem przy 2 GB RAMu tak samo masę kart na raz. Wszystkiemu winne że te strony mają całą otoczkę bezlitośnie ciężką, i można ją zredukować z rozmnażającej się, do jednej jedynej na okno. TO wręcz cudowne rozwiązanie dla takich jak ja. xD A na razie to system ostrzegania i usypiania kart sobie robię, jak bym był nie z 32 tylko 2 GB RAM. xDDD

Claude ArtifactTry out Artifacts created by Claude usersClaude
Fanatyk0piorunów

@fewtoast jest tylko jeden problem....

Przeglądarka nie wie, co się kryje za requestem, dopóki go nie wywoła i nie pobierze zawartości. A i ta może się przecież potem zmieniać dynamicznie. Dlatego każda karta to osobny DOM, JS, eventy... to jest kompletnie osobna maszyna stanów i dlatego ląduje w osobnym procesie. Nie ma znaczenia, że pochodzi z tej samej domeny.

To nie jest przenikanie treści między osobnymi stronami

No właśnie jest. Zarówno z punktu widzenia przeglądarki, jak i serwera.

pożeranie RAMU

Po to on jest. Mamy teraz w komputerach duże ilości pamięci, szybkie dyski, wielordzeniowe procesory. Dlaczego więc nie mamy robić z tego użytku? Skoro zapłaciłem za 64 GB, to dlaczego mam tego nie wykorzystywać?

Inspirator0piorunów

@MostlyRenegade No tak, to jest nowe API, przełamanie paradygmatu.
Napisałem w tekście że to nie ma nic do bezpieczeństwa. To mylne przekonanie że to jakoś wpływa na bezpieczeństwo, jest przez brak przełamania paradygmatu. Nic niczego nie przenika, to jest zwykła pojedyncza strona tej samej domeny, to w żaden sposób nie wpływa na bezpieczeństwo. To nie jest przenikanie treści między osobnymi stronami, tylko bardziej zrobienie z kliknięcia karty tej samej domeny, wywoływacza eventu dla pojedynczej strony.
Jeszcze nazywanie oszczędności RAM iluzorycznym, jak to dosłownie pożeranie RAMU jest.

No to strona ma decydować, czy kliknięty link z nową kartą jest częścią SPA czy nie - dokładnie tak samo się dzieje przy istniejącym i powszechnie stosowanym History API (to od wstecz/do przodu).

To jest ciekawe zjawisko, że nawet zainteresowane osoby albo gorący fani rozwoju API webowych, z jednym o tym kiedyś pisałem, też mają ten sam paradygmat, który dopiero muszą przełamać, bo to blokuje im zrozumienie, tego co już w tekście jest zawarte. :grinning:

Fanatyk0piorunów

@fewtoast no to, przede wszystkim, to przeglądarka musiałaby obsługiwać coś takiego. Ale coś mi się wydaje, że kwestie izolacji i bezpieczeństwa będą ważniejsze niż iluzoryczna oszczędność pamięci. Przeglądarka nie będzie raczej odgórnie zakładała, że dwie karty, nawet pochodzące z tej samej domeny, będą miały identyczny DOM i całą resztę zawartości. Znacznie łatwiej byłoby to obsłużyć właśnie po stronie wyświetlanej aplikacji, jakimś JS-em.

Inspirator0piorunów

@MostlyRenegade Nie. To ma być przeglądanie Twittera w oknie przeglądarki internetowej na PC, ale idea SPA (single page application) byłaby posunięta do objęcia nie tylko historii (wstecz/do przodu) ale też przełączania między kartami okna przeglądarki internetowej na PC.
To działałoby jakby karty były wewnątrz Twittera pod tym względem, że byłaby to dosłownie jedna instancja Twittera na całe okno przeglądarki internetowej na PC. A różnica taka, że kliknięcia na drugą kartę Twittera w oknie przeglądarki internetowej na PC, nie przełącza na osobną instancję, tylko pozostajesz w tej samej instancji, a tylko event wewnątrz tej instancji się odpala i już skrypt podmienia treść wiadomości na zgodną z URLem karty. Kliknięcie drugiej karty z Twitterem tyle by znaczyło, co kliknięcie przycisku wstecz w SPA.

No teoretycznie można by wewnątrz Twittera dodać pasek kart i nim operować, ale przez to traci się wygodę korzystania z natywnych przeglądarkach kart, gdzie rządzi też przyzwyczajenie oraz że obok tych kart Twittera można otworzyć inne, zwykłe karty, wszystko na jednym pasku okna przeglądarki internetowej na PC, zupełnie klasycznie. Od strony użytkownika praktycznie nic się nie zmienia, poza tym, że RAM jest mniej pożerany, jeśli masz nawyk używania wielu kart z Twitterem na raz.

Może wrócę do pokazania wizualnie jak to ma działać, tekst nie daje rady. :grinning:

Fanatyk0piorunów

@fewtoast czy masz na myśli zaimplementowanie przeglądania różnych treści twittera (postów, kanałów itd.) w ramach samej aplikacji twittera? Żeby nie trzeba było odpalać w przeglądarce osobnych kart?

Inspirator0piorunów

@MostlyRenegade Kiedyś opisałem to bezpośrednio, od technicznej strony, to było też ciężkostrawne. Nie mam takentu do przekazywania myśli, ani ustawiania AI żeby przekazał moje myśli. xD

Inspirator0piorunów

@dolitd Chciałem żeby było przystępne dla każdego, a się okazało na odwrót?

Rozwiązanie to event, tak jak jest popstate dla historii, to byłby odpowiednik dla kliknięcia karty w oknie przeglądarce, oraz samo otwieranie "nowej karty" zamiast otwierać nową kartę z nowym obiektem window itd., otwiera nową kartę tylko jako element UI okna przeglądarki internetowej(strona a wcześniej użytkownik w ustawieniu przegladarki decyduje, czy otworzyć się ma po nowemu czy klasycznie), i wywołuje event, potem kliknięcie czy na pierwszą, czy na drugą kartę, tylko wywołuje event. Dzięki temu strona jest tylko jedna, nie ma dwóch odrębnych stron z np. Twitterem, tylko jedna, nieważne ile kart z Twitterem otworzysz, a przeładowuje się tylko np. tekst wpisu.

Więc wiele kart Twittera otwartych na raz, będzie zajmowało praktycznie tyle co jedna karta z Twitterem. Usuwa się cały narzut spowodowany otwieraniem kopii całej strony.

Daje to nawet korzyść dla Twittera, bo będzie miał wszystko w jednym miejscu, nawet jak użytkownik otwiera wiele kart z Twitterem, większą kontrolę i wiedza co się dzieje, co może zachęcić Twittera, Facebooka itd do użycia takiego rozwiązania. A dla użytkowników lżejsze otwieranie wielu kart.