2017-10-30 1 views
0

polyfill.io를 사용하여 polyfill 약속을하고 이전 클라이언트를 가져옵니다. 우리는 비동기의 사용을 권장하고 polyfill 서비스에서로드 태그에 속성을 연기polyfill 및 다른 스크립트에 설정을 지정하면 순서대로로드됩니다.

: their website 그들은 스크립트가 현대적인 코드를 실행하기 전에 완전히로드되었는지 확인하는 스크립트 로더 또는 콜백을 사용하는 것이 좋습니다 비 차단 방식으로로드하면 폴리 필이로드가 완료되기 전이나 후에 자신의 코드가 실행되는지 여부를 알 수 없습니다.

당신이 당신의 자신의 코드를 실행하려고하기 전에 polyfills이 존재하고 있는지 확인하려면, 당신은 더 복잡한 스크립트 로더를 사용 https://cdn.polyfill.io 스크립트 태그에 onLoad 핸들러를 첨부하거나 단순히을 평가하기 위해 우리의 콜백 인수를 사용할 수 있습니다 이미 그들은 여전히 ​​브라우저가 '아무튼하지 않는 한 그들은 (문서에 나타나는 순서대로 비동기로드되는 것을 보장

그러나 두 스크립트에 defer을 설정하지 않아야 다음 polyfills이 가로드 글로벌 콜백 지원 연기)? 스크립트로드가 발생할 때 MDN documentationdefer 속성에 따라

<script src="https://cdn.polyfill.io/v2/polyfill.min.js" defer></script> 
<script src="modernscript.js" defer></script> 

답변

2

는 페이지 로딩 시간의 점을 정의합니다.

당신이 볼 수 citated 한 문서에서

:

은 당신이 당신의 자신의 코드를 실행하려고하기 전에 polyfills가 존재 확인하려면 당신은 https://cdn.polyfill.io에 onLoad 핸들러을 첨부 할 수 있습니다 스크립트 태그 (이 답변에 댓글로 지적) defer 스크립트 (1,실행됩니다 경우가 분명하게 볼 수 없기 때문에

) 가능한 브라우저 구현 차이점을 염두에 두십시오. 이러한 동작에 의존하는 것이 최선의 방법이 아닙니다.

  1. 처음 <script> 태그에 제안 onload 처리기를 추가하고이 내부 코드를로드하기 위해 동적 <script> 태그를 만들 수 (예를 들어 RequireJS) 일부 스크립트 로더를 사용하려면 :

    그래서 더 좋은 방법이 될 것입니다 처리기

  2. 코드를 Promise polyfill과 함께 묶거나 (수동으로 또는 webpack과 같은 번들을 사용하여) 단일 묶음으로로드하십시오.
+0

글쎄,이 답변을 보면 : https://stackoverflow.com/a/32413657/5918874 사람들은 연기가 실행 순서를 보장한다고 생각하는 것 같습니다. 또한 여기에서 : https://www.sitepoint.com/non-blocking-async-defer/. 필자는 polyfill.io 문서를 정확히 언급했는데, 그 이유는 반대라고 말하기 때문입니다 (그러나 그들은 비동기와 결합 된 지연에 대해서도 다르고 있습니다). 그리고 mozilla 문서는 그것에 대해 아무 말도하지 않습니다. 이상해. – vsjn3290ckjnaoij2jikndckjb

+0

정상적인 스크립트 로딩 프로세스가 동작을 차단하고, async' 스크립트가 비동기 적으로로드되고,'defer' 스크립트가로드를 시작할 때 다른 시점을 정의하는 것처럼 보입니다. polyfill.io 문서는'async'와'defer' 속성을 모두 추가 할 것을 제안합니다. 그래서'onload' 핸들러를 추가 할 것을 제안합니다. 나는 혼란을 피하기 위해 내 대답을 제거 할 것입니다. – Flying

+0

댓글의 정보를 포함하도록 답변을 업데이트하기로했습니다. 스펙에는 명확한 동작 정의가 없으므로 이러한 유형의 로딩에 의존하지 않고 대신 다른 대안을 고려하는 것이 좋습니다. – Flying