Различные способы загрузки JS SDK - PullRequest
0 голосов
/ 15 февраля 2012

«Официальный» способ загрузки SDK, предложенный документацией FB, таков:

<script>(function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=APP_ID";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

Тем не менее, я уже видел, как это сделано так:

<script src="http://connect.facebook.net/en_US/all.js"></script>
...
FB.init(APP_ID, true, true, true);

Какая разница (на практике) между этими двумя?

Я пишу GWT-приложение, которое использует социальные плагины. Как лучше всего загрузить его?

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

разница в том, что первый подход асинхронный, а второй синхронизирован.если вы хотите, чтобы страница загружалась / рендерилась быстрее, и вы можете использовать для этой цели fb sdk (показывая страницу), тогда переходите к первому.

1 голос
/ 15 февраля 2012

Я бы предложил первый метод, поскольку он будет загружать библиотеку асинхронно, помогая предотвратить «блокировку» остальной части загрузки вашей страницы. Например, если вы использовали второй метод, а Facebook не работал или медленно реагировал на передачу файла JS, вся ваша страница могла бы потенциально «сидеть там», пока она пыталась загрузить скрипт.

Однако, с учетом всего сказанного, по моему опыту, у меня иногда случались «странности» с асинхронной версией, и в итоге я использовал второй метод (синхронный) и убедился, что это был самый последний шаг перед моим </body> на странице.

1 голос
/ 15 февраля 2012

Я не работал напрямую с API Facebook, хотя я написал много GWT, интегрированный с JavaScript уровня страницы

Взгляните на класс ScriptInjector - один метод позволяет вам вставить строку, другой - внедрить скрипт из URL и получить обратный вызов при его загрузке.

Еще одна мысль: JSNI позволяет вам вызывать javascript из вашего Java-приложения. Если вы можете включить этот тег сценария при загрузке страницы, вы можете вызвать это FB.init из метода Java:

private native void nativeFbInit(String appId) /*-{
    $wnd.FB.init(appId, true, true, true);
}-*/;
...