Hais txog 1C web client

Ib qho ntawm cov yam ntxwv zoo ntawm 1C: Kev lag luam thev naus laus zis yog qhov kev daws teeb meem, tsim los ntawm kev tswj cov ntaub ntawv thev naus laus zis, tuaj yeem tsim tawm ob qho tib si hauv cov neeg siv khoom nyias (executable) rau Windows, Linux, MacOS X, thiab ua tus neeg siv web rau 5 browsers - Chrome, Internet Explorer, Firefox, Safari, Edge, thiab tag nrho cov no yam tsis tau hloov pauv daim ntawv thov qhov chaws. Ntxiv mus, externally daim ntawv thov nyob rau hauv cov neeg siv nyias nyias thiab nyob rau hauv lub browser functions thiab zoo li yuav luag zoo tib yam.
Nrhiav 10 qhov sib txawv (2 daim duab hauv qab txiav):

Nyias tus neeg siv lub qhov rais ntawm Linux:

Hais txog 1C web client

Tib lub qhov rais hauv web neeg siv (hauv Chrome browser):

Hais txog 1C web client

Vim li cas peb thiaj ua tus neeg siv khoom siv web? Txhawm rau muab nws me ntsis ua siab ntev, lub sijhawm tau teeb tsa txoj haujlwm zoo li no rau peb. Kev ua haujlwm hauv Is Taws Nem tau ntev dhau los ua qhov yuav tsum tau ua ua ntej rau daim ntawv thov kev lag luam. Ua ntej, peb ntxiv lub peev xwm ua haujlwm hauv Is Taws Nem rau peb cov neeg siv khoom nyias (qee ntawm peb cov neeg sib tw, los ntawm txoj kev, tau nres ntawm qhov no; lwm tus, ntawm qhov tsis sib xws, tso tseg cov neeg siv khoom nyias thiab txwv lawv tus kheej rau kev siv lub vev xaib neeg siv khoom). Peb txiav txim siab muab sijhawm rau peb cov neeg siv los xaiv cov neeg siv khoom xaiv uas haum rau lawv zoo tshaj plaws.

Hais txog 1C web client

Ntxiv qhov muaj peev xwm ntawm lub vev xaib rau cov neeg siv khoom nyias yog qhov project loj nrog kev hloov pauv tag nrho hauv cov neeg siv khoom-neeg rau zaub mov architecture. Tsim tus neeg siv lub vev xaib yog qhov project tshiab kiag li, pib los ntawm kos.

Nqe lus ntawm qhov teeb meem

Yog li, qhov project yuav tsum: tus neeg siv lub vev xaib yuav tsum ua tib yam li tus neeg siv khoom nyias, uas yog:

  1. Tso cov neeg siv interface
  2. Ua tus neeg siv code sau ua 1C hom lus

Tus neeg siv interface hauv 1C tau piav qhia hauv qhov pom kev kho, tab sis tshaj tawm, tsis muaj pixel-los-pixel kev npaj ntawm cov ntsiab lus; Txog peb lub kaum ob hom ntawm cov ntsiab lus sib txuas tau siv - cov nyees khawm, cov ntawv sau (cov ntawv nyeem, cov lej, hnub / sijhawm), cov npe, rooj, duab, thiab lwm yam.

Client code hauv hom lus 1C tuaj yeem muaj cov neeg rau zaub mov hu, ua haujlwm nrog cov peev txheej hauv zos (cov ntaub ntawv, thiab lwm yam), luam ntawv, thiab ntau ntxiv.

Ob tus neeg siv khoom nyias (thaum ua haujlwm ntawm lub vev xaib) thiab tus neeg siv lub vev xaib siv tib lub vev xaib kev pabcuam sib txuas lus nrog 1C daim ntawv thov server. Cov neeg siv khoom siv, tau kawg, txawv - tus neeg siv khoom nyias tau sau hauv C ++, tus neeg siv lub vev xaib tau sau hauv JavaScript.

