2012-08-03 3 views
1

방금 ​​문제를 해결하고 해결 방법을 찾아야했습니다. 나는이 테스트 스크립트가 : 내가 2 개 탭에서 파이어 폭스 나 크롬에서 이것을 실행하면PHP 스크립트 동시 열기

<?php 
header('Content-type: text/plain'); 
$start = microtime(true); 
echo 'Start time: '.date('H:i:s')."\n"; 
sleep(5); 
echo 'End time: '.date('H:i:s')."\n"; 
echo 'Ellapsed time: '.(microtime(true)-$start)."\n"; 
?> 

을 동시에 내가 두 번째 탭에서 해당 스크립트는 첫 번째 스크립트가 작업을 완료 한 후에 만 ​​작동을 참조하십시오. IE9에서는 동시에 하나가 아닌 동시에 동시에 작동합니다. 문제가 어디에 있습니까? FF와 Chrome에서 스크립트가 동시에 작동하지 않는 이유는 무엇입니까? 크롬

1 탭

결과 :

Start time: 22:34:03 
End time: 22:34:08 
Ellapsed time: 4.9997730255127 

2 탭 :

Start time: 22:34:08 
End time: 22:34:13 
Ellapsed time: 5.0004279613495 
+0

많은 이유가있을 수 있으며 기회는 모두 끓습니다. 각 브라우저가 데이터를 다운로드하는 방식까지 하지만 IE에서 완벽하게 작동하는 것은 무언가이며, Chrome이나 FF가 아닌 IE는 일반적으로 아무것도 작동하지 않는 개념입니다. 각 브라우저의 내부 동작을 알지 못한다고 생각합니다. IE는 탭 기능이 정지하자마자 데이터로드를 시작합니다. FF와 Chrome은 탭을 열어 다운로드하기 전에 데이터를 다운로드 할 준비가 될 때까지 대기합니다. – chris

+0

IE에서 탭이 실행되기 전에 짧은 IE 다운로드가 준비되어 스크립트가 IE에서 더 빨리 렌더링된다는 것을 의미합니다. Chrome 및 FF에서 탭이 준비 상태에 도달하는 순간이 있습니다. 그러면 지연이 적용됩니다. – chris

+0

다른 참고로, 사용자가 페이지에 착륙하거나 사용자가 하나의 링크를 클릭하면 사용자를 행복하게 만들지 않을 것이며, 1 ~ 2 개의 새 창/탭이 열리 며, 모든 최신 브라우저에는 일반적으로 프로세스를 자동화하는 스크립트에서 팝업이 생성 된 경우 새 창을 열 수 없게하는 기본 상태. – chris

답변

0

대부분의 서버가 단일 사용자가 가질 수있는 얼마나 많은 연결과 같은 한계를 가지고있다. 페이지가 차례로로드 될 수있는 또 다른 이유는 세션 변수가 될 수 있습니다. 열려있는 세션을 사용중인 파일의 경우 첫 번째 페이지가 완전히로드되어야하며 두 번째 페이지가로드되기 전에 세션을 닫아야합니다.

위의 상황 중 어느 것도 다른 브라우저에서 다르게 반응하지 않으므로 문제는 브라우저와 관련이 있다고 생각합니다. 동일한 페이지를 두 개의 탭에로드하려고한다면 크롬과 파이어 폭스 버전이 요청을 순서대로 보내고 두 번째를 실행하기 전에 기다리는 것이 가장 좋습니다.

마음에 떠오르는 마지막 사항은 AJAX 호출의 경우 비동기식으로 수행하지 않으면 순서대로 실행되지만 처음 완료 될 때까지 기다리는 것입니다. 예를 들어 Google Analytics가 있습니다. 이제는 추적 코드가 비동기 적이므로 페이지로드 시간이 아프지 않습니다. 비동기 자바 스크립트에 대한 자세한 내용은 here

일반적으로 AJAX 요청을 결합하여 네트워크 정체 및 서버로드를 줄이는 것이 가장 좋습니다. 가능하다면 응용 프로그램이나 웹 사이트가 대중화되면 10000 개 요청이 항상 20000 개가 넘을 것이므로 결합하여 살펴 보시기 바랍니다.