Дар бораи мизоҷи веб 1С

Яке аз хусусиятҳои хуби технологияи 1C: Enterprise дар он аст, ки ҳалли барномае, ки бо истифода аз технологияи шаклҳои идорашаванда таҳия шудааст, метавонад ҳам дар муштарии борик (иҷрошаванда) барои Windows, Linux, MacOS X ва ҳамчун мизоҷи веб барои 5 браузер оғоз карда шавад - Chrome, Internet Explorer, Firefox, Safari, Edge ва ҳамаи ин бе тағир додани рамзи сарчашмаи барнома. Ғайр аз он, аз берун барнома дар мизоҷи борик ва дар браузер кор мекунад ва тақрибан якхела аст.
10 фарқиятро ёбед (2 расм дар зери бурида):

Равзанаи муштарии лоғар дар Linux:

Дар бораи мизоҷи веб 1С

Худи ҳамон равзанаи муштарии веб (дар браузери Chrome):

Дар бораи мизоҷи веб 1С

Чаро мо муштарии веб сохтем? Агар то андозае афсӯсона гуем, замон дар назди мо чунин вазифа гузоштааст. Кор тавассути Интернет муддати тӯлонӣ як шарти ҳатмӣ барои барномаҳои тиҷоратӣ буд. Аввалан, мо қобилияти кор кардан тавассути Интернетро барои муштарии борики худ илова кардем (баъзе аз рақибони мо, дар омади гап, дар ин ҳолат қатъ карданд; дигарон, баръакс, муштарии борикро тарк карда, худро танҳо бо татбиқи муштарии веб маҳдуд карданд). Мо тасмим гирифтем, ки ба корбарони худ имконият диҳем, ки варианти муштарии ба онҳо мувофиқро интихоб кунанд.

Дар бораи мизоҷи веб 1С

Илова кардани қобилиятҳои ба веб асосёфта ба муштарии лоғар як лоиҳаи бузург бо тағироти куллии меъмории муштарӣ-сервер буд. Эҷоди муштарии веб як лоиҳаи комилан нав аст, ки аз сифр сар мешавад.

Тартиб додани масъала

Ҳамин тавр, талаботи лоиҳа: муштарии веб бояд ҳамон тавре ки муштарии борик кор кунад, яъне:

  1. Намоиши интерфейси корбар
  2. Рамзи муштариро, ки бо забони 1С навишта шудааст, иҷро кунед

Интерфейси корбар дар 1C дар муҳаррири визуалӣ тасвир шудааст, аммо ба таври декларативӣ, бидуни ҷойгиркунии пиксел ба пиксели элементҳо; Тақрибан се даҳ намуди элементҳои интерфейс истифода мешаванд - тугмаҳо, майдонҳои вуруд (матн, ададӣ, сана/вақт), рӯйхатҳо, ҷадвалҳо, графикҳо ва ғайра.

Рамзи муштарӣ бо забони 1С метавонад зангҳои сервер, кор бо захираҳои маҳаллӣ (файлҳо ва ғ.), чоп ва ғайраро дар бар гирад.

Ҳам муштарии борик (ҳангоми кор тавассути веб) ва ҳам муштарии веб барои иртибот бо сервери замимаи 1С аз як маҷмӯи хидматҳои веб истифода мебаранд. Амалисозии муштарӣ, албатта, гуногун аст - муштарии борик дар C++ навишта шудааст, веб мизоҷ дар JavaScript навишта шудааст.

Якчанд таърих

Лоиҳаи муштарии веб дар соли 2006 бо ҳайати (ба ҳисоби миёна) 5 нафар оғоз ёфт. Дар марҳилаҳои муайяни лоиҳа таҳиягарон барои татбиқи функсияҳои мушаххас ҷалб карда шуданд (ҳуҷҷати ҷадвал, диаграммаҳо ва ғайра); Чун қоида, инҳо ҳамон таҳиягарон буданд, ки ин функсияро дар муштарии борик иҷро мекарданд. Онхое. таҳиягарон ҷузъҳоро дар JavaScript, ки қаблан дар C++ сохта буданд, аз нав навиштанд.

