Рекомендации Facebook / Недавняя активность зависает в браузере и работает очень медленно
Я использую плагин "Рекомендации" на своем сайте, и он загружается очень медленно, в основном с Firefox.
Я считаю, что большинство плагинов FB, кажется, имеют эту проблему. Возможно, из-за созданного ими iFrame плагином создается много данных.
Было бы лучше сделать мой собственный JS Verson?
Если да, есть ли у кого-нибудь указатели для доступа к тем же данным через вызов FQL/AJAX?
Следуя комментариям ниже, я решил объяснить, что именно я делаю, я загружаю плагины динамически, используя скрипт ниже. В настоящее время отображается только плагин с рекомендациями, но в конечном итоге все перечисленные будут включены.
ОДНАКО... Я заметил эту проблему даже при непосредственном добавлении плагина на страницу.
$ (document).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 ответ
Пожалуйста, не кладите window.fbAsyncInit = function () {
внутри JQuery $(document).ready(function () {
так как это приведет к смешанным результатам в разных браузерах при разных условиях. Смотрите мой недавний ответ здесь:
Я также видел проблемы с $('.googlePlus').html('<g:plusone
в IE8. Смотрите: Добавление кнопки Google +1 после загрузки страницы в IE 8