Poniedziałek, 9 grudnia 2024 r.
Pozwól nam na użycie pamięci podręcznej.
Wraz z rozwojem internetu zwiększała się ilość indeksowania wykonywanego przez Google. Infrastruktura Google do indeksowania obsługuje heurystyczne mechanizmy buforowania, ale tak było zawsze. Tymczasem liczba żądań, które można zwrócić z lokalnych pamięci podręcznych, zmniejszyła się: 10 lat temu około 0,026% z całości pobierania było buforowane, co już wtedy nie było zbyt imponujące; obecnie ten odsetek wynosi 0,017%.
Dlaczego buforowanie jest ważne?
Buforowanie jest kluczowym elementem w wielkiej układance, jaką jest internet. Pamięć podręczna umożliwia błyskawiczne wczytywanie stron podczas ponownych wizyt, oszczędza zasoby obliczeniowe, a tym samym zasoby naturalne, a także pozwala zaoszczędzić ogromną ilość przepustowości zarówno klientom, jak i serwerem.
Dotyczy to zwłaszcza dużych witryn z rzadko zmienianymi treściami pod poszczególnymi adresami URL. W takim przypadku buforowanie na poziomie lokalnym może pomóc w bardziej efektywnym indeksowaniu witryny. Infrastruktura Google do indeksowania obsługuje heurystyczne przechowywanie w pamięci podręcznej HTTP zgodnie ze standardem buforowania HTTP, w szczególności za pomocą nagłówka odpowiedzi ETag
i żądania If-None-Match
oraz nagłówka odpowiedzi Last-Modified
i żądania If-Modified-Since
.
Zdecydowanie zalecamy używanie wartości ETag
, ponieważ jest ona mniej podatna na błędy (ta wartość nie jest uporządkowana, w przeciwieństwie do wartości Last-Modified
). Jeśli masz taką możliwość, ustaw je obie: internet Ci za to podziękuje. Być może.
Zmiana, jaką uznasz za wymagającą od klientów odświeżenia ich pamięci podręcznych, zależy tylko od Ciebie. Zalecamy wymaganie odświeżenia pamięci podręcznej w przypadku istotnych zmian w treściach. Jeśli zaktualizowana została tylko data praw autorskich na dole strony, nie jest to prawdopodobnie istotna zmiana.
ETag
i If-None-Match
Roboty Google obsługują żądania warunkowe oparte na ETag
zgodnie z definicją w standardzie buforowania HTTP.
Aby zasygnalizować preferencje dotyczące pamięci podręcznej robotom Google, ustaw wartość Etag
na dowolny ciąg znaków ASCII (zwykle hasz treści lub numer wersji, ale może to być też fragment liczby π – to zależy od Ciebie), który jest unikalny dla reprezentacji treści hostowanej przez adres URL do którego jest uzyskiwany dostęp.
Jeśli na przykład hostujesz różne wersje tej samej treści pod tym samym adresem URL (np. wersję mobilną i komputerową), każda z nich może mieć swoją własną unikalną wartość ETag
.
Roboty Google, które obsługują buforowanie, prześlą wartość ETag
zwróconą podczas poprzedniego indeksowania tego adresu URL w polu If-None-Match header
. Jeśli wartość ETag
przesłana przez robota jest zgodna z bieżącą wartością wygenerowaną przez serwer, serwer powinien zwrócić kod stanu HTTP 304
(nie zmodyfikowano) bez treści HTTP. Ten ostatni element, czyli brak treści HTTP, jest ważny z kilku powodów:
- serwer nie musi zużywać zasobów obliczeniowych na generowanie treści, co oznacza, że oszczędzasz pieniądze;
- serwer nie musi przesyłać treści HTTP, co oznacza oszczędność pieniędzy.
Po stronie klienta, takiego jak przeglądarka użytkownika lub Googlebot, treści pod tym adresem URL są pobierane z wewnętrznej pamięci podręcznej klienta. Ponieważ nie wymaga to przesyłania danych, odbywa się to błyskawicznie, co cieszy użytkowników i może im też zaoszczędzić trochę zasobów.
Last-Modified
i If-Modified-Since
Podobnie jak w przypadku ETag
roboty Google obsługują też żądania warunkowe Last-Modified based
zgodnie z definicją w standardzie buforowania HTTP. Z punktu widzenia semantyki działa to tak samo jak ETag
– do określenia, czy zasób można zapisać w pamięci podręcznej, używany jest identyfikator. Rozwiązanie to zapewnia te same korzyści co ETag
po stronie klientów.
Jeśli używasz dyrektywy Last-Modified
do przechowywania w pamięci podręcznej, mamy dla Ciebie kilka zaleceń:
-
Data w nagłówku
Last-Modified
musi być sformatowana zgodnie ze standardem HTTP. Aby uniknąć problemów z analizą, zalecamy użycie tego formatu daty: „Dzień tygodnia, DD Mon YYYY HH:MM:SS Strefa czasowa”, np. „Fri, 4 Sep 1998 19:15:56 GMT”. -
Chociaż nie jest to wymagane, warto też ustawić pole
max-age
nagłówkaCache-Control
, aby pomóc robotom w określaniu, kiedy ponownie zindeksować dany adres URL. Ustaw wartość polamax-age
na oczekiwaną liczbę sekund, przez które treści mają pozostać niezmienione, np.Cache-Control: max-age=94043
.
Przykłady
Jeśli myślisz podobnie jak ja, zrozumienie, jak działa heurystyka, może być trudne. Jednak pokazanie przykładowego łańcucha żądań i odpowiedzi wydaje się pomocne. Oto 2 łańcuchy: jeden dla ETag
/If-None-Match
, a drugi dla Last-Modified
/If-Modified-Since
, aby zilustrować, jak to działa:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
Odpowiedź serwera na indeksowanie: to odpowiedź, z której robot może zapisać pola nagłówka warunku wstępnego ETag i Last-Modified .
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Następne żądanie warunkowe robota: żądanie warunkowe jest oparte na wartościach nagłówka warunku wstępnego zapisanych z poprzedniego żądania. Wartości są wysyłane z powrotem do serwera w nagłówkach żądań If-None-Match i If-Modified-Since na potrzeby walidacji.
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Odpowiedź serwera na żądanie warunkowe: ponieważ wartości nagłówka warunku wstępnego wysyłane przez robota są sprawdzane po stronie serwera, serwer zwraca robotowi kod stanu HTTP 304 (bez treści HTTP). Będzie się to działo w przypadku każdego kolejnego żądania, dopóki nie wystąpi niepowodzenie weryfikacji warunków wstępnych (zmiana daty ETag lub Last-Modified po stronie serwera).
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Jeśli zależy Ci na zadowoleniu użytkowników i chcesz zaoszczędzić trochę na opłacie za hosting, skontaktuj się z dostawcą hostingu lub CMS albo z programistami, aby dowiedzieć się, jak włączyć buforowanie HTTP w swojej witrynie. Jeśli nie odniesiesz żadnych innych korzyści, to przynajmniej użytkownicy będą Cię nieco bardziej lubić.
Jeśli chcesz porozmawiać o przechowywaniu w pamięci podręcznej, odwiedź najbliższe Forum pomocy Centrum wyszukiwarki. Jeśli masz uwagi na temat sposobu, w jaki przechowujemy dane w pamięci podręcznej, zostaw komentarz na temat dokumentacji dotyczącej przechowywania w pamięci podręcznej, którą opublikowaliśmy razem z tym wpisem na blogu.
Chcesz dowiedzieć się więcej o skanowaniu? Zobacz całą serię Skanowanie w grudniu:
Tworzenie agentów AI za pomocą Kreatora agentów Vertex AI
Podczas tego ćwiczenia w Codelabs dowiesz się, jak tworzyć i wdrażać agenty generatywnej AI przy użyciu zaawansowanych narzędzi i infrastruktury Google Cloud. Omówimy najważniejsze pojęcia i przeprowadzimy Cię przez początkowe kroki, które należy wykonać, aby uruchomić pierwszego agenta.
Ćwiczenie z programowania dotyczące poufnej przestrzeni
Z tego laboratorium dowiesz się, jak uruchamiać zadania AI/ML za pomocą akceleratora przy użyciu rozwiązania Trusted Space.
Wdrażanie w Cloud Run pełnego pakietu aplikacji JavaScript z Cloud SQL for PostgreSQL
Cloud Run to w pełni zarządzana platforma, która umożliwia uruchamianie kodu bezpośrednio w infrastrukturze Google o wysokiej skalowalności. W tym Codelab pokażemy, jak połączyć aplikację Next.js w Cloud Run z bazą danych Cloud SQL dla PostgreSQL.
Ćwiczenie z programowania dotyczące regresji logistycznej
Dzięki temu ćwiczeniu z programowania dowiesz się, jak używać regresji logistycznej do poznawania, w jakim stopniu właściwości takie jak płeć, grupa wiekowa, czas wyświetlenia i typ przeglądarki przekładają się na prawdopodobieństwo kliknięcia
Ćwiczenie z programowania dotyczące regresji logistycznej
Dzięki temu ćwiczeniu z programowania dowiesz się, jak używać regresji logistycznej do poznawania, w jakim stopniu właściwości takie jak płeć, grupa wiekowa, czas wyświetlenia i typ przeglądarki przekładają się na prawdopodobieństwo kliknięcia
Ćwiczenie z programowania dotyczące regresji liniowej
Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak z zastosowaniem regresji liniowej utworzyć model, który prognozuje koszt kliknięcia. Aby ukończyć to ćwiczenie, potrzebujesz: Aby ukończyć to ćwiczenie, potrzebujesz wystarczająco dużo wysokiej
Ćwiczenie z programowania dotyczące regresji liniowej
Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak z zastosowaniem regresji liniowej utworzyć model, który prognozuje koszt kliknięcia. Aby ukończyć to ćwiczenie, potrzebujesz wystarczająco dużo wysokiej jakości danych kampanii, aby można było
Pierwsze kroki z wyszukiwaniem wektorowym w Spanner
W tym ćwiczeniu utworzysz instancję Spannera i wykonasz wyszukiwanie podobieństw wektorów dystrybucyjnych za pomocą wbudowanego wyszukiwania wektorowego w Spannerze oraz integracji z modelami Vertex AI.
Aidemy: tworzenie systemów wieloagentowych za pomocą LangGraph, EDA i generatywnej AI w Google Cloud
Aby opracować na platformie Google Cloud Platform funkcjonalny system asystenta nauczyciela oparty na AI, nazwany „Aidemy”, który demonstruje możliwości systemów wieloagentowych. Zdobądź praktyczne doświadczenie w zakresie projektowania, tworzenia i wdrażania złożonego systemu wieloagentowego w Google Cloud, opanowania kluczowych pojęć związanych z rozwojem aplikacji LLM oraz zrozumienia zalet architektur opartych na zdarzeniach.
Aplikacja do wyszukiwania zabawek z bazami danych w chmurze, środowiskiem uruchomieniowym bez serwera i integracjami z oprogramowaniem open source
W tym laboratorium programistycznym utworzysz aplikację wyszukiwania wektorowego opartą na RAG, która wyszukuje zabawki pasujące do wyszukiwania przez klienta (za pomocą tekstów i obrazów), tworzy zabawki niestandardowe na podstawie prośby użytkownika oraz przewiduje cenę niestandardowej zabawki, korzystając z AlloyDB, Gemini, Imagen, LangChain4j i GenAI Toolbox for Databases.
Interfejs Private Service Connect Vertex AI Pipelines
Z tego samouczka dowiesz się, jak skonfigurować i zweryfikować Vertex AI Pipelines w Private Service Connect
Tworzenie aplikacji do obsługi czatu na podstawie LLM i RAG przy użyciu AlloyDB AI i LangChain
Z tego ćwiczenia w Codelab dowiesz się, jak utworzyć klaster AlloyDB, wdrożyć usługę GenAI Databases Retrieval Service do baz danych i utworzyć przykładową aplikację korzystającą z tej usługi.
AlloyDB Omni i model AI lokalnego w Kubernetes.
W tym laboratorium kodu dowiesz się, jak wdrożyć AlloyDB Omni w klastrze GKE, wdrożyć model I w tym samym klastrze, zarejestrować model w AlloyDB Omni i sprawić, aby działały razem
Przyspieszanie wysyłania zapytań analitycznych za pomocą silnika kolumnowego w AlloyDB Omni.
Z tego ćwiczenia w Codelabs dowiesz się, jak wdrożyć AlloyDB Omni w maszynie wirtualnej Compute, wczytywać dane i używać AlloyDB Columnar Engine do zwiększenia wydajności
Wprowadzenie do wektorów dystrybucyjnych z AlloyDB AI
Z tego ćwiczenia w Codelabs dowiesz się, jak używać AlloyDB AI w połączeniu z wyszukiwaniem wektorowym i tworzyć indeksy danych wektorowych
Omówienie funkcji Gemini Code Assist Standard i Enterprise w edytorze Google Cloud Shell dla deweloperów
W tym ćwiczeniu skorzystasz z Gemini Code Assist, czyli opartej na AI usługi wspomagającej w Google Cloud. Poznasz sposoby korzystania z Gemini Chat i funkcji wstawiania kodu, aby generować kod, interpretować kod i wykonywać inne zadania związane z kodowaniem przy użyciu AI.
Pierwsze kroki z wektorami dystrybucyjnymi w Cloud SQL for PostgreSQL
W tym laboratorium programistycznym dowiesz się, jak używać integracji Cloud SQL AI w połączeniu z wyszukiwaniem wektorowym i tworzyć indeksy danych wektorowych.
Wyświetlanie obrazów AVIF
Obrazy stanowią ponad 60% bajtów potrzebnych do wczytania strony internetowej. Dzięki AVIF możesz zmniejszyć rozmiar obrazów i przyspieszyć wczytywanie witryny. AVIF to format obrazu pochodzący z bitream wideo AV1. Format AVIF został opracowany z
Jak utworzyć połączenie Private Service Connect dla AlloyDB
Z tego Codelab dowiesz się, jak utworzyć usługę Private Service Connect dla AlloyDB
Tworzenie narzędzia do podsumowywania filmów w YouTube na podstawie Gemini
Z tego ćwiczenia w Codelabs dowiesz się, jak utworzyć narzędzie do streszczania filmów na podstawie Gemini, które może streszczać filmy w YouTube.
Jak utworzyć Private Service Connect dla Cloud SQL
Z tego ćwiczenia dowiesz się, jak utworzyć usługę Private Service Connect dla Cloud SQL
Instalowanie i konfigurowanie Toolboxa do zastosowań generatywnej AI i agentów w AlloyDB
W tym laboratorium programistycznym utworzysz i wdrożysz narzędzia dla aplikacji do prognozowania cen, która korzysta z AlloyDB i funkcji generatywnej AI za pomocą usługi GenAI Toolbox for Databases.
Praktyczne techniki obserwowalności w przypadku aplikacji generatywnej AI w języku Go
Aplikacje korzystające z generatywnej AI wymagają możliwości obserwacji jak każda inna aplikacja. Czy w przypadku generatywnej AI wymagane są specjalne techniki obserwowalności? W tym laboratorium utworzysz prostą aplikację wykorzystującą generatywną
Tworzenie za pomocą Firebase Data Connect
Dowiedz się, jak tworzyć aplikacje internetowe za pomocą Firebase Data Connect i GraphQL
Codelab – tworzenie kontekstowej aplikacji do rekomendowania asan jogi za pomocą Firestore, wyszukiwania wektorowego, Langchain i Gemini (wersja w Pythonie)
To ćwiczenie w Codelab poprowadzi Cię przez proces tworzenia aplikacji do rekomendowania pozycji jogi opartej na wiedzy. Aplikacja odpowiada na pytania użytkowników, sugerując odpowiednie pozycje jogi. Dowiesz się, jak utworzyć kolekcję Firestore zawierającą pozycje jogi na podstawie zbioru danych Hugging Face, skonfigurować wyszukiwanie wektorów w Firestore i zintegrować wszystko z aplikacją Flask.
Praktyczne techniki obserwowalności w przypadku aplikacji generatywnej AI w języku JavaScript
Aplikacje korzystające z generatywnej AI wymagają możliwości obserwacji jak każda inna aplikacja. Czy w przypadku generatywnej AI są wymagane specjalne techniki obserwowalności? W tym module utworzysz prostą aplikację wykorzystującą generatywną AI.
Praktyczne techniki obserwowalności w przypadku aplikacji generatywnej AI w Pythonie
Aplikacje korzystające z generatywnej AI wymagają możliwości obserwacji jak każda inna aplikacja. Czy w przypadku generatywnej AI są wymagane specjalne techniki obserwowalności? W tym module utworzysz prostą aplikację wykorzystującą generatywną AI.
Praktyczne techniki obserwowalności w przypadku aplikacji generatywnej AI w języku Java
Aplikacje korzystające z generatywnej AI wymagają możliwości obserwacji jak każda inna aplikacja. Czy w przypadku generatywnej AI są wymagane specjalne techniki obserwowalności? W tym module utworzysz prostą aplikację wykorzystującą generatywną AI.
Building Applications in the AI Era
W tym module użyjesz produktów generatywnej AI od Google do tworzenia infrastruktury w Google Cloud przy pomocy Gemini Cloud Assist, wysyłasz zapytania do danych BigQuery za pomocą funkcji SQL w Data Canvas, piszesz kod w notatnikach Jupyter w Colab
Utwórz kontekstualną aplikację do rekomendowania pozycji jogi za pomocą Firestore, wyszukiwania wektorowego i Gemini 2.0.
W tym ćwiczeniu w Codelab utworzysz kontekstową aplikację do wyszukiwania pozycji jogi, która odpowiada na pytania użytkowników o jogę. Pozwala też na wykonywanie zadań administracyjnych, takich jak tworzenie i edytowanie pozycji jogi.