Мо аз ибтидо идеяи табдили автоматии (ҳатто қисман) рамзи муштарии лоғар C++ ба мизоҷи веби JavaScript-ро аз сабаби фарқиятҳои қавии консептуалӣ байни ду забон рад кардем; муштарии веб дар JavaScript аз сифр навишта шудааст.

Дар итератсияҳои аввалини лоиҳа, муштарии веб рамзи муштариро дар забони дарунсохташудаи 1С мустақиман ба JavaScript табдил дод. Мизоҷи борик ба таври дигар амал мекунад - код дар забони дарунсохташудаи 1С ба байт код тартиб дода мешавад ва сипас ин байт код дар муштарӣ тафсир карда мешавад. Баъдан, муштарии веб ба ҳамин кор шурӯъ кард - аввалан, он фоидаи кор дод ва дуюм, он имкон дод, ки меъмории муштариёни борик ва веб муттаҳид карда шавад.

Нахустин версияи платформаи 1C: Enterprise бо дастгирии мизоҷони веб дар соли 2009 бароварда шуд. Мизоҷи веб дар он вақт ду браузерро дастгирӣ мекард - Internet Explorer ва Firefox. Нақшаҳои аслӣ дастгирии Operaро дар бар мегирифтанд, аммо аз сабаби мушкилоти ҳалнашаванда дар он вақт бо коркардкунандагони бастани барнома дар Opera (бо 2% итминон пайгирӣ кардан мумкин набуд, ки барнома баста мешавад ва дар он лаҳза расмиёти ҷудошавӣ аз шабакаро иҷро кунед. сервери замимаи 100С) аз ин нақшаҳо даст кашидан лозим буд.

Сохтори лоиҳа

Дар маҷмӯъ, платформаи 1C: Enterprise дорои 4 лоиҳаи бо JavaScript навишта шудааст:

  1. WebTools - китобхонаҳои муштарак, ки аз ҷониби лоиҳаҳои дигар истифода мешаванд (мо низ дохил мекунем Китобхонаи бастани Google).
  2. Унсури назорат Ҳуҷҷати форматшуда (дар JavaScript ҳам дар мизоҷи борик ва ҳам дар мизоҷи веб амалӣ карда мешавад)
  3. Унсури назорат Барномасоз (дар JavaScript ҳам дар мизоҷи борик ва ҳам дар мизоҷи веб амалӣ карда мешавад)
  4. Мизоҷи веб

Сохтори ҳар як лоиҳа ба сохтори лоиҳаҳои Java шабоҳат дорад (ё лоиҳаҳои .NET - кадоме аз наздиктар бошад); Мо фазои номҳо дорем ва ҳар як фазои ном дар ҷузвдони алоҳида ҷойгир аст. Дар дохили ҷузвдон файлҳо ва синфҳои фазои ном мавҷуданд. Дар лоиҳаи мизоҷи веб тақрибан 1000 файл мавҷуд аст.

Сохторӣ, муштарии веб асосан ба зерсистемаҳои зерин тақсим мешавад:

  • Интерфейси барномаи муштарии идорашаванда
    • Интерфейси умумии барнома (менюҳои система, панелҳо)
    • Интерфейси шаклҳои идорашаванда, аз ҷумла, дар байни чизҳои дигар, тақрибан 30 идоракунӣ (тугмаҳо, намудҳои гуногуни майдонҳои вуруд - матн, рақам, сана/вақт ва ғайра, ҷадвалҳо, рӯйхатҳо, графикҳо ва ғайра)

  • Модели объект барои таҳиягарон дар муштарӣ дастрас аст (дар маҷмӯъ зиёда аз 400 намуд: модели объекти интерфейси идорашаванда, танзимоти тарҳбандии маълумот, услуби шартӣ ва ғайра)
  • Тарҷумони забони дарунсохт 1С
  • Васеъ кардани браузер (барои вазифаҳое истифода мешаванд, ки дар JavaScript дастгирӣ намешаванд)
    • Кор бо криптография
    • Кор бо файлҳо
    • Технологияи ҷузъҳои беруна, ки имкон медиҳад, ки онҳо ҳам дар муштариёни борик ва ҳам веб истифода шаванд