Ib me ntsis keeb kwm

Lub vev xaib tus neeg siv khoom tau pib xyoo 2006, nrog pab pawg (qhov nruab nrab) 5 tus neeg. Ntawm qee theem ntawm txoj haujlwm, cov neeg tsim khoom tau koom tes los siv cov haujlwm tshwj xeeb (cov ntaub ntawv nthuav dav, daim duab kos, thiab lwm yam); Raws li txoj cai, cov no yog tib cov neeg tsim khoom uas tau ua qhov haujlwm no hauv cov neeg siv khoom nyias. Cov. developers rov sau cov khoom hauv JavaScript uas lawv tau tsim yav dhau los hauv C ++.

Txij thaum pib, peb tsis lees paub lub tswv yim ntawm txhua qhov tsis siv neeg (txawm tias ib nrab) hloov pauv ntawm C ++ nyias tus neeg siv code rau hauv JavaScript web tus neeg siv khoom vim muaj qhov sib txawv ntawm ob hom lus; tus neeg siv lub vev xaib tau sau rau hauv JavaScript los ntawm kos.

Hauv thawj qhov kev hloov pauv ntawm qhov project, tus neeg siv lub vev xaib tau hloov pauv cov neeg siv khoom siv hauv cov lus tsim hauv 1C ncaj qha rau hauv JavaScript. Cov neeg siv nyias nyias ua txawv - cov cai hauv cov lus tsim hauv 1C tau muab tso ua ke rau hauv bytecode, thiab tom qab ntawd cov bytecode no tau txhais ntawm tus neeg siv khoom. Tom qab ntawd, tus neeg siv lub vev xaib tau pib ua ib yam - thawj zaug, nws tau txais txiaj ntsig kev ua tau zoo, thiab qhov thib ob, nws tau ua kom muaj kev sib koom ua ke ntawm cov neeg siv khoom nyias thiab lub vev xaib.

Thawj version ntawm 1C: Kev Lag Luam platform nrog cov neeg siv khoom txhawb nqa tau tso tawm xyoo 2009. Tus neeg siv lub vev xaib thaum lub sijhawm ntawd txhawb nqa 2 browsers - Internet Explorer thiab Firefox. Cov phiaj xwm qub suav nrog kev txhawb nqa rau Opera, tab sis vim muaj teeb meem insurmountable nyob rau lub sijhawm ntawd nrog daim ntawv thov kaw cov neeg tuav haujlwm hauv Opera (nws tsis tuaj yeem taug qab nrog 100% tseeb tias daim ntawv thov raug kaw, thiab lub sijhawm ntawd ua tiav cov txheej txheem kev txiav tawm los ntawm cov ntawv thov. 1C daim ntawv thov server) los ntawm cov phiaj xwm no yuav tsum tau tso tseg.

Qhov project qauv

Nyob rau hauv tag nrho, lub 1C: Enterprise platform muaj 4 tej yaam num sau nyob rau hauv JavaScript:

  1. WebTools - cov tsev qiv ntawv sib koom siv los ntawm lwm cov haujlwm (peb kuj suav nrog Google Closure Library).
  2. Tswj lub ntsiab FormattedDocument (ua tiav hauv JavaScript hauv ob qho tib si tus neeg siv khoom nyias thiab tus neeg siv lub vev xaib)
  3. Tswj lub ntsiab Teem sijhawm (ua tiav hauv JavaScript hauv ob qho tib si tus neeg siv khoom nyias thiab tus neeg siv lub vev xaib)
  4. Web neeg siv

Cov qauv ntawm txhua qhov haujlwm zoo ib yam li cov qauv ntawm Java tej yaam num (los yog .NET tej yaam num - qhov twg yog ze dua); Peb muaj namespaces, thiab txhua lub namespace yog nyob rau hauv ib tug cais folders. Hauv cov ntawv tais ceev tseg muaj cov ntaub ntawv thiab cov chav kawm namespace. Muaj txog 1000 cov ntaub ntawv nyob rau hauv lub web client project.

