Der barê muwekîlê webê 1C

Yek ji taybetmendiyên xweş ên teknolojiya 1C: Enterprise ev e ku çareseriya serîlêdanê, ku bi karanîna teknolojiya formên rêvebirinî ve hatî pêşve xistin, hem di xerîdarek zirav (çêker) de ji bo Windows, Linux, MacOS X, hem jî wekî xerîdarek malperê ji bo 5 gerokan dikare were destpêkirin - Chrome, Internet Explorer, Firefox, Safari, Edge, û ev hemî bêyî ku koda çavkaniya serîlêdanê biguherînin. Digel vê yekê, ji derveyî serîlêdan di xerîdarek zirav û di gerokê de fonksiyonên xwe dike û hema hema wekî hev xuya dike.
10 cûdahiyan bibînin (2 wêne di bin qutbûnê de):

Pencereya xerîdar a zirav li Linux:

Der barê muwekîlê webê 1C

Heman pencerê di xerîdarê malperê de (di geroka Chrome de):

Der barê muwekîlê webê 1C

Çima me xerîdarek webê çêkir? Ji bo ku hinekî bi xemgînî were gotin, demê peywirek wiha ji me re diyar kiriye. Karkirina li ser Înternetê demek dirêj ji bo serîlêdanên karsaziyê şertek pêdivî ye. Pêşîn, me şiyana xebitandina bi Internetnternetê ji bo xerîdarek xweya nazik zêde kir (hinek pêşbazên me, bi awayê, li wir sekinîn; yên din, berevajî, dev ji xerîdarek nazik berdan û xwe bi pêkanîna xerîdarek malperê sînordar kirin). Me biryar da ku em fersendê bidin bikarhênerên xwe ku vebijarka xerîdar a ku ji wan re çêtirîn hilbijêrin hilbijêrin.

Der barê muwekîlê webê 1C

Zêdekirina kapasîteyên-based web-ê li xerîdarê nazik projeyek mezin bû ku di mîmariya xerîdar-server de guheztinek bêkêmasî bû. Afirandina xerîdarek malperê projeyek bi tevahî nû ye, ku ji sifirê dest pê dike.

Formulkirina pirsgirêkê

Ji ber vê yekê, hewcedariyên projeyê: pêdivî ye ku xerîdar tevnvî mîna xerîdarek zirav bike, bi navî:

  1. Navrûya bikarhêner nîşan bide
  2. Koda muwekîlê ku bi zimanê 1C hatî nivîsandin bicîh bînin

Navbera bikarhêner a di 1C de di edîtorek dîtbar de, lê bi eşkereyî, bêyî rêvekirina hêmanên pixel-bi-pixel tête diyar kirin; Nêzîkî sê dehan celeb hêmanên navberê têne bikar anîn - bişkok, qadên têketinê (nivîs, hejmar, tarîx / dem), navnîş, tablo, grafîk, hwd.

Koda xerîdar bi zimanê 1C dikare bangên serverê, xebata bi çavkaniyên herêmî (pel, hwd.), çapkirinê, û hêj bêtir vehewîne.

Hem muwekîlê zirav (dema ku bi navgîniya tevneyê dixebitin) hem jî xerîdar heman karûbarê malperê bikar tînin da ku bi servera serîlêdana 1C re têkilî daynin. Pêkanîna xerîdar, bê guman, cihêreng in - muwekîlê zirav bi C++-ê tê nivîsandin, muwekîlê malperê bi JavaScript-ê tê nivîsandin.

Hinek dîrok

Projeya xerîdar a malperê di 2006-an de dest pê kir, bi tîmek (bi navînî) 5 kesan. Di hin qonaxên projeyê de, pêşdebiran tev li pêkanîna fonksiyonên taybetî bûn (belgeya pelgeyê, diagram, hwd.); wekî qaîdeyek, ev heman pêşdebiran bûn ku vê fonksiyonê di xerîdarê zirav de dikirin. Ewan. pêşdebiran hêmanên ku berê di C++ de çêkirine di JavaScriptê de ji nû ve nivîsandin.

