Tous les UIWebViews partagent un seul thread Web. Lorsque l'un d'eux est init
-ed, retiré de la vue d'ensemble, etc., il tentera de bloquer le fil d'âme du fil principal de manière bloquante, bloquant ainsi temporairement la boucle d'exécution du fil principal.Évitez que le thread principal ne se bloque lorsque UIWebView tente de verrouiller de manière bloquante le thread Web
Si le fil de trame est occupé, par ex. tout en faisant un long XMLHttpRequest
synchrone, cela peut bloquer le thread principal pendant une longue période.
Y at-il un moyen d'éviter cela?
Si je pouvais modifier UIWebView, je ferais simplement une tentative de blocage non bloquante, mais évidemment ce n'est pas le cas, donc je cherche d'autres idées intelligentes.
Alors, que se passe-t-il dans MobileSafari si une page effectue un XHR synchrone lent? Je ne l'ai pas testé, mais est-ce que ça gèle ou quoi? –
Il acquiert le verrou du thread Web pendant la durée de la demande. Si le thread principal tente alors d'acquérir le verrou, il devra attendre la fin de la requête (ou timeout) – rpetrich
Aussi, je dois mentionner que si vous utilisez un XHR asynchrone, ce ne sera plus un problème (par exemple xhr. open ('GET', url, true)) – rpetrich