Raws li txoj cai, tus neeg siv lub vev xaib tau muab faib ua ntau yam hauv qab no:

  • Tswj tus neeg thov kev pab cuam interface
    • General daim ntawv thov interface (system menus, panels)
    • Interface ntawm cov ntaub ntawv tswj hwm, suav nrog, ntawm lwm yam, txog 30 kev tswj hwm (khawm, ntau hom kev nkag teb chaws - ntawv nyeem, lej, hnub / sijhawm, thiab lwm yam, cov lus, npe, duab, thiab lwm yam)

  • Cov qauv khoom muaj rau cov neeg tsim khoom ntawm tus neeg siv khoom (tshaj li 400 hom hauv tag nrho: cov qauv kev tswj hwm tus qauv, cov ntaub ntawv teeb tsa, cov qauv tsim, thiab lwm yam)
  • Tus neeg txhais lus ntawm lub built-in 1C lus
  • Browser txuas ntxiv (siv rau kev ua haujlwm tsis txaus siab hauv JavaScript)
    • Ua haujlwm nrog cryptography
    • Ua haujlwm nrog cov ntaub ntawv
    • Technology ntawm cov khoom siv sab nraud, tso cai rau lawv siv rau hauv ob qho tib si nyias thiab cov neeg siv web

Kev Loj Hlob Nta

Kev siv tag nrho cov saum toj no hauv JavaScript tsis yooj yim. Tej zaum 1C tus neeg siv lub vev xaib yog ib qho ntawm cov neeg siv khoom loj tshaj plaws-sab ntawv sau hauv JavaScript - txog 450.000 kab. Peb nquag siv cov khoom-taw qhia txoj hauv kev hauv lub vev xaib tus neeg siv khoom code, uas yooj yim ua haujlwm nrog qhov project loj.

Txhawm rau txo qhov loj me ntawm cov neeg siv khoom, peb thawj zaug siv peb tus kheej obfuscator, thiab pib nrog lub platform version 8.3.6 (Lub Kaum Hli 2014) peb pib siv. Google Kaw Compiler. Cov txiaj ntsig ntawm kev siv cov lej - qhov loj ntawm lub vev xaib tus neeg siv khoom tom qab obfuscation:

  • Tus kheej obfuscator - 1556 kb
  • Google Kaw Compiler - 1073 kb

Siv Google Closure Compiler pab peb txhim kho kev ua haujlwm ntawm tus neeg siv lub vev xaib los ntawm 30% piv rau peb tus kheej obfuscator. Tsis tas li ntawd, tus nqi ntawm lub cim xeeb noj los ntawm daim ntawv thov tau txo los ntawm 15-25% (nyob ntawm qhov browser).

Google Closure Compiler ua haujlwm zoo heev nrog cov khoom-oriented code, yog li nws qhov kev ua tau zoo rau tus neeg siv lub vev xaib siab npaum li qhov ua tau. Kaw Compiler ua ob peb yam zoo rau peb:

  • Kev tshuaj xyuas zoo li qub ntawm qhov project tsim theem (kom paub meej tias peb npog cov cai nrog JSDoc annotations). Qhov tshwm sim yog kev ntaus ntawv zoo li qub, ze heev nyob rau theem rau kev ntaus hauv C ++. Qhov no yuav pab kom ntes tau qhov feem pua ​​​​ntawm qhov tsis raug ntawm qhov project compilation theem.
  • Txo tus lej loj los ntawm obfuscation
  • Ib tug xov tooj ntawm optimizations ntawm lub executed code, piv txwv li, xws li:
    • inline muaj nuj nqi hloov pauv. Hu rau lub luag haujlwm hauv JavaScript yog ib qho kev lag luam kim heev, thiab kev hloov pauv ntawm cov kev siv me me uas nquag siv tau nrawm nrawm rau txoj cai.
    • suav qhov tsis tu ncua ntawm lub sijhawm sau. Yog hais tias ib qho kev qhia nyob ntawm qhov tsis tu ncua, tus nqi tiag tiag ntawm qhov tas mus li yuav raug hloov rau hauv nws

