Рекомендации Facebook / Недавняя активность зависает в браузере и работает очень медленно - PullRequest
0 голосов
/ 20 марта 2012

Я использую плагин «Рекомендации» на своем сайте, и он загружается очень медленно, в основном с Firefox.

Я считаю, что большинство плагинов FB, похоже, имеют эту проблему. Возможно, из-за созданного ими iFrame плагином создается много данных.

Было бы лучше сделать мой собственный JS Verson?

Если так, есть ли у кого-нибудь указатели для доступа к тем же данным через вызов FQL / AJAX?

Следуя комментариям ниже, я решил объяснить, что именно я делаю, я загружаю плагины динамически, используя скрипт ниже. В настоящее время отображается только плагин с рекомендациями, но в конечном итоге будут включены все упомянутые.

ОДНАКО ... Я заметил эту проблему даже при непосредственном добавлении плагина на страницу.

$ (документ) .ready (function () { addFBelements (); });

 //==== THIS GENERATES SOCIAL ELEMENTS ====
 function addFBelements() {
     window.fbAsyncInit = function () { // sets up asynchronous loading of FB elements
         FB.init({ // initialise FB
             appId: 'MYAPPID',
             status: true, // check login status
             cookie: true, // enable cookies to allow the server to access the session
             xfbml: true,  // parse XFBML
             oauth: true
         });
     };

     (function () {
         if ($("#fb-root").length <= 0) {
             $('body').prepend('<div id="fb-root"></div>'); // add FB div to top of page if not already there
         };
         var e = document.createElement('script'); // load the Facebook Javascript file
         e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
         e.async = true;
         document.getElementById('fb-root').appendChild(e);
         $.getScript(document.location.protocol + '//apis.google.com/js/plusone.js'); // Load Google Plus files
         $.getScript(document.location.protocol + '//platform.twitter.com/widgets.js'); // load Twitter files
         renderButtons(); // render the buttons in the page
     } ());
 };
 // ends setting up of FB/Twitter etc links and JS files

 // add Social elements to the pages where required with correct sharing URLs
 function renderButtons() {
     var linkUrl = window.location.href;

     if ($('.googlePlus').length > 0) {
         $('.googlePlus').html('<g:plusone href="' + linkUrl + '" size="medium" style="float:right"></g:plusone>');
     };
     if ($('.fbLike').length > 0) {
         $('.fbLike').html('<fb:like send="false" href="' + linkUrl + '" layout="button_count" width="80" show_faces="false" font="arial"></fb:like>');
     };
     if ($('.fbSend').length > 0) {
         $('.fbSend').html('<fb:like send="false" href="' + linkUrl + '" layout="button_count" width="80" show_faces="false" font="arial"></fb:like>');
     };
     if ($('.tweet').length > 0) {
         $('.tweet').html('<a href="http://twitter.com/share" data-url="' + linkUrl + '" class="twitter-share-button" data-count="none" data-via="hartnollguitars">Tweet</a></span>')
     };
     if ($('.fbComments').length > 0) {
         $('.fbComments').html('<fb:comments href="' + linkUrl + '" num_posts="3" width="640"></fb:comments>');
     };
     if ($('.fbRecommend').length > 0) {
         $('.fbRecommend').html('<img style="border: none" alt="" src="images/like_us_home.png"><fb:activity recommendations="true" border_color="#000000" font="arial" colorscheme="dark" header="false" height="400" width="220" site="www.hartnollguitars.co.uk"><span>');
     };

 };
 // == END OF SETTING UP SOCIAL NETWORKING ELEMENTS. ====

Вы можете видеть, что скрипт устанавливает все мои элементы FB / Twitter и т. Д. И вставляет их в элементы с соответствующими классами, где они присутствуют.

Элемент appId не является обязательным для рассматриваемых целей, но у меня также есть раздел «События», в котором отображаются мои события FB и имя входа в FB, для обоих мне нужен appId для проверки.

(просто пытаюсь объяснить, что хотя показывать рекомендации громоздко, он предназначен для гораздо большего!)

1 Ответ

0 голосов
/ 21 марта 2012

Пожалуйста, не помещайте window.fbAsyncInit = function () { внутри jQuery's $(document).ready(function () {, так как это приведет к смешанным результатам в разных браузерах при разных условиях. Смотрите мой недавний ответ здесь:

http://facebook.stackoverflow.com/questions/9788273/fblogin-button-not-showing-up-in-firefox-ie-or-opera-but-works-fine-in-chro/9792371#9792371

Я также видел проблемы с $('.googlePlus').html('<g:plusone в IE8. См .: Добавление кнопки Google +1 после загрузки страницы в IE 8

...