Хусусиятҳои рушд

Амали кардани ҳама чизҳои дар боло зикршуда дар JavaScript осон нест. Шояд веб мизоҷи 1C яке аз бузургтарин барномаҳои муштарӣ бошад, ки дар JavaScript навишта шудааст - тақрибан 450.000 XNUMX сатр. Мо дар коди мизоҷи веб равиши ба объект нигаронидашударо фаъолона истифода мебарем, ки кор бо чунин лоиҳаи бузургро осон мекунад.

Барои кам кардани андозаи рамзи муштарӣ, мо аввал obfuscator худамонро истифода бурдем ва аз версияи платформаи 8.3.6 (октябри 2014) мо ба истифода шурӯъ кардем. Compiler Closure Google. Таъсири истифода дар рақамҳо - андозаи чаҳорчӯбаи муштарии веб пас аз печида:

  • Обфускатори худӣ – 1556 кб
  • Google Closure Compiler – 1073 кб

Истифодаи Google Closure Compiler ба мо кӯмак кард, ки кори муштарии вебро дар муқоиса бо obfuscator худамон 30% беҳтар кунем. Илова бар ин, ҳаҷми хотираи аз ҷониби барнома истифодашаванда 15-25% (вобаста ба браузер) кам шудааст.

Google Closure Compiler бо рамзи ба объект нигаронидашуда хеле хуб кор мекунад, аз ин рӯ самаранокии он барои мизоҷи веб то ҳадди имкон баланд аст. Compiler Closure барои мо якчанд корҳои хуб мекунад:

  • Санҷиши навъи статикӣ дар марҳилаи сохтани лоиҳа (боварӣ медиҳад, ки мо кодро бо шарҳҳои JSDoc фаро мегирем). Натиҷа чопкунии статикӣ мебошад, ки дар сатҳ ба чоп кардан дар C++ хеле наздик аст. Ин барои дарёфти фоизи хеле зиёди хатогиҳо дар марҳилаи таҳияи лоиҳа кӯмак мекунад.
  • Коҳиш додани андозаи код тавассути печида
  • Як қатор оптимизатсияи коди иҷрошуда, масалан, ба монанди:
    • ивазкунии функсияҳои дохилӣ. Даъват кардани функсия дар JavaScript як амалиёти хеле гаронбаҳост ва иваз кардани усулҳои хурди зуд-зуд истифодашаванда кодро ба таври назаррас суръат мебахшад.
    • Ҳисоб кардани константаҳо дар вақти компиляция. Агар ифода аз доимӣ вобаста бошад, арзиши воқеии доимӣ ба он иваз карда мешавад

Мо WebStorm-ро ҳамчун муҳити таҳияи муштарии веби худ истифода мебарем.

Барои таҳлили код мо истифода мебарем soundQube, ки дар он мо таҳлилгарони коди статикиро муттаҳид мекунем. Бо истифода аз анализаторҳо мо таназзули сифати коди ибтидоии 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 барои кор бо интерфейсҳои динамикии корбар чандон мувофиқ нест. Қариб дарҳол, аналоги Virtual DOM барои оптимизатсияи кор бо UI амалӣ карда шуд. Ҳангоми коркарди рӯйдодҳо, ҳама тағиротҳои DOM дар хотира нигоҳ дошта мешаванд ва танҳо вақте ки ҳамаи амалиётҳо анҷом дода мешаванд, тағироти ҷамъшуда ба дарахти DOM татбиқ карда мешаванд.

Оптимизатсияи муштарии веб