Ji destpêkê ve, me ramana veguheztina otomatîkî (tevî qismî) ya koda xerîdar a nazik a C++ li xerîdarek webê ya JavaScript-ê ji ber cûdahiyên têgînî yên xurt ên di navbera her du zimanan de red kir; muwekîlê webê ji nû ve bi JavaScriptê hate nivîsandin.

Di dubarekirinên yekem ên projeyê de, xerîdarê malperê koda xerîdar bi zimanê çêkirî 1C rasterast di JavaScriptê de guherand. Muwekîlê zirav bi rengek cûda tevdigere - koda di zimanê 1C-ya çêkirî de di nav bytecode de tête berhev kirin, û dûv re ev bytecode li ser xerîdar tê şîrove kirin. Dûv re, muwekîlê webê dest pê kir ku heman tiştî bike - yekem, ew qezencek performansê da, û ya duyemîn jî, ev gengaz kir ku mîmariya xerîdarên nazik û tevneyê yek bike.

Guhertoya yekem a platforma 1C: Enterprise bi piştgiriya xerîdar a malperê di sala 2009-an de hate berdan. Di wê demê de muwekîlê malperê 2 gerok piştgirî kir - Internet Explorer û Firefox. Planên orîjînal piştgirî ji Opera re vedihewand, lê ji ber pirsgirêkên bêserûber di wê demê de bi serîlêdanên girtina serîlêdanên li Opera (ne gengaz bû ku bi 100% piştrastî bişopîne ku serîlêdan girtî ye, û di wê gavê de prosedûra qutbûnê ji servera serîlêdanê ya 1C) ji van planan pêdivî bû ku were terikandin.

Struktura projeyê

Bi tevahî, platforma 1C: Enterprise 4 projeyên ku di JavaScriptê de hatine nivîsandin hene:

  1. WebTools - pirtûkxaneyên hevpar ên ku ji hêla projeyên din ve têne bikar anîn (em jî tê de hene Pirtûkxaneya Girtina Google).
  2. Hêmana kontrolê FormattedDocument (di JavaScriptê de hem di muwekîlê zirav û hem jî di muwekîlê webê de tête bicîh kirin)
  3. Hêmana kontrolê Scheduler (di JavaScriptê de hem di muwekîlê zirav û hem jî di muwekîlê webê de tête bicîh kirin)
  4. muwekîlê Webê

Struktura her projeyê dişibe avahiya projeyên Javayê (an jî projeyên .NET - kîjan nêzîktir e); Navên me hene, û her navek di peldankek cihê de ye. Di hundurê peldankê de pel û çînên cîhê navan hene. Di projeya muwekîlê webê de nêzî 1000 pel hene.

Bi strukturî, muwekîlê webê bi piranî li jêr pergalên jêrîn dabeş dibe:

  • Navbera serîlêdana xerîdar a rêvebirin
    • Navbera serîlêdana gelemperî (menekên pergalê, panel)
    • Navbera formên birêvebirî, di nav wan de, bi qasî 30 kontrol (bişkok, cûrbecûr qadên têketinê - nivîs, hejmar, tarîx/dem, hwd., tablo, navnîş, grafîk, hwd.)

  • Modela objeyê ku ji pêşdebiran re li ser xerîdar peyda dibe (bi tevahî zêdetirî 400 celeb: modela objekta navberê ya birêvebir, mîhengên nexşeya daneyê, şêwaza şertî, hwd.)
  • Wergêrê zimanê çêkirî yê 1C
  • Zêdekirinên gerokê (ji bo fonksiyona ku di JavaScriptê de nayê destek kirin tê bikar anîn)
    • Bi krîptografiyê re dixebitin
    • Bi pelan re dixebitin
    • Teknolojiya pêkhateyên derveyî, ku dihêle ku ew hem di xerîdarên zirav û hem jî di tevneyê de werin bikar anîn

Taybetmendiyên Pêşveçûn

