В данной статье я поделюсь с вами моими наработками, которые появлялись по мере поступления задач связанных с разработкой Callback Виджета.

После того как у нас получилось выгрузить скрипты и стили на сайт, а также отобразить большое количество разметки испульзуя Angular.js в Первой части нашего цикла статьей на Хабрхабре у нас появлись новые задачи требующие решения!

Содержание статьи:

1. JSONP параметры и метод param

2. Convert img to base64

3. Настройка CDN на Amazon CloudFront

4. Шрифты вместе с FontForge

5. Angular и ng-keypress

6. Мобильная версия Виджета

7. CRON задачи

8. Найденный SEO Словарь

Поехали!


#1 JSONP параметры и метод param

При передаче кроссдоменного запроса JSONP как и любого другого запроса требуется передача параметров, а простая передача объекта нам в данной ситуации не подойдёт, нужно передавать как GET параметры (вида ?name=ferret)! Поскольку мы не используем jquery, а соответственно и метод $.param я решил написать свой метод param и выглядит он следующим образом:

$scope.param = function (obj) {
    var parts = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
        }
    }
    return parts.join('&');
};


Замечательно, мы научились передавать параметры, идём дальше!

#2 Convert img to base64

При render нашей html разметки встаёт вопрос, а как нам вывести картинки и с учётом, что мы хотим это сделать без лишних запросов на другие адреса и без лишней нагрузки на производительность! И тут я нашёл замечательное решение, перекодировать наши изображение в base64. Так же есть замечательный сервис, который всё это делает онлайн base64-image. После загрузки изображения он выдаёт нам уже подготовленные под вставку в стили строки:

<style type="text/css">
div.image {
	width:            100px;
	height:           100px;
	background-image: url('data:image/png;base64,iVBORw0KGgoAAA............'); /* (Сократил длину) */
}
</style>


Рекомендуется это использовать для небольших изображений, поскольку для больших это будет много весить!

#3 Настройка CDN на Amazon CloudFront

Возникла задача: использовать CDN для более быстрой загрузки наших скриптов и стилей с любого сайта.
Статьями богат данный сервис, но мне почему-то хотелось побольше наглядных и визуальных примеров. Посмотрите что из этого вышло:


Супер, теперь наши файлы на CDN! Возникли вопросы при загрузке шрифтов с CDN, почему-то нашёл инструкции относящиеся к другому сервису Amazon E3!

#4 Шрифты вместе с FontForge

Что такое FontForge? Это редактор шрифтов. При желании через данную программу вы сможете создать свой шрифт или просто открыть и посмотреть другие шрифты! Вот ссылка на дистрибутив FontForge
Для примера берем шрифты Font-Awesome (font-awesome.woff) и открываем их через FontForge. После открытия вы увидите таблицу символов, так и должно быть, но для того, чтобы увидеть изображения заложенные в шрифты, жмем в меню Кодировка->Компактная и получаем таблицу картинок:

FontForge
Просто круто!

#5 Angular и ng-keypress

Используя

ng-keypress=onKeyPressNumber($event) и ng-paste=onPaste($event)

Можно ограничить пользователя при вводе данных и запретить CTRL+V вставку:

$scope.onKeyPressNumber = function ($event) {
    if (!($event.keyCode > 47 && $event.keyCode < 58)) {
        $event.preventDefault();
    } else {
        //логика вашего приложения
    }
};
$scope.onPaste = function ($event) {
    $event.preventDefault();
};


Удобный подход!

#6. Мобильная версия Виджета

В этом пункте я хочу оставить ссылки на материалы, которые я использовал при создании:

Media Queries for Standard Devices
Media Query Snippets
Тестирование для мобильных устройств

#7 CRON задачи — это просто

Нашёл неплохую статью, где можно узнать прочитать основы CRON задач ОСНОВЫ CRON, а так большинство хостеров предоставляют данную услугу в виде web-интерфейса с инструкцией, логом, настройками внутри!

#8 Найденный SEO Словарь

Блуждая по сайтам в поисках решения, нашёл очень любопытный словарь SEO терминов, возможно пригодится СЛОВАРЬ

Не хотел бы оставить без внимания ещё один ресурс, который позволяет вам просмотреть возвращаемые от сервера заголовки REDBot

Заключение:

Надеюсь данная статья сэкономит ваше время и нервы! Программируйте с удовольствием!