Барои тезтар кор кардани мизоҷи веби мо, мо кӯшиш мекунем, ки имкониятҳои стандартии браузерро (CSS ва ғайра) ба ҳадди аксар истифода барем. Ҳамин тариқ, панели фармони форма (қариб дар ҳама шаклҳои барнома ҷойгир аст) танҳо бо истифода аз абзорҳои браузер бо истифода аз тарҳбандии динамикӣ дар асоси CSS дода мешавад.

Дар бораи мизоҷи веб 1С

санҷиши

Барои санҷиши функсионалӣ ва иҷроиш, мо як асбоби хусусиро (дар Java ва C++ навишта шудааст) ва инчунин маҷмӯи санҷишҳоеро истифода мебарем. Селен.

Воситаи мо универсалӣ аст - он ба шумо имкон медиҳад, ки қариб ҳама гуна барномаи тирезаро санҷед ва аз ин рӯ барои санҷиши муштарии борик ва веб муштарӣ мувофиқ аст. Восита амалҳои корбареро, ки ҳалли барномаи 1C-ро ба файли скрипт оғоз кардааст, сабт мекунад. Дар баробари ин, тасвирҳои минтақаи кории экран — стандартҳо сабт карда мешаванд. Ҳангоми мониторинги версияҳои нави мизоҷи веб, скриптҳо бе иштироки корбар бозӣ карда мешаванд. Дар ҳолатҳое, ки скриншот дар ягон қадам ба истинод мувофиқат накунад, санҷиш ноком ҳисобида мешавад, ки пас аз он мутахассиси сифат барои муайян кардани он, ки ин хато аст ё тағироти ба нақша гирифташуда дар рафтори система тафтишот мегузаронад. Дар сурати рафтори ба нақшагирифташуда стандартҳо ба таври худкор бо стандартҳои нав иваз карда мешаванд.

Асбоб инчунин иҷрои барномаро бо дақиқии то 25 миллисония чен мекунад. Дар баъзе ҳолатҳо, мо қисмҳои скриптро давр мезанем (масалан, якчанд маротиба такрор кардани вуруди фармоиш) барои таҳлили таназзули вақти иҷро бо мурури замон. Натиҷаҳои ҳама ченакҳо дар журнали таҳлил сабт карда мешаванд.

Дар бораи мизоҷи веб 1С
Воситаи озмоишии мо ва замимаи мо дар озмоиш аст

Асбоби мо ва Selenium якдигарро пурра мекунанд; масалан, агар ягон тугмаи яке аз экранҳо ҷойгиршавии худро иваз карда бошад, Selenium метавонад инро пайгирӣ накунад, аммо асбоби мо пай хоҳад бурд, зеро Муқоисаи пиксел ба пиксели скриншотро бо стандарт мекунад. Восита инчунин қодир аст мушкилотро бо коркарди вуруд аз клавиатура ё муш пайгирӣ кунад, зеро маҳз ҳамон чизест, ки он дубора тавлид мекунад.

Санҷишҳо дар ҳарду асбобҳо (аз они мо ва Selenium) сенарияҳои маъмулии корро аз ҳалли барномаҳои мо иҷро мекунанд. Санҷишҳо ба таври худкор пас аз сохтани ҳаррӯзаи платформаи 1C: Enterprise оғоз мешаванд. Агар скриптҳо сусттар бошанд (нисбат ба сохтани қаблӣ), мо сабаби сустшавиро тафтиш ва ҳал мекунем. Меъёри мо оддӣ аст - сохтори нав набояд нисбат ба қаблӣ сусттар кор кунад.

