[Из песочницы] Оптимизируем страницу при помощи собственных социальных кнопок
Здравствуйте, Польза в предоставлении пользователям возможности поделиться вашей ссылкой в социальных сетях очевидна. Однако, жертвовать производительностью и временем загрузки страницы тоже не хочется.
В статье рассматриваются доступные, готовые для использования социальные кнопки, проблемы с которыми мы столкнулись при их использовании, и описан простой способ как сделать свои кнопки для нескольких популярных социальных сетей.
Готовые решения социальных кнопокКогда мы начинали делать наш продукт, мы серьезно не задумывались по поводу шаринг-кнопок на сайт. Просто взяли готовые сервисы и добавили на страницы: pluso.ru — для русской версии addthis.com — для английской версии Но со временем мы заметили, что с ними не все так гладко. А именно: лишний трафик не всегда корректно работает через ajax реклама долго загружаются или не загружаются вообще поедают память браузера, особенно когда контент постоянно обновляется через ajax Поэтому мы стали искать другие варианты предоставления пользователям поделиться нашей ссылкой в социальных сетях.На github есть много готовых решений, например:
По сути, мы могли на этом остановиться, но было решено сделать свой вариант, так как нам всего лишь надо 5 различных шаринг-кнопок (VK, Facebook, Twitter, Google+, LinkedIn + отправка на электронную почту) без каких-либо наворотов. Как известно, хочешь сделать хорошо — сделай сам.Создание собственных кнопок Так как на сайте мы уже использовали шрифты с социальными иконками (для кнопок авторизации через соц сети и для ссылок на группы) то мы просто взяли их — дополнительной памяти на них не требуется.Так же можно воспользоваться готовыми элементами, например для bootstrap — lipis.github.io/bootstrap-social/ который использует Font Awesome (Font Awesome сам по себе очень большой, по этому если Вам надо только определенные иконки, то советуем выбрать только те которые нужны через fontello.com/)
Рассмотрим код на JS (приведена часть для Вконтакте, в конце статьи есть ссылка на полный пример со всеми социальными кнопками, которые нам были нужны).
Итак, сначала создадим объект и добавим функцию инициализации, в которой укажем классы объекта для запуска события и данных, которыми будем делиться и добавим к каждому объекту на странице eventListener:
var cubeShare = { title: 'CubeCamp.ru', width: 600, height: 400,
init: function () { var share = document.querySelectorAll ('.share-btn'); for (var i = 0, l = share.length; i < l; i++) { var url = share[i].getAttribute('data-url') || location.href, title = share[i].getAttribute('data-title') || '', desc = share[i].getAttribute('data-desc') || '', el = share[i].querySelectorAll('a');
for (var a = 0, al = el.length; a < al; a++) { var id = el[a].getAttribute('data-id'); if(id) this.addEventListener(el[a], 'click', {id: id, url: url, title: title, desc: desc}); } } } }; Далее, опишем eventListener, добавив его к уже созданному классу: addEventListener: function(el, eventName, opt) { var _this = this, handler = function() { _this.share(opt.id, opt.url, opt.title, opt.desc); };
if (el.addEventListener) { el.addEventListener (eventName, handler); } else { el.attachEvent ('on' + eventName, function () { handler.call (el); }); } } Наконец, допишем открытие popup-окна, в которое загрузим собственно страницу, которую предоставляют нам социальные сети для шаринга в них. Для добавления других сетей, нужно дописать в switch соотвественно нужную нам страницу: share: function (id, url, title, desc) { url = encodeURIComponent (url); desc = encodeURIComponent (desc); title = encodeURIComponent (title);
switch (id) { case 'vk': this.popupCenter ('https://vk.com/share.php? url=' + url + '&description=' + title + '. ' + desc, this.title, this.width, this.height); break;
default: break; }; },
popupCenter: function (url, title, w, h) { var dualScreenLeft = window.screenLeft!== undefined? window.screenLeft: screen.left; var dualScreenTop = window.screenTop!== undefined? window.screenTop: screen.top;
var width = window.innerWidth? window.innerWidth: document.documentElement.clientWidth? document.documentElement.clientWidth: screen.width; var height = window.innerHeight? window.innerHeight: document.documentElement.clientHeight? document.documentElement.clientHeight: screen.height; var left = ((width / 2) — (w / 2)) + dualScreenLeft; var top = ((height / 3) — (h / 3)) + dualScreenTop;
var newWindow = window.open (url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
if (window.focus) { newWindow.focus (); } } Если вы используете jQuery, то инициализировать можно так: $('.share-btn a').on ('click', function () { var id = $(this).data ('id'); if (id) { var data = $(this).parent ('.share-btn'); var url = data.data ('url') || location.href, title = data.data ('title') || '', desc = data.data ('desc') || ''; cubeShare.share (id, url, title, desc); } }); или без jQuery: cubeShare.init (); Так же можно вызвать шаринг-кнопку таким образом: cubeShare.share (id, url, title, desc); где: id — одно из значений fb, vk, gb, tw, in, mail url — полная ссылка title — заглавие desc — описание Пример HTML кода для кнопки Вконтакте:
Значения в блоке: Класс share-btn Атрибут data-url — полная ссылка. Если нету то берет значение из браузера (location.href) Атрибут data-title — заглавие (не обязательно) Атрибут data-desc — описание (не обязательно) Полный примерСтатистика и выводы Addthis — примерно 11 запросов на сервис и примерно 200 кб трафика (с кешем примерно 2.6 кб) Pluso — примерно 9 запросов на сервис и примерно 45 кб трафика (с кешем примерно 1.4 кб) Рассмотренное в статье решение — 3.5 кб сам скрипт (с кешем примерно 200 б) + иконки на ваше усмотрение. Даже такая мелочь как социальные кнопки могут серьезно влиять на скорость загрузки страницы, особенно если пользователь использует данные через мобильную сеть. Потратив небольшое время на создание собственных кнопок вы увеличите скорость, получите возможность создать свой дизайн и приктрутить дополнительный функционал, например статистику. И никаких лишних запросов на сторонние сервисы + не надо волноваться если вдруг они не загрузятся.Список ссылок на шаринг самых популярных социальных сетей, для тех кому лень искать