Peb siv WebStorm ua peb lub vev xaib kev txhim kho ib puag ncig.

Rau kev tsom xam code peb siv soundQube, qhov twg peb integrate static code analyzers. Siv cov ntsuas ntsuas, peb saib xyuas qhov tsis zoo ntawm JavaScript qhov chaws thiab sim tiv thaiv nws.

Hais txog 1C web client

Peb daws teeb meem dab tsi?

Thaum lub sij hawm ua qhov project, peb tau ntsib ntau yam teeb meem nthuav uas peb yuav tsum tau daws.

Hloov cov ntaub ntawv nrog lub server thiab nruab nrab ntawm windows

Muaj cov xwm txheej uas obfuscation ntawm qhov chaws tuaj yeem cuam tshuam nrog kev ua haujlwm ntawm qhov system. Code sab nraud rau tus neeg siv lub vev xaib tus lej ua tau zoo, vim yog obfuscation, tej zaum yuav muaj lub luag haujlwm thiab cov npe parameter uas txawv ntawm cov uas peb xav tau. Tus lej sab nraud rau peb yog:

  • Code los ntawm lub server nyob rau hauv daim ntawv ntawm cov ntaub ntawv qauv
  • Code rau lwm lub qhov rais thov

Txhawm rau kom tsis txhob muaj obfuscation thaum cuam tshuam nrog server, peb siv @expose tag:

/**
 * @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;
}

Thiab kom tsis txhob obfuscation thaum interacting nrog rau lwm qhov rais, peb siv thiaj li hu ua exported interfaces (interfaces uas txhua txoj kev yog exported).

/**
 * ЭкспортируСмый интСрфСйс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° 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 (){}

Peb siv Virtual DOM ua ntej nws dhau los ua qhov tseem ceeb)

Zoo li txhua tus neeg tsim khoom lag luam cuam tshuam nrog cov Web UI nyuaj, peb pom tau sai sai tias DOM tsis zoo rau kev ua haujlwm nrog cov neeg siv kev sib cuam tshuam. Yuav luag tam sim ntawd, ib qho analogue ntawm Virtual DOM tau siv los ua kom zoo dua ua haujlwm nrog UI. Thaum lub sijhawm ua haujlwm, txhua qhov kev hloov pauv DOM tau khaws cia rau hauv lub cim xeeb thiab, tsuas yog thaum tag nrho cov haujlwm ua tiav, cov kev hloov pauv tau siv rau DOM tsob ntoo.

Optimizing lub web client

Txhawm rau ua kom peb tus neeg siv lub vev xaib ua haujlwm sai dua, peb sim siv tus qauv browser peev xwm (CSS, thiab lwm yam) kom siab tshaj plaws. Yog li, daim ntawv hais kom ua vaj huam sib luag (nyob ntawm yuav luag txhua daim ntawv thov) tau ua tiav tsuas yog siv cov cuab yeej browser, siv dynamic layout raws li CSS.

Hais txog 1C web client

Kev Ntsuam Xyuas

Rau kev ua haujlwm thiab kev ntsuas kev ua tau zoo, peb siv cov cuab yeej muaj tswv (sau hauv Java thiab C ++), nrog rau cov suite ntawm cov kev sim ua rau saum. selenium.

Peb lub cuab yeej yog universal - nws tso cai rau koj los ntsuas yuav luag txhua qhov kev pab cuam windows, thiab yog li tsim nyog rau kev sim ob tus neeg siv khoom nyias thiab tus neeg siv lub vev xaib. Cov cuab yeej sau cov kev ua ntawm tus neeg siv uas tau pib 1C daim ntawv thov kev daws teeb meem rau hauv cov ntawv sau. Nyob rau tib lub sijhawm, cov duab ntawm thaj chaw ua haujlwm ntawm lub vijtsam - cov qauv - raug kaw. Thaum saib xyuas cov qauv tshiab ntawm tus neeg siv lub vev xaib, cov ntawv sau ua si yam tsis muaj tus neeg siv koom nrog. Nyob rau hauv rooj plaub uas lub screenshot tsis sib xws rau ib qho kev siv ntawm ib kauj ruam, qhov kev ntsuam xyuas tau txiav txim siab ua tsis tiav, tom qab uas tus kws tshaj lij ua haujlwm zoo ua kev tshawb xyuas los txiav txim seb qhov no yog qhov yuam kev lossis kev npaj hloov pauv ntawm tus cwj pwm ntawm lub system. Nyob rau hauv cov ntaub ntawv ntawm kev npaj tus cwj pwm, cov qauv yuav cia li hloov nrog cov tshiab.

Cov cuab yeej kuj ntsuas kev ua haujlwm ntawm daim ntawv thov nrog qhov tseeb txog li 25 milliseconds. Qee zaum, peb voj ntu ntawm tsab ntawv (piv txwv li, rov ua qhov kev txiav txim nkag ob peb zaug) txhawm rau txheeb xyuas qhov degradation ntawm kev ua tiav lub sijhawm. Cov txiaj ntsig ntawm txhua qhov kev ntsuas tau sau tseg rau hauv ib lub cav rau kev txheeb xyuas.

Hais txog 1C web client
Peb cov cuab yeej kuaj thiab daim ntawv thov nyob rau hauv kev sim

Peb cov cuab yeej thiab Selenium ntxiv rau ib leeg; Piv txwv li, yog tias qee lub pob ntawm ib qho ntawm cov ntxaij vab tshaus tau hloov nws qhov chaw, Selenium yuav tsis taug qab qhov no, tab sis peb lub cuab yeej yuav pom, vim tias ua rau pixel-los-pixel sib piv ntawm lub screenshot nrog tus qauv. Cov cuab yeej tseem tuaj yeem taug qab cov teeb meem nrog kev ua haujlwm tawm tswv yim los ntawm cov keyboard lossis nas, vim qhov no yog qhov nws rov tsim dua.

Kev ntsuam xyuas ntawm ob lub cuab yeej (peb li thiab Selenium) ua haujlwm raug xwm txheej los ntawm peb cov kev daws teeb meem. Cov kev ntsuam xyuas tau raug tso tawm tom qab tsim txhua hnub ntawm 1C: Kev Lag Luam Platform. Yog tias cov ntawv sau qeeb dua (piv rau kev tsim yav dhau los), peb tshawb xyuas thiab daws qhov ua rau qeeb. Peb cov txheej txheem yog qhov yooj yim - kev tsim kho tshiab yuav tsum ua haujlwm tsis qeeb dua li yav dhau los.

Cov neeg tsim khoom siv cov cuab yeej sib txawv los tshawb xyuas cov xwm txheej qeeb; feem ntau yog siv Dynatrace AJAX Edition lub tuam txhab tsim khoom DynaTrace. Cov ntaub ntawv pov thawj ntawm kev ua haujlwm ntawm cov teeb meem kev ua haujlwm ntawm yav dhau los thiab kev tsim kho tshiab raug kaw, tom qab ntawd cov cav yuav raug tshuaj xyuas. Nyob rau tib lub sijhawm, lub sijhawm ua haujlwm ntawm ib qho kev ua haujlwm (hauv milliseconds) yuav tsis yog qhov kev txiav txim siab - cov txheej txheem kev pabcuam xws li kev khaws cov khib nyiab yog ib ntus pib hauv browser, lawv tuaj yeem sib tshooj nrog lub sijhawm ua haujlwm ntawm kev ua haujlwm thiab cuam tshuam cov duab. Ntau qhov tsis sib xws hauv qhov no yuav yog tus lej ntawm JavaScript cov lus qhia ua haujlwm, tus lej ntawm kev ua haujlwm atomic ntawm DOM, thiab lwm yam. Yog tias tus naj npawb ntawm cov lus qhia / kev ua haujlwm hauv tib tsab ntawv tau nce ntxiv hauv cov ntawv tshiab, qhov no yuav luag txhua zaus txhais tau tias kev poob qis hauv kev ua haujlwm uas yuav tsum tau kho.

Tsis tas li ntawd, ib qho ntawm cov laj thawj rau kev poob qis hauv kev ua haujlwm yuav yog tias Google Kaw Compiler rau qee qhov tsis tuaj yeem ua qhov hloov pauv hauv txoj haujlwm (piv txwv li, vim tias txoj haujlwm rov ua dua lossis virtual). Nyob rau hauv cov ntaub ntawv no, peb sim kho qhov teeb meem los ntawm rewriting lub qhov chaws code.

Browser extensions

Thaum cov kev daws teeb meem xav tau kev ua haujlwm uas tsis muaj nyob hauv JavaScript, peb siv browser txuas ntxiv:

  • rau kev ua haujlwm nrog cov ntaub ntawv
  • rau kev ua haujlwm nrog cryptography
  • ua haujlwm nrog cov khoom siv sab nraud

Peb extensions muaj ob feem. Thawj ntu yog qhov hu ua browser txuas ntxiv (feem ntau txuas ntxiv rau Chrome thiab Firefox sau hauv JavaScript), uas cuam tshuam nrog ntu thib ob - binary txuas ntxiv uas siv cov haujlwm peb xav tau. Nws yuav tsum tau hais tias peb sau 3 versions ntawm binary extensions - rau Windows, Linux thiab MacOS. Lub binary txuas ntxiv yog muab los ua ib feem ntawm 1C: Kev Lag Luam platform thiab nyob rau ntawm 1C daim ntawv thov server. Thaum hu thawj zaug los ntawm tus neeg siv lub vev xaib, nws tau rub tawm mus rau tus neeg siv lub khoos phis tawj thiab nruab rau hauv browser.

Thaum khiav hauv Safari, peb cov extensions siv NPAPI; thaum khiav hauv Internet Explorer, lawv siv ActiveX technology. Microsoft Edge tseem tsis tau txhawb nqa kev txuas ntxiv, yog li tus neeg siv lub vev xaib hauv nws ua haujlwm nrog kev txwv.

Kev txhim kho ntxiv

Ib qho ntawm cov haujlwm rau pab pawg neeg siv web txhim kho yog kev txhim kho ntxiv ntawm kev ua haujlwm. Kev ua haujlwm ntawm tus neeg siv lub vev xaib yuav tsum zoo ib yam rau kev ua haujlwm ntawm cov neeg siv khoom nyias; txhua qhov kev ua haujlwm tshiab yog siv ib txhij nyob rau hauv ob qho tib si nyias thiab cov neeg siv web.

Lwm cov dej num suav nrog kev tsim kho vaj tse, kho dua tshiab, txhim kho kev ua haujlwm thiab kev ntseeg tau. Piv txwv li, ib qho ntawm cov lus qhia yog txuas ntxiv mus rau qhov kev ua haujlwm asynchronous. Qee qhov kev ua haujlwm ntawm tus neeg siv lub vev xaib tam sim no tau tsim los ntawm tus qauv synchronous ntawm kev cuam tshuam nrog lub server. Tus qauv asynchronous tam sim no tau dhau los ua qhov cuam tshuam ntau dua hauv browsers (thiab tsis yog hauv browsers), thiab qhov no yuam peb hloov kho lub vev xaib los ntawm kev hloov synchronous hu nrog asynchronous sawv daws yuav (thiab refactoring cov cai raws li). Kev hloov pauv hloov mus rau tus qauv asynchronous tau piav qhia los ntawm qhov xav tau los txhawb cov kev daws teeb meem thiab lawv cov kev hloov pauv zuj zus.

Tau qhov twg los: www.hab.com

Ntxiv ib saib