Таҳиягарон барои таҳқиқи ҳодисаҳои сустшавӣ аз абзорҳои гуногун истифода мебаранд; асосан истифода бурда мешавад Нашри Dynatrace AJAX ширкати истеҳсолӣ DynaTrace. Гузоришҳои иҷрои амалиёти мушкилот дар сохтмонҳои қаблӣ ва нав сабт карда мешаванд, пас гузоришҳо таҳлил карда мешаванд. Дар баробари ин, вақти иҷрои амалиёти якхела (бо миллисонияҳо) метавонад омили ҳалкунанда набошад - равандҳои хидматрасонӣ ба монанди ҷамъоварии партовҳо дар браузер давра ба давра оғоз карда мешаванд, онҳо метавонанд бо вақти иҷрои функсияҳо мувофиқат кунанд ва тасвирро вайрон кунанд. Параметрҳои бештар мувофиқ дар ин ҳолат шумораи дастурҳои JavaScript иҷрошуда, шумораи амалиёти атомӣ дар DOM ва ғайра хоҳанд буд. Агар шумораи дастурҳо/амалҳо дар як скрипт дар версияи нав зиёд шуда бошад, ин қариб ҳамеша маънои коҳиши иҷрои онро дорад, ки ислоҳ кардан лозим аст.

Инчунин, яке аз сабабҳои пастшавии кор метавонад дар он бошад, ки Google Closure Compiler бо ягон сабаб ивазкунии дохилии функсияро иҷро карда натавонист (масалан, аз сабаби он ки функсия рекурсивӣ ё виртуалӣ аст). Дар ин ҳолат, мо кӯшиш мекунем, ки вазъро тавассути дубора навиштани рамзи ибтидоӣ ислоҳ кунем.

Васеъ кардани браузер

Вақте ки ҳалли барнома ба функсияе ниёз дорад, ки дар JavaScript мавҷуд нест, мо васеъшавии браузерҳоро истифода мебарем:

Васлкунакҳои мо аз ду қисм иборатанд. Қисми якум он чизест, ки васеъшавии браузер номида мешавад (одатан васеъкуниҳо барои Chrome ва Firefox дар JavaScript навишта шудаанд), ки бо қисми дуюм - васеъшавии дуӣ, ки функсияҳои ба мо лозимиро амалӣ мекунанд. Бояд қайд кард, ки мо 3 версияи васеъшавии бинариро менависем - барои Windows, Linux ва MacOS. Васеъшавии дуӣ ҳамчун як қисми платформаи 1C: Enterprise дода мешавад ва дар сервери барномаҳои 1C ҷойгир аст. Вақте ки бори аввал аз як муштарии веб даъват карда мешавад, он ба компютери муштарӣ бор карда мешавад ва дар браузер насб карда мешавад.

Ҳангоми кор дар Safari, васеъкуниҳои мо NPAPI-ро истифода мебаранд ва ҳангоми кор дар Internet Explorer онҳо технологияи ActiveX-ро истифода мебаранд. Microsoft Edge ҳанӯз васеъкуниро дастгирӣ намекунад, бинобар ин мизоҷи веб дар он бо маҳдудиятҳо кор мекунад.

Инкишофи минбаъда

Яке аз вазифаҳои дастаи таҳияи муштарии веб рушди минбаъдаи функсияҳо мебошад. Функсияи муштарии веб бояд бо функсияи муштарии борик якхела бошад; тамоми функсияҳои нав ҳамзамон ҳам дар муштарии борик ва ҳам дар веб амалӣ карда мешаванд.

Вазифаҳои дигар аз таҳияи меъморӣ, рефакторинг, баланд бардоштани самаранокӣ ва эътимоднокӣ иборатанд. Масалан, яке аз самтҳо ҳаракати минбаъда ба модели кори асинхронӣ мебошад. Баъзе функсияҳои муштарии веб дар айни замон дар модели синхронии ҳамкорӣ бо сервер сохта шудаанд. Модели асинхронӣ ҳоло дар браузерҳо (ва на танҳо дар браузерҳо) аҳамияти бештар пайдо мекунад ва ин моро водор мекунад, ки мизоҷи вебро бо иваз кардани зангҳои синхронӣ бо зангҳои асинхронӣ (ва мувофиқан рефакторатсия кардани код) тағир диҳем. Гузариши тадриҷан ба модели асинхронӣ бо зарурати дастгирии қарорҳои баровардашуда ва мутобиқсозии тадриҷии онҳо шарҳ дода мешавад.

Манбаъ: will.com

Илова Эзоҳ