Błąd internetu

Błąd ERR_BLOB_DEREFERENCED_WHILE_BUILDING – przyczyny i naprawa

Mateusz Sobociński
Autor: Mateusz Sobociński - CEO & Red. Nacz. @ asMAX
5 min. czytania

Błąd ERRBLOBDEREFERENCEDWHILEBUILDING występuje najczęściej w środowiskach webowych (np. przeglądarkach opartych o Chromium), gdy przetwarzany jest obiekt typu Blob i dochodzi do jego dereferencji w trakcie budowania — czyli mechanizm lub aplikacja próbuje odwołać się do blobu, który został już usunięty lub nie jest dłużej dostępny, zanim zakończy się proces jego budowy.

Poniżej znajdziesz kompletny poradnik — od wyjaśnienia, przyczyn, przez szczegółowe instrukcje naprawy dla webmasterów/deweloperów, jak i użytkownika końcowego.

Wyjaśnienie błędu

Blob (Binary Large Object) to reprezentacja pliku binarnego w JavaScript, np. pliku przesyłanego, generowanego dynamicznie lub przetwarzanego na stronie.

ERRBLOBDEREFERENCEDWHILEBUILDING oznacza, że podczas przetwarzania blobu (pobierania, zapisywania, przesyłania), został on doreferencjonowany — odłączony od źródła lub usunięty — zanim zakończono cały proces.

Przyczyny błędu

Najczęstsze przyczyny:

  • Przedwczesne usunięcie blobu przez kod JavaScript przed zakończeniem operacji na nim (np. upload, download, przetwarzanie).
  • Błąd synchronizacji (race condition) — kod próbuje korzystać z blobu podczas, gdy ten nie został jeszcze ukończony lub jest w trakcie tworzenia.
  • Równoczesny dostęp do blobu przez wiele wątków/komponentów i zakończenie życia blobu przez jeden z nich.
  • Zamknięcie źródła (np. streamu lub pliku) przed zakończeniem buildowania blobu.
  • Problemy w silniku przeglądarki (rzadziej — bug w Chromium lub WebKit obsługującym blob URL).

Instrukcje naprawy

Poniżej szczegółowe kroki diagnostyczne i naprawcze dla obu grup: webmaster/web deweloper oraz użytkownik końcowy.

Dla webmastera/web dewelopera

  1. Przejrzyj kod JavaScript obsługujący blob
  • Upewnij się, że blob/objekt nie jest zwalniany (np. przez URL.revokeObjectURL) ani nie zostaje ustawiony na null przed zakończeniem wszelkiego przetwarzania.

  • Przykład — nieprawidłowy (może powodować błąd):

     let blobUrl = URL.createObjectURL(blob); downloadFile(blobUrl); URL.revokeObjectURL(blobUrl); // Za wcześnie! 
  • Poprawny:

     let blobUrl = URL.createObjectURL(blob); downloadFile(blobUrl); // Poczekaj na zakończenie działania, np. po zamknięciu dialogu pobierania setTimeout(() => { URL.revokeObjectURL(blobUrl); }, 5000); // lub po konkretnym evencie 
  1. Unikaj wyścigów (race conditions) –
  • Nie twórz nowych blobów ani nie podmieniaj referencji podczas trwania operacji.
  • Jeśli używasz asynchronicznych funkcji (np. fetch().then(...), async/await), zachowuj referencję na blob do czasu ukończenia zadania.
  1. Sprawdzaj żywotność blobów
  • Gdy blob jest budowany w odpowiedzi na backend API lub z wejścia użytkownika, zapewnij właściwą obsługę błędów, np.:

     try { // ... kod pobierający blob } catch (e) { // Błąd: blob już niedostępny showError("Plik już nie istnieje lub został usunięty."); } 
  1. Diagnozuj w konsoli deweloperskiej –
  • Sprawdź, w którym momencie blob staje się niedostępny. Używaj breakpointów i logów.
  • Sprawdź, czy inne wątki/skrypty nie modyfikują/zamykają blobu równocześnie.
  1. Testuj w najnowszych wersjach przeglądarek
  • Część błędów mogła być naprawiona w nowszych wersjach Chromium/Chrome/Edge.

Dla użytkownika końcowego

  • Odśwież stronę — może to odnowić sesję blobu i naprawić problem, gdy blob powstał w nieaktualnej sesji.
  • Sprawdź aktualizacje przeglądarki oraz wtyczek — czasem błąd to efekt konfliktu rozszerzenia/addona.
  • Wyczyść cache przeglądarki — stare odnośniki blob mogą zalegać i powodować błędy.
  • Spróbuj innej przeglądarki — aby potwierdzić, że błąd nie leży w konkretnej implementacji.
  • Skontaktuj się z obsługą serwisu — jeśli błąd się powtarza, powiadom administratora strony, podając nazwę pliku i czynność, która wywołała błąd.

Dodatkowe informacje

  • W silniku Chromium, kod źródłowy obsługujący blob implementuje obsługę tego błędu przez zwrócenie ERR_UNEXPECTED w sytuacji, gdy blob przestaje istnieć/budować się podczas operacji.
  • Błąd tego typu jest często związany z optymalizacjami wydajności (np. praca na wielu wątkach, przetwarzanie plików na żądanie), dlatego poprawna synchronizacja i kontrola żywotności blobów są kluczowe.
  • Stan wyścigu (race condition) to sytuacja, gdy kilka procesów/operacji próbuje jednocześnie uzyskać dostęp lub modyfikować ten sam zasób — w tym wypadku blob.

Słownik pojęć

  • Blob – Binary Large Object (duży, binarny obiekt: plik, dane multimedialne) reprezentowany w JS.
  • Dereferencja – „Odłączanie” obiektu, czyli sytuacja, gdy obiekt przestaje być dostępny przez referencję w kodzie.
  • Race condition (stan wyścigu) – Błąd współbieżności, gdy kolejność wykonania nie jest gwarantowana i powoduje błędy logiczne.
  • URL.createObjectURL(blob) – Tworzy tymczasowy URL prowadzący do blobu.
  • URL.revokeObjectURL(url) – Unieważnia utworzony URL blobu.

Podsumowanie najważniejszych kroków (dla webmastera):

  • Nie usuwaj referencji do blobu zbyt wcześnie (przed końcem operacji).
  • Diagnosticuj i eliminuj race conditions w kodzie pracującym z blobami.
  • Sprawdzaj i obsługuj błędy asynchroniczne/wyjątki AJAX/Fetch/.then() oraz zdarzenia użytkownika.
  • Informuj użytkownika końcowego, gdy plik został już usunięty lub sesja wygasła.

Właściwa obsługa tych scenariuszy pozwala niemal całkowicie wyeliminować błąd ERRBLOBDEREFERENCEDWHILEBUILDING w praktyce.

Podziel się artykułem
CEO & Red. Nacz. @ asMAX
Obserwuj:
Ex-redaktor w GW (Technologie) i ex-PR w koreańskim start-upie technologicznym. Absolwent Imperial College Business School (MBA) i Politechniki Warszawskiej. Od 2025 CEO i redaktor naczelny w asMAX.
Brak komentarzy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *