1С веб-клиент туралы

1C: Enterprise технологиясының тамаша мүмкіндіктерінің бірі - басқарылатын пішіндер технологиясы арқылы әзірленген қолданбалы шешімді Windows, Linux, MacOS X үшін жұқа (орындалатын) клиентте де, 5 браузерге арналған веб-клиент ретінде де іске қосуға болады - Chrome, Internet Explorer, Firefox, Safari, Edge және осының барлығы қолданбаның бастапқы кодын өзгертпей. Сонымен қатар, сыртқы жағынан жұқа клиенттегі және браузердегі қосымша жұмыс істейді және дерлік бірдей көрінеді.
10 айырмашылықты табыңыз (қиық астындағы 2 сурет):

Linux жүйесінде жұқа клиент терезесі:

1С веб-клиент туралы

Веб-клиенттегі бірдей терезе (Chrome браузерінде):

1С веб-клиент туралы

Неліктен біз веб-клиент жасадық? Біраз аянышты түрде айтсақ, уақыт бізге осындай міндет қойды. Интернет арқылы жұмыс істеу бұрыннан іскерлік қосымшалар үшін міндетті шарт болды. Біріншіден, біз жұқа клиентіміз үшін Интернет арқылы жұмыс істеу мүмкіндігін қостық (кейбір бәсекелестеріміз, айтпақшы, бұған тоқталды; басқалары, керісінше, жұқа клиентті тастап, веб-клиентті енгізумен шектелді). Біз пайдаланушыларға ең қолайлы клиент опциясын таңдау мүмкіндігін беруді шештік.

1С веб-клиент туралы

Жіңішке клиентке веб-негізделген мүмкіндіктерді қосу клиент-сервер архитектурасын толығымен өзгерткен үлкен жоба болды. Веб-клиент жасау - бұл нөлден басталатын мүлдем жаңа жоба.

Мәселенің тұжырымы

Сонымен, жоба талаптары: веб-клиент жұқа клиент сияқты істеуі керек, атап айтқанда:

  1. Пайдаланушы интерфейсін көрсету
  2. 1С тілінде жазылған клиенттік кодты орындаңыз

1С-тегі пайдаланушы интерфейсі визуалды редакторда сипатталған, бірақ элементтердің пиксель бойынша орналасуынсыз декларативті түрде; Интерфейс элементтерінің үш ондаған түрі қолданылады - түймелер, енгізу өрістері (мәтіндік, сандық, күн/уақыт), тізімдер, кестелер, графиктер және т.б.

1С тіліндегі клиент коды серверлік қоңырауларды, жергілікті ресурстармен жұмыс істеуді (файлдар және т.б.), басып шығаруды және т.б. қамтуы мүмкін.

Жұқа клиент те (веб арқылы жұмыс істегенде) және веб-клиент 1С қолданбасының серверімен байланысу үшін бірдей веб-қызметтердің жиынтығын пайдаланады. Клиенттік іске асыру, әрине, әртүрлі - жұқа клиент C++ тілінде, веб-клиент JavaScript тілінде жазылған.

Біраз тарих

Веб-клиент жобасы 2006 жылы басталды, оның командасы (орта есеппен) 5 адам. Жобаның белгілі бір кезеңдерінде нақты функционалдылықты (электрондық кесте құжаты, диаграммалар және т.б.) іске асыру үшін әзірлеушілер тартылды; әдетте, бұл жұқа клиентте бұл функцияны жасаған әзірлеушілер болды. Анау. әзірлеушілер бұрын C++ тілінде жасаған компоненттерді JavaScript тілінде қайта жазды.

Ең басынан бастап біз C++ жұқа клиент кодын JavaScript веб-клиентіне автоматты түрде (тіпті ішінара) түрлендіру идеясын екі тіл арасындағы күшті тұжырымдамалық айырмашылықтарға байланысты қабылдадық; веб-клиент JavaScript тілінде нөлден бастап жазылған.

Жобаның бірінші итерацияларында веб-клиент кірістірілген 1С тіліндегі клиент кодын тікелей JavaScript-ке түрлендірді. Жұқа клиент басқаша әрекет етеді - кірістірілген 1С тіліндегі код байт кодқа жинақталады, содан кейін бұл байт код клиентте түсіндіріледі. Кейіннен веб-клиент де солай істей бастады - біріншіден, ол өнімділікті арттырды, екіншіден, жұқа және веб-клиенттердің архитектурасын біріктіруге мүмкіндік берді.

1 жылы веб-клиенттерге қолдау көрсететін 2009C: Enterprise платформасының бірінші нұсқасы шықты. Ол кезде веб-клиент 2 браузерді қолдады - Internet Explorer және Firefox. Бастапқы жоспарлар Opera-ны қолдауды қамтыды, бірақ сол кезде Opera-дағы қолданбаларды жабу өңдеушілерімен шешілмейтін мәселелерге байланысты (қосымшаның жабылып жатқанын 100% сенімділікпен бақылау мүмкін емес еді және сол сәтте ажырату процедурасын орындау мүмкін болмады. 1С қолданбасының сервері) осы жоспарлардан бас тартуға тура келді.

Жоба құрылымы

Барлығы 1C: Enterprise платформасында JavaScript тілінде жазылған 4 жоба бар:

  1. WebTools – басқа жобалар пайдаланатын ортақ кітапханалар (біз де қосамыз Google Closure Library).
  2. Басқару элементі Форматталған құжат (жұқа клиентте де, веб-клиентте де JavaScript-те енгізілген)
  3. Басқару элементі Жоспарлаушы (жұқа клиентте де, веб-клиентте де JavaScript-те енгізілген)
  4. Веб-клиент

Әрбір жобаның құрылымы Java жобаларының құрылымына ұқсайды (немесе .NET жобалары - қайсысы жақынырақ болса); Бізде аттар кеңістігі бар және әрбір аттар кеңістігі бөлек қалтада. Қалтаның ішінде файлдар мен аттар кеңістігінің сыныптары бар. Веб-клиент жобасында шамамен 1000 файл бар.

Құрылымдық жағынан веб-клиент негізінен келесі ішкі жүйелерге бөлінеді:

  • Басқарылатын клиенттік қолданба интерфейсі
    • Жалпы қолданба интерфейсі (жүйелік мәзірлер, панельдер)
    • Басқарылатын пішіндердің интерфейсі, соның ішінде 30-ға жуық басқару элементтері (түймелер, енгізу өрістерінің әртүрлі түрлері – мәтін, сан, күн/уақыт және т.б., кестелер, тізімдер, графиктер және т.б.)

  • Клиенттегі әзірлеушілерге қолжетімді нысан үлгісі (барлығы 400-ден астам түрі: басқарылатын интерфейс нысанының үлгісі, деректер орналасу параметрлері, шартты стильдеу және т.б.)
  • Кірістірілген 1С тілінің аудармашысы
  • Браузер кеңейтімдері (JavaScript-те қолдау көрсетілмейтін функциялар үшін пайдаланылады)
    • Криптографиямен жұмыс
    • Файлдармен жұмыс істеу
    • Сыртқы компоненттердің технологиясы, оларды жұқа және веб-клиенттерде пайдалануға мүмкіндік береді

Әзірлеу ерекшеліктері

Жоғарыда айтылғандардың барлығын JavaScript-те енгізу оңай емес. Мүмкін 1С веб-клиент JavaScript тілінде жазылған ең үлкен клиенттік қосымшалардың бірі - шамамен 450.000 XNUMX жол. Біз веб-клиент кодында объектілі-бағытталған тәсілді белсенді түрде қолданамыз, бұл осындай үлкен жобамен жұмысты жеңілдетеді.

Клиенттік кодтың өлшемін азайту үшін біз алдымен өз обфузкаторымызды қолдандық және платформаның 8.3.6 нұсқасынан бастап (2014 ж. қазан) пайдалана бастадық. Google Closure Compiler. Сандардағы қолданудың әсері – бұлыңғырдан кейінгі веб-клиент шеңберінің өлшемі:

  • Меншікті обфузкатор – 1556 кб
  • Google Closure Compiler – 1073 кб

Google Closure Compiler қолданбасын пайдалану веб-клиенттің өнімділігін өз обфузкаторымызбен салыстырғанда 30%-ға жақсартуға көмектесті. Сонымен қатар, қолданба тұтынатын жад көлемі 15-25% төмендеді (браузерге байланысты).

Google Closure Compiler нысанға бағытталған кодпен өте жақсы жұмыс істейді, сондықтан оның веб-клиент үшін тиімділігі мүмкіндігінше жоғары. Closure Compiler біз үшін бірнеше жақсы нәрсе жасайды:

  • Жобаны құру кезеңінде статикалық түрді тексеру (кодты JSDoc аннотацияларымен қамтуды қамтамасыз етеді). Нәтиже – статикалық теру, деңгейі бойынша C++ тілінде теруге өте жақын. Бұл жобаны құрастыру кезеңінде қателердің айтарлықтай үлкен пайызын ұстауға көмектеседі.
  • Түсініктеме арқылы код өлшемін азайту
  • Орындалған кодтың бірқатар оңтайландырулары, мысалы:
    • функцияның кірістірілген ауыстырулары. JavaScript-те функцияны шақыру өте қымбат операция болып табылады және жиі қолданылатын шағын әдістерді кірістірілген ауыстыру кодты айтарлықтай жылдамдатады.
    • Компиляция уақытында константаларды санау. Егер өрнек тұрақтыға тәуелді болса, онда тұрақтының нақты мәні оған ауыстырылады

Біз WebStorm-ды веб-клиенттерді әзірлеу ортасы ретінде пайдаланамыз.

Кодты талдау үшін біз пайдаланамыз SonarQube, мұнда біз статикалық код анализаторларын біріктіреміз. Анализаторларды пайдалана отырып, біз JavaScript бастапқы кодының сапасының нашарлауын бақылаймыз және оның алдын алуға тырысамыз.

1С веб-клиент туралы

Біз қандай мәселелерді шештік/шешіп жатырмыз?

Жобаны жүзеге асыру барысында біз шешуге тура келген бірқатар қызықты мәселелерге тап болдық.

Сервермен және терезелер арасында деректермен алмасу

Бастапқы кодты бұрмалау жүйенің жұмысына кедергі келтіруі мүмкін жағдайлар бар. Веб-клиенттің орындалатын кодының сыртындағы код, бұлыңғырлыққа байланысты, біздің орындалатын код күткеннен өзгеше функция мен параметр атауларына ие болуы мүмкін. Біз үшін сыртқы код:

  • Деректер құрылымдары түрінде серверден келетін код
  • Басқа қолданба терезесінің коды

Сервермен әрекеттесу кезінде түсініксіздікті болдырмау үшін @expose тегін пайдаланамыз:

/**
 * @constructor
 * @extends {Base.SrvObject}
 */
Srv.Core.GenericException = function ()
{
    /**
     * @type {string}
     * @expose
     */
    this.descr;

    /**
     * @type {Srv.Core.GenericException}
     * @expose
     */
    this.inner;

    /**
     * @type {string}
     * @expose
     */
    this.clsid;

    /**
     * @type {boolean}
     * @expose
     */
    this.encoded;
}

Басқа терезелермен әрекеттесу кезінде түсініксіздікті болдырмау үшін біз экспортталған интерфейстерді (барлық әдістер экспортталатын интерфейстер) қолданамыз.

/**
 * Экспортируемый интерфейс контрола DropDownWindow
 *
 * @interface
 * @struct
 */
WebUI.IDropDownWindowExp = function(){}

/**
 * Перемещает выделение на 1 вперед или назад
 *
 * @param {boolean} isForward
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){}

/**
 * Перемещает выделение в начало или конец
 *
 * @param {boolean} isFirst
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){}

/**
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.selectValue = function (){}

Виртуалды DOM негізгі ағым болғанға дейін қолдандық)

Күрделі Web UI-мен айналысатын барлық әзірлеушілер сияқты, біз DOM динамикалық пайдаланушы интерфейстерімен жұмыс істеуге жарамсыз екенін тез түсіндік. Бірден дерлік UI-мен жұмысты оңтайландыру үшін Virtual DOM аналогы енгізілді. Оқиғаларды өңдеу кезінде барлық DOM өзгерістері жадта сақталады және барлық операциялар аяқталғаннан кейін ғана жинақталған өзгерістер DOM ағашына қолданылады.

Веб-клиентті оңтайландыру

Веб-клиент жылдам жұмыс істеуі үшін біз стандартты браузер мүмкіндіктерін (CSS, т.б.) барынша пайдалануға тырысамыз. Осылайша, пішін пәрмендік тақтасы (қосымшаның барлық дерлік пішінінде орналасқан) тек CSS негізіндегі динамикалық орналасуды пайдалана отырып, браузер құралдарының көмегімен көрсетіледі.

1С веб-клиент туралы

Тестілеу

Функционалды және өнімділікті тестілеу үшін біз меншікті құралды (Java және C++ тілінде жазылған), сондай-ақ оның үстіне құрастырылған сынақтар жиынтығын қолданамыз. селен.

Біздің құрал әмбебап болып табылады - ол кез келген дерлік терезелік бағдарламаны тексеруге мүмкіндік береді, сондықтан жұқа клиентті де, веб-клиентті де тексеруге жарамды. Құрал 1С қолданбасының шешімін сценарий файлына іске қосқан пайдаланушының әрекеттерін жазады. Бұл ретте экранның жұмыс аймағының суреттері – стандарттар – жазылады. Веб-клиенттің жаңа нұсқаларын бақылау кезінде сценарийлер пайдаланушының қатысуынсыз ойнатылады. Скриншот кез келген қадамда сілтемеге сәйкес келмейтін жағдайларда, сынақ өтпеді деп саналады, содан кейін сапа маманы бұл қате немесе жүйе әрекетіндегі жоспарланған өзгеріс екенін анықтау үшін тексеру жүргізеді. Жоспарланған мінез-құлық жағдайында стандарттар автоматты түрде жаңасымен ауыстырылады.

Құрал сонымен қатар қолданбаның өнімділігін 25 миллисекундқа дейінгі дәлдікпен өлшейді. Кейбір жағдайларда уақыт өте келе орындалу уақытының нашарлауын талдау үшін сценарий бөліктерін айналдырамыз (мысалы, тапсырыс жазбасын бірнеше рет қайталау). Барлық өлшеулердің нәтижелері талдау үшін журналға жазылады.

1С веб-клиент туралы
Біздің тестілеу құралы және сыналған қолданба

Біздің құрал мен Selenium бір-бірін толықтырады; мысалы, экрандардың біріндегі кейбір түймелер орнын өзгертсе, Selenium мұны бақыламауы мүмкін, бірақ біздің құрал байқайды, себебі скриншотты стандартпен пиксель бойынша салыстыруды жасайды. Құрал сонымен қатар пернетақтадан немесе тінтуірден енгізуді өңдеуге қатысты мәселелерді қадағалай алады, өйткені ол дәл осылай шығарады.

Екі құралдағы да сынақтар (біздікі және Selenium) қолданбалы шешімдеріміздің типтік жұмыс сценарийлерін іске қосады. Тесттер 1С: Enterprise платформасын күнделікті құрастырғаннан кейін автоматты түрде іске қосылады. Егер сценарийлер баяу болса (алдыңғы құрастырумен салыстырғанда), біз баяулау себебін зерттеп, шешеміз. Біздің критерий қарапайым - жаңа құрылым бұрынғыдан баяу жұмыс істемеуі керек.

Әзірлеушілер баяу оқиғаларды зерттеу үшін әртүрлі құралдарды пайдаланады; негізінен пайдаланылады Dynatrace AJAX шығарылымы өндірістік компания DynaTrace. Алдыңғы және жаңа құрастырмалардағы проблемалық операцияның орындалу журналдары жазылады, содан кейін журналдар талданады. Сонымен қатар, жалғыз операциялардың орындалу уақыты (миллисекундпен) шешуші фактор болмауы мүмкін - браузерде қоқыс жинау сияқты сервистік процестер мерзімді түрде іске қосылады, олар функциялардың орындалу уақытымен қабаттасып, суретті бұрмалауы мүмкін. Бұл жағдайда неғұрлым маңызды параметрлер орындалған JavaScript нұсқауларының саны, DOM-дағы атомдық операциялардың саны және т.б. Егер бір сценарийдегі нұсқаулар/операциялар саны жаңа нұсқада көбейсе, бұл әрдайым дерлік түзетуді қажет ететін өнімділіктің төмендеуін білдіреді.

Сондай-ақ, өнімділіктің төмендеуінің себептерінің бірі Google Closure Compiler қандай да бір себептермен функцияны кірістірілген ауыстыруды орындай алмаған болуы мүмкін (мысалы, функция рекурсивті немесе виртуалды болғандықтан). Бұл жағдайда бастапқы кодты қайта жазу арқылы жағдайды түзетуге тырысамыз.

Браузер кеңейтімдері

Қолданбалық шешімге JavaScript-те қол жетімді емес функция қажет болғанда, біз браузер кеңейтімдерін пайдаланамыз:

  • файлдармен жұмыс істеуге арналған
  • криптографиямен жұмыс істеуге арналған
  • -мен жұмыс істеу сыртқы компоненттер

Біздің кеңейтімдер екі бөліктен тұрады. Бірінші бөлік браузер кеңейтімі деп аталады (әдетте JavaScript тілінде жазылған Chrome және Firefox кеңейтімдері), ол екінші бөлікпен өзара әрекеттеседі - бізге қажетті функционалдылықты жүзеге асыратын екілік кеңейтім. Айта кету керек, біз екілік кеңейтімдердің 3 нұсқасын жазамыз - Windows, Linux және MacOS үшін. Екілік кеңейтім 1C: Enterprise платформасының бөлігі ретінде жеткізіледі және 1С қолданбасының серверінде орналасқан. Веб-клиенттен бірінші рет шақырылған кезде, ол клиенттік компьютерге жүктеледі және браузерде орнатылады.

Safari бағдарламасында іске қосылған кезде кеңейтімдеріміз NPAPI пайдаланады; Internet Explorer шолғышында іске қосылғанда олар ActiveX технологиясын пайдаланады. Microsoft Edge әлі кеңейтімдерді қолдамайды, сондықтан ондағы веб-клиент шектеулермен жұмыс істейді.

Бұдан әрі дамыту

Веб-клиентті әзірлеу тобының міндеттерінің бірі функционалдылықты одан әрі дамыту болып табылады. Веб-клиенттің функционалдығы жұқа клиенттің функционалдығымен бірдей болуы керек; барлық жаңа функциялар жұқа және веб-клиенттерде бір уақытта жүзеге асырылады.

Басқа міндеттерге архитектураны дамыту, рефакторинг, өнімділік пен сенімділікті арттыру кіреді. Мысалы, бағыттардың бірі асинхронды жұмыс үлгісіне қарай әрі қарай жылжу болып табылады. Веб-клиенттің кейбір функционалдығы қазіргі уақытта сервермен әрекеттесудің синхронды моделіне құрылған. Асинхронды модель енді браузерлерде (тек браузерлерде ғана емес) өзекті бола түсуде және бұл бізді синхронды қоңырауларды асинхрондылармен ауыстыру (және сәйкесінше кодты қайта өңдеу) арқылы веб-клиентті өзгертуге мәжбүр етеді. Асинхронды модельге біртіндеп көшу босатылған шешімдерді қолдау және олардың біртіндеп бейімделу қажеттілігімен түсіндіріледі.

Ақпарат көзі: www.habr.com

пікір қалдыру