Комментарии (11)


  1. SerafimArts
    18.08.2015 23:50

    1) Браузеры, где нет XHR2 с Cors правилами уже мертвы (ну или почти что мертвы), думаю стоит принять на заметку.
    2) Для пункта 2 зачем нужен сервис, когда эта функция встроена в пых (см. base64_endode)?
    3) CDN — это конечно хорошо, но значительно лучше будет, если внешних ссылок не более 5ти-10ти их не использовать. Время резолва DNS может быть больше времени загрузки некоторой статики, а некоторые CDN бывают что падают (например амазон, до недавнего времени). Т.е. если упадёт сайт — результата не будет и так (и с CDN и без), а если упадёт CDN, то в одном случае всё будет ок (без CDN, ваш Кеп), в другом сайт будет мёртв.

    Это так, небольшие пометки на тему.


    1. DmitryMV
      18.08.2015 23:56

      1) + (SerafimArts, в первой статье я описывал сервис, который я разрабатываю (callback-виджет), который располагается на другом сайте, и у этого сайте может стоять запрет на CORS),
      2) Он нужен, когда мы используем его на другой странице у клиента (only js, css, html),
      3)+, я его использую только для двух файлов 1:css(здесь и использую base64 для картинок), 2:js(внутри него прячу ещё разметку)


  1. biophreak
    19.08.2015 00:04

    Вопрос: если изображения заэнкодить в base64 и загружать вместе со стилями, не будет-ли это блокировать рендеринг страницы (не уверен, как работает рендеринг в современных браузерах)?

    Я имею в виду, что base64 изображения в стилях будут весить прилично, соответственно браузер будет загружать css гораздо медленнее и парсить их дольше.
    И, соответственно, юзер получить «правильно» зарендеренную страницу позже.
    Как по мне, это плохой user-experience.
    Не проще-ли грузить изображения «асинхронно» JavaScript'ом? Ну или просто не энкодить бездумно все изображения на странице.


    1. DmitryMV
      19.08.2015 00:12

      Полностью согласен! Я в статье указал, что это рекомендуется использовать для маленьких изображений, у меня их 5 штук и это не сильно влияет на скорость загрузки и отрисовку css ;)


  1. Evgeny42
    19.08.2015 00:14
    +4

    Вы серьезно? Ну не надо скатываться до таких элементарных вещей, которые гуглятся за двадцать секунд и набиты интернетом. Ужасно бесполезная статья.


    1. DmitryMV
      19.08.2015 00:32
      -1

      Евгений, здесь действительно элементарные вещи, но у разных программистов уровень разный и я пытался выдать всё в комплексе под определенную задачу!


  1. Glebcha
    19.08.2015 19:48

    Скажите зачем вам для такой задачи Angular?
    Я бы вообще обошелся ванилью.


    1. DmitryMV
      20.08.2015 21:48

      Есть опыт разработки на Angular, поэтому и стал его использовать, а с Vanila не приходилось работать


      1. Glebcha
        20.08.2015 22:05

        … а с Vanila не приходилось работать

        Это вы сейчас на полном серьезе?
        Нет, я конечно понимаю, что Angular на старте предоставляет низкий порог вхождения, но вот так прямо признавать…
        То есть вы даже не знаете как написать запрос без всяких прокладок в виде методов любимого вами Angular или какого-нибудь жикверя? Я уже не спрашиваю про трех китов ООП в контексте JS.
        Извините за резковатый комментарий, но вам стоит забыть про использование фреймворков пока не решите хотя бы одну серьезную задачу на ванили.


        1. DmitryMV
          20.08.2015 22:25

          Дельный комментарий, но нельзя так строго судить автора за использование Angular и нативных методов JS (которых вы не видели), не хочу разводить холивар. С ООП знаком, а именно в скупе с TypeScript советую посмотреть, а так в зависимости от ситуации использую то, что сможет решить мои задачи!


          1. Glebcha
            21.08.2015 05:23

            Спасибо, но я буду лучше использовать ECMA2015 потому что уже совсем скоро мой код перестанет быть компилируемым, а в случае с TypeScript он таковым останется навсегда. Плюс мне не интересен ангуляр, который перешел на него во второй версии. А так да, смотрел еще давно, пробовал и не увидел каких-либо существенных преимуществ перед новой спекой с транспайлером.