Pêkanîna hemî jorîn di JavaScript de ne hêsan e. Dibe ku muwekîlê webê 1C yek ji mezintirîn serîlêdanên alîgirê xerîdar e ku di JavaScript-ê de hatî nivîsandin - bi qasî 450.000 xet. Em di koda xerîdar a malperê de bi rengek çalak nêzîkatiyek objekt-oriented bikar tînin, ku xebata bi projeyek wusa mezin re hêsan dike.

Ji bo ku mezinahiya koda xerîdar kêm bikin, me pêşî obfuscatorê xwe bikar anî, û bi guhertoya platformê 8.3.6 (Kewçêr 2014) dest pê kir me dest bi karanîna kir Berhevkarê Girtina Google. Bandora karanîna di hejmaran de - mezinahiya çarçoweya xerîdar a malperê piştî tevlihevkirinê:

  • Own obfuscator - 1556 kb
  • Berhevkarê Girtina Google - 1073 kb

Bikaranîna Google Closure Compiler alîkariya me kir ku performansa muwekîlê webê li gorî obfuscatorê xwe %30 çêtir bikin. Digel vê yekê, mîqdara bîranîna ku ji hêla serîlêdanê ve hatî vexwarin 15-25% kêm bûye (li gorî gerokê ve girêdayî ye).

Google Closure Compiler bi koda objekt-oriented re pir baş dixebite, ji ber vê yekê karîgeriya wê ji bo muwekîlê malperê bi qasî ku gengaz e. Closure Compiler çend tiştên baş ji me re dike:

  • Kontrolkirina tîpa statîk a di qonaxa avakirina projeyê de (temîn dike ku em kodê bi şîroveyên JSDoc veşêrin). Encam nivîsandina statîk e, di astê de pir nêzîkê nivîsandina di C++ de ye. Ev ji bo girtina rêjeyek pir mezin a xeletiyan di qonaxa berhevkirina projeyê de dibe alîkar.
  • Kêmkirina mezinahiya kodê bi navgîniyê
  • Hejmarek xweşbîniyên koda darvekirî, mînakî, wek:
    • veguheztinên fonksiyonê yên hundurîn. Gazîkirina fonksiyonek di JavaScript-ê de operasyonek pir biha ye, û veguheztinên hundurîn ên rêbazên piçûk ên ku pir caran têne bikar anîn kodê bi girîngî bileztir dike.
    • Di dema berhevkirinê de jimartina berdewaman. Ger bilêvkirinek bi sabîtekê ve girêdayî be, dê nirxa rastîn a sabît tê de were veguheztin

Em WebStorm wekî hawîrdora pêşkeftina xerîdar a webê bikar tînin.

Ji bo analîzkirina kodê em bikar tînin soundQube, ku em analîzkerên koda statîk yek dikin. Bi karanîna analyzeran, em xerabûna kalîteya koda çavkaniya JavaScript-ê dişopînin û hewl didin ku pêşî lê bigirin.

Der barê muwekîlê webê 1C

Me çi pirsgirêk çareser kirin/dikirin?

Di dema cîbicîkirina projeyê de, em rastî gelek pirsgirêkên balkêş hatin ku divê em çareser bikin.

Daneyên bi serverê û di navbera pencereyan de biguherînin

Rewşên ku tê de nezelalbûna koda çavkaniyê dikare di xebata pergalê de asteng bike hene. Koda ji derveyî koda îcrakar a xerîdar a malperê, ji ber nezelalbûnê, dibe ku navên fonksiyon û parametreyên ku ji yên ku koda me ya îcrakar hêvî dike cûda bin. Koda derve ji bo me ev e:

  • Koda ku di forma strukturên daneyê de ji serverê tê
  • Koda ji bo pencereya serîlêdana din

Ji bo ku dema ku bi serverê re têkilî daynin ji tevliheviyê dûr bisekinin, em etîketa @expose bikar tînin:

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

Û ji bo ku dema ku bi pencereyên din re têkilî daynin, ji tevliheviyê dûr bikevin, em bi navê navgînên îxrackirî (navberên ku tê de hemî rêbaz têne derxistin) bikar tînin.

