
웹킷 기반 브라우저를 통해 보는 웹사이트에서 이미지가 일관되지 않게 로드되는 문제가 꽤 오랫동안 발생했습니다. 일관성이 없다는 것은 한 번의 시험 실행에서 하나의 이미지 또는 여러 이미지가 성공적으로 로드되지만 다른 이미지는 로드되지 않는다는 의미입니다. 동일한 웹 사이트를 다시 시험 실행하면 이전에 로드되지 않았던 이미지가 갑자기 로드됩니다. 이전에 로드되었던 이미지는 갑자기 로드되지 않습니다. 이 동작은 너무 비선형적이어서 문제의 원인을 찾는 데 극도로 어려움을 겪고 있습니다. 이 문제는 jumanji
, dwb
및 와 같은 브라우저에서 재현 가능하다는 것을 알았습니다 vimperator
. 나는 이 모든 브라우저의 공통점이 webkit
. 웹페이지를 반복적으로 다시 로드하면 모든 리소스가 올바르게 로드되는 결과가 나타나는 경우가 있습니다.
다음은 설명된 동작의 스크린샷입니다(웹킷 기반의 luakit
).
보시다시피 이는 여기서 일반적인 동작을 보여주는 두 개의 실패한 이미지입니다. Firefox나 Chrome(각각 gecko
과 를 사용한다고 생각함 blink
) 과 같은 브라우저에서는 이 문제를 재현할 수 없습니다 . 이미지/요소를 마우스 오른쪽 버튼으로 클릭하고 새 창에서 열면 문제 없이 이미지를 볼 수 있습니다. 저는 Arch Linux 커널 3.12.9-1-ck를 실행하고 있습니다. 무슨 일이 일어나고 있는지에 대한 도움이나 통찰력을 주시면 감사하겠습니다. 감사합니다.
업데이트:Luakit에서 콘솔을 디버깅하여 요소로 검사할 때 모든 깨진 이미지는 다음과 같은 일반적인 형식을 출력합니다.
GET [web address here] Cannot resolve hostname [domain here]
업데이트 2:를 통해 내 시스템(데비안 기반)에 있는 luakit
virtualbox 설치에 설치를 시도했는데 흥미로운 결과가 나왔습니다. 해결되지 않은 호스트 이름/깨진 이미지/실패한 리소스에 대한 증상은 없습니다. 이 가상 환경에서는 탐색 속도도 비교적 빠릅니다.kali-linux
apt-get install luakit
해결책:
@harrymc가 제안한 제안(Google 공개 DNS 사용)에 따라 페이지 로딩 불량의 모든 증상이 완전히 사라졌습니다. @harrymc에 따르면 이는 결함이 있거나 느린 DNS 및/또는 잘못된 DNS 캐싱 전략 때문이라고 합니다. 보다 구체적으로, 이 문제의 원인은 열악한 DNS와 엔진에 내장된 다소 성급한 시간 초과 프로토콜로 보입니다 webkit
. 이 두 가지 요소는 재난의 비결입니다.
좀 더 개방적인 생각:
또 다른 결론은 Webkit 브라우저가 첫 번째 쿼리를 기억하는 대신 동일한 웹 사이트에 대해 여러 DNS 쿼리를 발행한다는 점에서 비효율적이라는 것입니다. 또 다른 결론은 ISP의 DNS 서버가 때때로 여러 병렬 요청을 처리할 수 없다는 것입니다(브라우저가 스레드를 통해 여러 이미지를 병렬로 처리하기 때문에). 아마도 이제 더 많은 클라이언트가 있지만 DNS 서버가 충분하지 않기 때문일 것입니다. --harrymc
답변1
에서Webkit 시간 초과로 인해 장기 실행 작업이 종료됩니다.:
우리는 하드 코딩된 숨겨진 시간 제한인 60초를 통해 모든 XML HTTP 요청을 제한하기로 한 Webkit 팀의 임의적 결정으로 인해 AIR 기반 RIA 중 하나의 상당 부분을 리팩터링/재코딩해야 했습니다. 이 결정은 AIR뿐만 아니라 Safari 및 Webkit 기반의 기타 브라우저에도 영향을 미칩니다.
이것이 반드시 문제와 관련된 것은 아니지만 Webkit에 하드코딩된 시간 제한이 있음을 나타냅니다.
문제가 Webkit의 시간 초과가 너무 짧은 것과 관련된 경우 빠른 연결을 사용하는 경우 이미지를 오래 기다리는 이유는 무엇입니까?
첫 번째 테스트로 DNS 서버를 다음으로 변경하는 것이 좋습니다. 구글 퍼블릭 DNS또는오픈DNS, 이것이 차이가 있는지 확인하세요. 그렇다면 문제는 ISP가 DNS에서 너무 느리거나 자체 캐시를 사용하는 것입니다.
또 다른 참조User-Agent에 의한 HTTP keepalive 비활성화:
Safari의 오랜 버그로 인해 연결 유지 연결이 부적절하게 재사용될 때 파일 업로드가 중단됩니다.
https://bugs.webkit.org/show_bug.cgi?id=5760
Apache에서는 Webkit에 대한 연결 유지 지원을 비활성화하면 이 문제가 해결됩니다.
Apache 웹 서버가 여전히 Webkit에 대한 연결 유지를 비활성화하는 경우(HTTP 영구 연결), 이는 각 이미지에 별도의 HTTP 연결이 필요하지만 Firefox와 Chrome은 페이지의 기존 연결을 사용하여 다시 연결하지 않고도 이미지를 다운로드할 수 있음을 의미합니다.
일반적으로 연결 설정이 매우 느리기 때문에 내장된 짧은 시간 제한과 결합되어 Webkit이 이미지와 관련된 문제를 설명할 수 있습니다.
귀하의 Webkit 브라우저에 브라우저 설정을 변경할 수 있는 기능이 있는지 궁금합니다.사용자 에이전트 신원 ?
예를 들어, vimperator에 대해 전혀 몰랐을 때 Google을 통해 플러그인을 찾았습니다.사용자AgentSwitcherLite.