Splash screen для ExtJS приложения

Чтобы вывести сообщение об ожидании, при старте приложения ExtJS, требуется выполнить следующие действия.

Находим index.html файл добавляем в него следующий код

Загрузка ExtJS…

Данное сообщение будет выводиться да начала готовности Ext.Application.

!!! Внимание. Требуется наследоваться от It.app.Application

В файле app.js указать следующий параметр:

Ext.application({
    name: 'ImportSubstitution',
    ***
    splashscreen: true,
    ***

Ну вот и все!
Как это реализовано?

В базовом классе произведены следующие изменения:

/*
 * Объект для хранения splashscreen переменной
 */
splashscreen: null,
constructor: function () {
       var startExtJSMessage = Ext.get('start-extjs');
       if (startExtJSMessage)
           startExtJSMessage.hide();
 
       if (this.splashscreen == true) {
           // start the mask on the body and get a reference to the mask
           this.splashscreen = Ext.getBody().mask('Загрузка приложения...', 'splashscreen');
       }
       this.callParent(arguments);
   },

/*
 * Инициализация splashscreen
 */
initSplashScreen: function () {
    if (typeof this.splashscreen == 'object') {
        this.splashscreen.destroy();
    }
},

onProfilesReady: function () {
    var me = this;
    me.loadRemotingApi(() => {
        me.initControllers();
        me.onBeforeLaunch();
        me.initSplashScreen();
        me.finishInitControllers();
    });
},

Динамическое дерево в ExtJS modern

В данной статье пойдет речь о том, как создать динамическое дерево (TreeList) в ExtJS Modern. Возможно данная реализация есть в «коробке», но я ее не нашел.

Стандарный компонент treelist отлично работает, если в хранилище находится например 100 записей, но если их будет тысяча или более? У меня получилось так, что мобильный телефон стал заметно тормозить. И после долгих поисков решения в интернете, решил доработать компонент.

Первое что я сделал — это создал наследник от treelist

Ext.define('MobileService.view.routeList.items.MobileTreeList', {
    extend: 'Ext.list.Tree',
    xtype: 'mobiletreelist',
 
    privates: {
// expand - стоит строить дочернии элементы или нет. По умолчанию null createItem: function (node, parent, expand) { var isRootItem = node.get('isRootItem'); // требуется для определения корневого элемента (те записи которые видит пользователь на первом уровне) if (!isRootItem && !expand) return null; return this.callParent(arguments); }, // переопределен. Основной метод для добавления дочерних элементов onNodeExpand: function (node) { var item = this.getItem(node); var childNodes = node.childNodes; for (i = 0, len = childNodes.length; i < len; ++i) { child = childNodes[i]; if (!this.itemMap[child.internalId]) { var _item = item.getOwner().createItem(child, item, true); if (_item) { this.itemMap[child.internalId] = _item; item.insertItem(_item, null); } } } this.callParent(arguments); } } });

Второе, создаем наследник от Ext.list.TreeItem

/*
 * для вывода дерево документов и строк я создал собственный класс для TreeItem
 */
Ext.define('MobileService.view.routeList.items.RouteListItem', {
    extend: 'Ext.list.TreeItem',
    xtype: 'routelistitem',
 
    privates: {
        updateNode: function (node) {
            if (node) {
                var me = this,
                    map = me.itemMap,
                    childNodes, owner, len, i, item, child;
                me.element.dom.setAttribute('data-recordId', node.internalId);
                if (!map) {
                    childNodes = node.childNodes;
                    owner = me.getOwner();
                    me.itemMap = map = {};
                    for (i = 0, len = childNodes.length; i < len; ++i) {
                        child = childNodes[i];
                        item = owner.createItem(child, me);
                        if (item) { // добавили проверку на возможность создания ветки
                            map[child.internalId] = item;
                            me.insertItem(item, null);
                        }
                    }
                }
                me.setExpanded(node.isExpanded());
                me.doNodeUpdate(node);
            }
        }
    }
});

Третье, создаем данные для хранилища

var root = {
    expanded: true,
    children: [
        {
            text: 'item1',
            isRootItem: true,
            children: [
                ....
            ]
        },
        {
            text: 'item1',
            isRootItem: true,
            children: [
                ....
            ]
        }
    ]
};
var store = Ext.create('Ext.data.TreeStore', {
            root: root
});

Наконец и сам компонент

                xtype: 'mobiletreelist',
                height: '100%',
                defaults: {
                    xtype: 'routelistitem'
                }

Вроде все, должно работать. Все дочернии элементы будут отрисовывать динамически

Ext JS 6.0.0.640

Сжатие JS-файлов

Для создание одного js-файлай из нескольких можно использовать утилиту от Google — Closure Compiler

  1. устанавливаем Java Runtime Environment version 7, если у Вас её нет
  2. Скачиваем файл compiler.jar
  3. Распаковываем в папку например e:\compressionjs
  4. Для примера создаем в этой папке js — файл (например simple.js)
  5. // A simple function.
    function hello(longName) {
      alert('Hello, ' + longName);
    }
    hello('New User');
    
  6. Выполняем команду java -jar compiler.jar —js sample.js —js_output_file hello-compiled.js

Примечание: Если нужно по всей папке собрать, то можно выполнить java -jar compiler.jar —js=»*.js» —js_output_file hello-compiled.js

Подробнее о командах можно узнать java -jar compiler.jar —help

Сборка мобильного приложения

Сборка мобильного приложения осуществляется под разные регионы. Список регионов нужно уточнить в исходном коде. Для этого перейти в папку resources/usersetting.Настройка приложения под регион.

  • открываем файл resources/config.json. Находим свойство theme и меняем на имя региона
  • далее переходим в файл resources/userseting/имя региона/config.json. В данном файле хранятся свойства которые были переопределены. Установить параметр debug=false
  • перейти в файл app.json. В свойстве requires установить пакет региона (если он есть, но если нет, то нужно убрать все пакеты, которые начинаются с ext_)
  • выполняем команду sencha app build native testing
  • после завершения команды на рабочем столе должна появиться *.apk

Автоматическая сборка.

В корне приложения должен находиться файл build.js. Он написан под nodejs. Команда для запуска выглядит следующим образом

node cmd build имя_региона

Если нужно собрать приложения для конечного заказчика, то требуется дополнительно указать параметр production

node cmd build имя_региона production

Внимание!!! При сборке приложения под Казань требуется поставить crosswalk. Для других регионов данный плагин должен быть удален

Сборка с crosswalk

crosswalk — это дополнительный плагин для работы мобильного приложения в android’e, где версия браузера «старая» (нет поддержки css3)

Переходим в каталог cordova

cd cordova

cordova plugin add cordova-plugin-crosswalk-webview

Далее возвращаемся обратно в каталог с приложением и запускаем
node cmd build [имя региона]

Примечание: Главное запомнить, что при сборке для региона, где crosswalk не требуется нужно удалить данный плагин
cd cordova

cordova plugin remove cordova-plugin-crosswalk-webview

Настройки

Список настроек для мобильного приложения

  • theme:string — наименование региона для сборки
  • debug:boolean — режим отладки
  • auth:any — настройки авторизации
    • enable:boolean — включена ли авторизация
    • autoAuth:any — автовход (применяется для тестирования, при сборке будет принудительно сброшен)
      • enable:boolean — включить автовход
      • login:string — логин
      • password:string — пароль
  • defaultDateTimeFormat:string — формат даты по умолчанию
  • APP_ID:number — идентификатор приложения (применяется для отладки)
  • multiUsers:boolean — позволяет использовать устройство несколькими пользователями
  • testIMEI:string — указывается идентификатор устройства для тестирования
  • autoSyncDetect:number — автоматическая синхронизация устройства через определенное время
  • syncDataByLastSyncDate:boolean — применять механизм синхронизации по последней дате
  • N_DefaultLatitude:number — координаты по умолчанию
  • N_DefaultLongitude:number — координаты по умолчанию
  • upgradeHourInterval :number- интервал проверки обновлений в часах
  • N_ValidDistance:number — коэффициент для определения дистанции до задания
  • N_DistanceRate:number — коэффициент для определения дистанции до задания
  • N_DistanceRound:number — коэффициент для настройки определения дистанции до задания
  • N_GeoInterval:number — интервал определения геокординат
  • useGeoInterval:boolean — использование механизма геокординат
  • singlePhotoForS_Person:boolean — позволяет использовать одно изображение для физ. лиц
  • serverDateTimeShow:boolean — показывать дату с корректировкой по серверу
  • offlineCount:number — количество потерь соединений с интернетом для перехода в offline
  • documentCheckModule:boolean — включить модуль проверки документов
  • geoCheckModule:boolean — включить механизм определения дистанции до задания
  • fileUploadMode:string — режим загрузки изображений
  • rdpConnect:boolean — позволяет просматривать данные с устройства
  • socket:boolean — включен механизм реального времени
  • modeoptions:string — режим подключения к сети
  • cmd:boolean — включить механизм командной строки
  • minBatteryPower:boolean — включить механизм проверки минимального заряда
  • transports:string[] — способ передачи данных для socket
  • chat:boolean — включить механизм чата
  • yandexHiddenMode:boolean — скрыть карту yandex
  • checkModuleBlank :boolean- модуль проверки бланков
  • upgradeAlternative:boolean — применять альтернативный способ обновления приложения. Применяется для внутренней сети
  • blockSize:number — размер блока передаваемого клиентом при ручном режиме
  • blockSizeSet:string — режим определения блока для передачи на сервер
  • offlineOnly:boolean — приложение всегда запускается в режиме offline
  • personOnly:boolean — только для физических лиц
  • baseColor:string — базовый цвет
  • textColor:string — цвет текста
  • imagecompress: boolean — сжимать изображения на клиенте. По умолчанию параметр true

Работа с командной строкой

Журнал изменений (check list)

node cmd checklist [команда]

Список команд:

add [описание] [тема]? [версия]? — добавление записи в check list

Пример: node cmd checklist «первая версия» * 1.69.2 или node cmd checklist «первая версия»

remove [версия] — удаление версии

get [версия]? — возвращается список версий или указанная запись

Пример: node cmd checklist get 1.69.2 или node cmd get

clear — очистка списка

Сохранение версии на сервере

node cmd checkversion — сохраняет текущию версию на сервере для дальнейшей обработки при ошибке

Сжатие данных

zip может одновременно и архивировать, и сжимать файлы; то есть вы можете сжать различные файлы, поместив их при этом в архив. Он известен еще с 1998 года и метод его работы был реализован на многих платформах, следовательно, это один из самых мобильных вариантов (особенно — если вам необходим доступ к вашему архиву из системы Windows).

zip -r archive folder

Создает архив archive.zip с содержимым каталога folder.

unzip archive.zip

Извлекает содержимое архива archive.zip в текущую директорию, создавая вложенные директории (используйте -j чтоб не создавать вложенных директорий).

Создание backup’а базы данных MySql

mysqlhotcopy -u=user -p=password [database] [/path/to/some/dir]

Если резервной копии базы данных было сделано с mysqlhotcopy, восстановление происходит, после остановки сервера, копирование содержимого файла резервной копии в каталог данных MySQL:

# cp -R /backup-db/miodatabase /var/lib/mysql

12 причин, почему Google и Яндекс не индексирует ваш сайт

В данной статье мы рассмотрим 12 причин, по которым у вашего сайта могут быть проблемы с индексацией в поисковых системах Google и Яндекс.

Переходим к причинам:

1. Google и Яндекс пока не нашел ваш сайт

Такое случается в том случае, если вы только что выложили свой сайт и ничего не делали для того, чтобы поисковые системы его заметили.

В таком случае не стоит ожидать быстрой индексации. Но это легко можно поправить.

Для этого нужно сделать:

  • Добавить сайт в поисковые системы (Add url)
  • Добавить сайт в Google и Яндекс вебмастер

Статьи в тему:

— Как добавить сайт в поисковые системы

— Google Webmaster Tools

— Добавляем сайт в Яндекс Вебмастер

После чего, нужно немного подождать и ваш сайт должен проиндесироваться. Обычно это занимает от пару часов, до пару дней и более.

 2. Сайт или страницы закрыты в robots.txt

Это часто бывает причиной, которую не учитывают разработчики и выкатывают сайт закрытым от индексации в файле robots.txt. Но такое легко можно поправить.

Для начала читаем статью: Robots.txt – инструкция для SEO

Если у вас не много технических разделов, то можно обойтись и таким robots.txt:

robots.txt

Но если на сайте нужно много чего закрывать, то:

  • читаем статью по ссылке выше
  • закрываем только те разделы, что не нужно индексировать
  • оставляем для индексации все остальное

Тогда все с вашим сайтом должно быть нормально.

 3. Включены приватные настройки

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

Для этого нужно зайти в:

  • Настройки
  • Чтение
  • Видимость для поисковых систем
  • Убрать галочку

Включены приватные настройки WordPress

Многие забывают убрать эту галочку и потом не могут понять, в чем же причина не индексации сайта.

4. Сайт закрыт от индексации в noindex в мета тегах

Индексацию контента или страницы так же можно закрыть с помощью мета тега. Выглядит он так:

<meta name=»robots» content=»no index, nofollow»>

Все что нужно:

  • проверить код на наличие такого тега и что в нем прописано
  • убрать строку кода
  • или просто сделать follow и index

Пример:

meta name robots

Из нашей практики встречались и такие сайты, на которых это было причиной индексации.

 5. Ошибки сканирования

Если возникает много ошибок при сканировании, то поисковый бот просто может не дойти до нужных страниц.

Чтобы это проверить:

  • Заходим в Google Webmaster Tools
  • Сканирование
  • Ошибки сканирования

Ошибки сканирования

Если есть какие-то критические ошибки. Просто нужно их исправить и все будет хорошо.

6. Сайт заблокирован в .htaccess

В этом файле обычно прописывается 301 редирект. Но в нем, так же можно закрыть от индексации поисковыми системами.

Для того, чтобы это проверить:

  • находим на сервере файл .htaccess
  • в коде смотрим, чтобы не был закрыт сайт

Это может быть причиной, но многие даже не думаю в этом направлении. А как вариант не стоит исключать.

7. Хостинг или сервер работает не стабильно

Если в момент, когда поисковый бот пришел на сайт индексировать страницы, сайт не доступен, то это может быть причиной не индексации.

Как минимум стоит позаботиться о том, чтобы up time у вашего сервера был хорошим и хостинг стабильным.

Сервисов, которые позволяет это проконтролировать множество. Если нужно бесплатно, то Яндекс Метрика оповещает о том, когда сайт не доступен.

доступность сайта Яндекс метрика

Как я сказал, сервисов множество, вводим в поиск uptime checker и получаем множество результатов сервисов. А дальше выбираем на вкус и цвет.

8. Проблемы с AJAX/JavaScript

Не секрет, что Google индексирует AJAX и JavaScript. Вот ссылка для разработчиков с инструкцией: https://support.google.com/webmasters/answer/174992

Но на данный момент поисковая система индексирует эти языки не так легко и просто как HTML.

В случае, если вы не правильно настроили все для поиска в AJAX и JavaScript, то Google не проиндексирует ваш сайт и страницы.

Вот полезная информация из справки Гугла на этот счет: https://support.google.com/webmasters/answer/174993

9. У вас на сайте много дублированного контента

Если на сайте много дублированного контента, как:

  • страницы
  • мета тегов

То во первых можно получить санкции от Google Панды. Во вторых это может быть причиной того, что сайт не индексируется.

много дублированного контента

Статьи в тему:

— Как найти дубликаты страниц на сайте

— Как убрать или закрыть дубли от индексации

На эту причину стоит обращать внимание. Так как сейчас это № 1 причина, за которые можно получить санкции и сложности в дальнейшей раскрутке сайта.

 10. Очень медленная скорость загрузки сайта

Скорость загрузки сайта влияет на позиции и это один из факторов ранжирования. Поэтому если ваш сайт грузиться очень долго, то вполне вероятно, что он не будет нормально индексироваться.

Для начала читаем статью: Как время загрузки влияет на позиции в Google

Очень медленная скорость загрузки сайта

После чего, нужно учесть все моменты со скоростью загрузки и сделать ее очень быстрой.

11. Ваш домен ранее был забанен

Такое часто случается. Когда:

  • регистрируешь хороший и звучный домен
  • по обратным ссылкам все нормально
  • делаешь хороший сайт с нормальным дизайном
  • наполняешь уникальным и толковым контентом
  • а он не хочет никак индексироваться

Ваш домен ранее был забанен

В таком случае дела не очень хороши. Но все равно это можно поправить. А именно:

  • написать запрос на пересмотр (если Яндекс, узнать в чем причина)
  • написать на форуме Google (постараться узнать в чем причина)
  • развивать проект

Статья в тему: Как проверить сайт на бан поисковых систем?

Но по опыту скажу. Если домен не лезет в течении 3-4 месяцев нормально. То лучше развивать проект на другом домене. Как минимум это будет быстрее и на порядок проще.

12. У вас нет sitemap на сайте

Это очень редко может быть причиной. Но все же может быть. Поэтому нужно сделать карту сайта и добавить ее как Google вебмастер, так и в Яндекс вебмастер.

Статья в тему: Создаем sitemap для Google и Яндекс

В заключение

Индексация сайта важнейший момент для поискового продвижения сайта. Поэтому сначала нужно найти причину, понимать следствия. В итоге не допускать того, чтобы с индексацией сайта были проблемы.

Хорошие статьи по индексации сайта в помощь:

— Как быстро проверить индексацию страниц всего сайта?

— Как быстро проиндексировать сайт или страницу?

— Почему Яндекс медленно индексирует молодые сайты?

А что вы думаете про причины не индексации или плохой индексации сайта?

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

Понравилась статья? Получай свежие статьи первым по e-mail

12 причин, почему Google и Яндекс не индексирует ваш сайт