/**
 * Экспортируемый интерфейс контрола 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 (){}

Berî ku ew bibe serdest, me Virtual DOM bikar anî)

Mîna hemî pêşdebiran ku bi UI-yên tevnvîsê yên tevlihev re mijûl dibin, me zû fam kir ku DOM ji bo xebitandina bi navgînên bikarhêner ên dînamîkî re nebaş e. Hema di cih de, analogek Virtual DOM-ê hate bicîh kirin da ku karê bi UI-ê re xweşbîn bike. Di dema pêvajoya bûyerê de, hemî guhertinên DOM-ê di bîranînê de têne hilanîn û, tenê dema ku hemî operasyon qediyan, guhertinên berhevkirî li ser dara DOM-ê têne sepandin.

Optimîzekirina muwekîlê webê

Ji bo ku muwekîlê malpera me zûtir bixebite, em hewl didin ku kapasîteyên geroka standard (CSS, hwd.) herî zêde bikar bînin. Bi vî rengî, panela fermanê ya formê (hema hema li ser her forma serîlêdanê ye) bi taybetî bi karanîna amûrên gerokê, bi karanîna sêwirana dînamîkî ya li ser bingeha CSS-ê tê pêşkêş kirin.

Der barê muwekîlê webê 1C

Îmtîhanê

Ji bo ceribandina fonksîyonel û performansê, em amûrek xwedan (ku bi Java û C++ hatî nivîsandin), û hem jî komek ceribandinên ku li ser jorîn hatine çêkirin bikar tînin. Selenium.

Amûra me gerdûnî ye - ew dihêle hûn hema hema her bernameyek pencereyê biceribînin, û ji ber vê yekê ji bo ceribandina hem xerîdarek zirav û hem jî xerîdarek malperê maqûl e. Amûr kiryarên bikarhênerê ku çareseriya serîlêdana 1C di pelek skrîptê de da destpêkirin tomar dike. Di heman demê de, wêneyên qada xebatê ya ekranê - standard - têne tomar kirin. Dema ku çavdêriya guhertoyên nû yên muwekîlê malperê dikin, nivîs bêyî beşdariya bikarhêner têne lîstin. Di rewşên ku dîmenê di her gavê de bi referansê re hev nagire, ceribandin bi serneketî tê hesibandin, piştî ku pisporek kalîteyê lêkolînek dike da ku diyar bike ka ev xeletiyek e an guhertinek plansazkirî ye di tevgera pergalê de. Di rewşa tevgerên plansazkirî de, standard bixweber bi yên nû têne guheztin.

Amûr di heman demê de performansa serîlêdanê bi rastbûna heya 25 milîsaniyeyan jî dipîve. Di hin rewşan de, em beşên skrîptê dişoxilînin (mînak, têketina fermanê çend caran dubare dikin) da ku hilweşîna dema darvekirinê bi demê re analîz bikin. Encamên hemî pîvandinê ji bo analîzê di têketinek têne tomar kirin.

Der barê muwekîlê webê 1C
Amûra ceribandinê û serîlêdana me ya di bin ceribandinê de ye

Amûra me û Selenium hevdu temam dikin; Mînakî, heke hin bişkokek li ser yek ji ekranan cîhê xwe guhertibe, dibe ku Selenium vê yekê neşopîne, lê amûrê me dê bibîne, ji ber ku pîxel-bi-pixel berhevdana dîmenê bi standard re dike. Amûr di heman demê de dikare pirsgirêkên bi hilberandina têketina ji klavyeyê an mişkê bişopîne, ji ber ku ev tam ya ku ew dubare dike ev e.

Testên li ser her du amûran (yên me û Selenium) ji çareseriyên serîlêdana me senaryoyên xebatê yên tîpîk dimeşînin. Piştî avakirina rojane ya platforma 1C: Enterprise ceribandin bixweber têne destpêkirin. Ger skrîpt hêdîtir in (li gorî çêkirina berê), em sedema hêdîbûnê lêkolîn dikin û çareser dikin. Pîvana me hêsan e - avakirina nû divê ji ya berê ne hêdîtir bixebite.

Pêşdebir amûrên cihêreng bikar tînin da ku bûyerên hêdîbûnê lêkolîn bikin; bi giranî tê bikaranîn Dynatrace AJAX Edition şîrketa hilberînê DynaTrace. Têketinên pêkanîna operasyona pirsgirêk li ser avahiyên berê û nû têne tomar kirin, paşê têketin têne analîz kirin. Di heman demê de, dema darvekirina operasyonên yekane (di milî çirkeyan de) dibe ku ne faktorek diyarker be - pêvajoyên karûbar ên wekî berhevkirina çopê bi periyodîk di gerokê de têne destpêkirin, ew dikarin bi dema pêkanîna fonksiyonan re li hev bikin û wêneyê xera bikin. Parametreyên têkildar di vê rewşê de dê hejmara rêwerzên JavaScript-ê yên hatine darvekirin, hejmara operasyonên atomî yên li ser DOM-ê, hwd. Ger di guhertoyek nû de hejmara talîmatên/xebatên di heman skrîptê de zêde bûne, ev hema hema her gav tê wateya daketina performansê ya ku divê were rast kirin.

Di heman demê de, yek ji sedemên daketina performansê dibe ku ev be ku Google Closure Compiler ji ber hin sedeman nekaribû şûna fonksiyonê ya hundurîn pêk bîne (mînak, ji ber ku fonksiyon vegerî an virtual e). Di vê rewşê de, em hewl didin ku rewşê bi ji nû ve nivîsandina koda çavkaniyê rast bikin.

Berfirehkirina gerokê

Dema ku çareseriyek serîlêdanê hewceyê fonksiyonek ku di JavaScriptê de tune ye, em pêvekên gerok bikar tînin:

Berfirehkirina me ji du beşan pêk tê. Beşa yekem ew e ku jê re pêvekek gerokê tê gotin (bi gelemperî pêvekên ji bo Chrome û Firefox-ê bi JavaScript-ê têne nivîsandin), ku bi beşa duyemîn re têkilî daynin - pêvekek binary ku fonksiyona ku em hewce dike bicîh tîne. Pêdivî ye ku were gotin ku em 3 guhertoyên pêvekên binary dinivîsin - ji bo Windows, Linux û MacOS. Berfirehkirina binary wekî beşek ji platforma 1C: Enterprise tête peyda kirin û li ser servera serîlêdana 1C-ê ye. Dema ku ji bo yekem car ji xerîdarek malperê tê gazî kirin, ew li ser komputera xerîdar tê dakêşandin û di gerokê de tê saz kirin.

Dema ku di Safari de dixebitin, pêvekên me NPAPI bikar tînin; dema ku di Internet Explorer-ê de dixebitin, ew teknolojiya ActiveX bikar tînin. Microsoft Edge hîna pêvekan piştgirî nade, ji ber vê yekê xerîdara webê ya tê de bi qedexeyan dixebite.

Pêşveçûna bêtir

Yek ji peywirên tîmê pêşkeftina xerîdar a malperê pêşdebirina fonksiyonê ye. Pêdivî ye ku fonksiyona xerîdarê malperê bi fonksiyona xerîdar a zirav re wekhev be; hemî fonksiyonên nû hem di xerîdarên nazik û hem jî di tevnvîsê de bi hevdemî têne bicîh kirin.

Karên din pêşvebirina mîmarî, refaktorkirin, başkirina performans û pêbaweriyê ne. Mînakî, yek ji rêwerzan tevgerek din a berbi modelek xebata asynkron e. Hin fonksiyonên muwekîlê webê niha li ser modelek hevdem a danûstendina bi serverê re hatî çêkirin. Modela asynchronous naha di gerokan de (û ne tenê di gerokan de) têkildartir dibe, û ev me neçar dike ku em muwekîlê webê biguhezînin bi guheztina bangên hevdemî bi yên asynkron re (û li gorî vê kodê ji nû ve veguhezînin). Veguheztina gav bi gav ber bi modelek asynkron ve bi hewcedariya piştgirîkirina çareseriyên serbest û adaptasyona wan hêdî-hêdî tê rave kirin.

Source: www.habr.com

Add a comment