Circa 1C clientem telam

Una e pulchris notis 1C:Inceptis technologicis est quod solutionem applicationis, technologiarum formarum tractatarum utens effectam, deduci potest tam in tenui cliente pro Fenestra, Linux, MacOS X, et tamquam clientelam interretialem pro 5 navigatoribus - Chrome, Penitus Rimor, Firefox, Safari, Edge, et haec omnia sine mutatione fontis e codice adhibito. Quin etiam extrinsecus applicatio in tenui cliente et in functionibus pasco et speciebus fere idem est.
Differentias 10 reperies (2 imagines sub incisis);

Cliens tenuis fenestra in Linux:

Circa 1C clientem telam

Eadem fenestra in clientela interretiali (in navigatro Chrome);

Circa 1C clientem telam

Cur telam clientem facimus? Ut id aliquantum patheticus sit, tempus tale nobis negotium dedit. In Interreti laborans iam diu requisitum est ad negotia applicationes. Primum facultatem operandi per Internet pro tenui cliente nostro addidimus (aliquot competitores nostri obiter hoc substiterunt; alii e contra tenuem clientem reliquerunt et se ad clientem telam exsequendam limitarunt). Placuit nobis utentibus occasionem eligendi clientem optio dare, quae illis maxime conveniat.

Circa 1C clientem telam

Addens facultates telae fundatae ad tenui cliente magnum consilium erat cum architectura clientis servientis integram mutationem. Clientem interretialem creando, consilium omnino novum est, a scabro incipiens.

DE PECCATO quaestio

Ita, documentum requisita: client telalis idem facere debet ac tenuis client, scilicet:

  1. Propono user interface
  2. Iudicium clientis in codice 1C lingua

Usoris interface in 1C in editore visuali describitur, sed declarative sine pixel-by-pixel elementorum dispositione; Tria circiter duodecim genera elementorum instrumentorum adhibentur - globuli, agri inputes (textus, numericus, dies/time), tabulae, tabulae, graphae, etc.

Client codicem in lingua 1C continere potest vocatos servers, operando cum opibus localibus (lima, etc.), typis imprimendis, et multo magis.

Tam tenuis cliens (per telam laborans) et clientis interretiali paro of interretialis utuntur iisdem officiis ad communicandum cum servo 1C applicationis. Exsecutiones clientes, sane, diversae sunt - tenui cliente scriptum est in C++, interreti clientis scriptum est in JavaScript.

A paulo historia

Tela clientis exertus anno 2006 incepit, cum biga (in mediocris) 5 hominum. In quibusdam propositis stadiis, tincidunt implicabantur ad certas functiones efficiendas (spreadsheet document, diagrammata, etc.); fere iidem erant tincidunt qui in tenui clientelam hanc fecerunt functionem. Illae. developers re-scripsit componentes in JavaScript quod prius creaverat in C++.

Inde ab initio, notionem cuiuslibet automatis (vel partialis) conversionis C++ clientis tenuioris codicis in JavaScript clientem rejecimus ob validas differentias rationis inter duas linguas; client interretialis in JavaScript a VULNUS scripta est.

In primis iterationibus propositi, clientis telae clientis codicem converterunt in lingua aedificata-in 1C directe in JavaScript. Tenuis cliens aliter agit - codicem in lingua 1C constructo in bytecode compilata est, ac deinde hoc bytecode in cliente interpretatur. Postmodum client interretialis idem facere coepit - primum quaestum praestitum dedit, secundo, effecit ut tenuium clientium telae architecturam uniat.

Prima versio 1C:Intraprise suggestum clientis web subsidii anno 2009 dimissum est. Tela clientis eo tempore navigatores 2 sustentaverunt - Penitus Rimor et Firefox. Consilia originalia subsidia pro Opera comprehenderunt, sed propter difficultates inexsuperabiles eo tempore cum applicatione tractatores in Opera (non potuit pervestigare cum 100 certitudine applicationem clauderetur et tunc exsequi disiunctio procedendi. 1C schedula servo) ab his consiliis relinquenda erat.

Project structure

In summa, 1C:Enterprise suggestum habet 4 incepta scripta in JavaScript:

  1. WebTools - libraries participatur ab aliis inceptis adhibitis (etiam includimus Google Claustrum Library).
  2. Imperium elementum FormattedDocument (JavaScript impletur in utroque cliente tenui et interretiali client)
  3. Imperium elementum Scheduler (JavaScript impletur in utroque cliente tenui et interretiali client)
  4. Web client

Structura uniuscuiusque rei similem habet structuram inceptis Javae (vel .NET inceptis - uter propius); Spatia nomina habemus, et singula nomina spatii in folder separato sunt. Intus folder lima sunt et spatiis generibus nominandi. Circa 1000 files in clientela interreti sunt.

Structure client interretialis in subsystematis sequentibus late dividitur:

  • Accurantur clientem application interface
    • General applicatione interface (ratio menus, tabulae)
    • Interfacies formarum tractatarum, inter alia, inter alia, circiter 30 controllata (bullarum, variae species agrorum initus - textuum, numerorum, diei/time, etc., tabularum, tabularum, graphorum, etc.).

  • Objectum exemplar praesto sunt tincidunt in cliente (per 400 rationes in summa: exemplar objectum interfaciendi administratum, unctiones positivas notitias, stylas conditionales, etc.)
  • Interpres constructum in lingua 1C
  • Extensiones pasco (propter functionality non valet in JavaScript)
    • Operantes cum cryptography
    • Operantes cum files
    • Technologia partium externarum permittens ea in clientibus tam tenui et interreti uti

Progressus features

Exsequens omnia supra in JavaScript non est facilis. Fortasse cliens 1C interretialis est unus e maximis applicationibus clientium laterum in JavaScript - circiter 450.000 linearum. Active utimur accessu obiecti ordinati in codice clientis interreti, quod simplificat opus cum tanto projecto.

Ad magnitudinem codicem clientis extenuandum, obfuscatorem nostrum primum usi sumus, et a versione suggesta 8.3.6 (October 2014) uti incepimus. Google Claustrum Compiler. Effectus usus in numeris - magnitudinem interretialem clientem compage post obfuscationem:

  • Proprium obfuscatorem - 1556 kb
  • Google Claustrum Compiler – 1073 kb

Compiler Google clausurae nos adiuvit utendo emendare clientem interretialem per 30% ad obfuscatorem nostrum comparatum. Praeterea, moles memoriae ab applicatione consumptae ab 15-25% decrevit (prout in navigatro).

Google Clausurae Compiler optime cum codice obiecti ordinato operatur, cuius efficacia ad clientem interretialem quam altissima est. Pauca nobis bona clausurae Compiler facit;

  • Genus static iniecta ad propositum scaenam aedificandam (curatur ut codicem cum JSDoc annotationibus tegimus). Effectus est typing statice, proximus in gradu ad typing in C++. Hoc iuvat ad maiusculas recipis errores recipiendos in scaena projectionis compilatio.
  • Reducing code magnitudine per obfuscation
  • Aliquot optimizationes codicis exsecuti, exempli gratia, ut:
    • munus substitutiones inline. Vocatio functio in JavaScript operandi satis pretiosa est, et inline substitutiones frequentius adhibitae modicis modis significanter codicem accelerant.
    • Constans computatis ad tempus ordinandum. Si expressio constanti dependet, actualis valoris constantis in eam substituetur

WebStorm utimur sicut nostra interretiali ambitus clientis progressio.

Ad codicem analysis utimur soundQubeubi analysres codicem staticum integramus. Utentes analysres, degradationem qualitatis JavaScript fons codice admonemus ac prohibemus.

Circa 1C clientem telam

Quae problemata non / solvendo sumus?

In exsequendo project, complures quaestiones interesting quas solvere habuimus invenimus.

Commutatio data cum servo ac inter fenestras

Loca sunt ubi obfuscatio fontis codicis impedire potest operationem systematis. Codex externus ad textus exsecutabilis huius codicis, ob obfuscationes, munus habere potest et nomina parametri, quae ab iis quae nostrum codicem exsecutabile expectet. Codex externus apud nos est:

  • Codex a servo in forma structurarum notitiarum
  • Ad aliam applicationem Code fenestra

Ad obfuscationem vitandam cum in calculonis servi, @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;
}

Et ad obfuscationes vitandas cum mutuo fenestris aliis, interfaces exportatis sic dictis utimur (interfaces in quibus omnes modi exportantur).

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

Domum lorem ipsum usi sumus antequam amet factus est)

Sicut omnes tincturae cum complexu interretiali UIs tractantes, cito intelleximus domnum male aptum esse ad operandum cum usore dynamico interfaces. Prope statim, analogum DOMI Virtualis cum UI ad optimize opus effectum est. In eventu processus, omnes mutationes dom in memoria conditae sunt et, solum cum omnes operationes peractae sunt, mutationes congestae ad arborem dom applicantur.

Optimising interretialem clientem

Ut cliens telae nostrae velocius laboremus, conamur modulo navigandi facultates (CSS, etc.) ad maximum uti. Ita forma mandati tabulae (in omnibus fere applicationis speciebus posita) solum instrumentis pasco utens redditur, dynamica layout utens in CSS.

Circa 1C clientem telam

temptationis

Pro functione et peritia probandi, instrumento proprietario (in Java et C++) scripto utimur, necnon comitia testium superpositae aedificatae. Selenium.

Instrumentum nostrum universale est - sinit te programmata fenestrata paene probare, et ideo aptum est ad probandum tam tenui cliente quam interreti clienti. Instrumentum refert actiones utentis qui 1C solutionem applicationis in tabellam scriptam excussit. Eodem tempore imagines operariorum scrinii-signa memorantur. Cum novas clientelas interretiales versiones vigilantia, scripta sine participatione usoris ludunt. In casibus in quibus tortor quovis gradu referentii non congruit, probatio consideratur defecit, postquam qualis artifex investigationem agit ad determinare utrum error sit vel intentio mutatio in moribus systematis. In agendis de institutis, signa automatice reponuntur cum novis.

Instrumentum etiam in applicatione perficientur cum accuratione usque ad viginti quinque millium secundorum mensurat. In nonnullis casibus, partes scriptionis ansam (exempli gratia pluries repetentes ordinem ingressum) ad tempus super tempus exsecutionis degradationem resolvere. Omnium mensurarum eventus notantur in analysi stipes.

Circa 1C clientem telam
Nostra probatio instrumentum et applicationem sub test

Instrumentum nostrum et Selenium inter se complent; exempli gratia, si globulum aliquod in uno e telariis locum suum mutavit, Selenium hoc non indagare potest, sed instrumentum nostrum animadvertet, quod pixel-by-pixel comparationem screenshots cum vexillo facit. Instrumentum etiam problemata indagare potest cum initus e tincidunt vel mure processui, cum id ipsum sit quod effingit.

Testimenta in utroque instrumento (nostro et Selenium) currunt laboris typici missionum a solutionibus applicationis. Testimonia automatice deductae sunt post cotidianum 1C:Inceptum suggestum. Si scripta tardiora sunt (comparatur ad priorem constructum), causam tarditatis investigamus et resolvimus. Nostra norma simplex est - nova constructio non tardior quam prior labor debet.

Tincidunt utantur instrumentis diversis ad incidentes investigandas retardationis; maxime usus est Dynatrace AJAX Edition productio comitatu DynaTrace. Tigna exsecutionis operationis problematicae in prioribus ac novis aedificationibus scripti sunt, deinde omnia enucleata sunt. Eodem tempore exsecutio tempus singularum operationum (in milliseconds) non potest esse processus decisivus - servitii processuum ut purgamentum collectionis periodice in navigatro emissae, cum exsecutioni tempus functionum innectere possunt et picturam distorquent. Plures parametri hoc casu pertinentes essent numerus JavaScript de mandatorum facto, numerus operationum atomicarum in dom, etc. Si numerus mandatorum/operationum eiusdem scriptionis in nova versione auctus est, hoc fere semper significat guttam in perficiendi quod corrigi debet.

Item, una ex causis guttae in executione potest esse quod Google Claustrum Compiler ob aliquam causam inline substitutionem functionis praestare non potuit (exempli gratia, quia munus est recursivum vel virtuale). Hoc in casu, condicionem emendare conamur fons codicis rescribens.

Extensiones pasco

Cum solutio applicationis eget functionality quae in JavaScript non est, extensiones pasco utimur:

extensiones nostrae duabus partibus constant. Prima pars est quae extensio pasco appellatur (extensiones plerumque pro Chrome et Firefox scripta in JavaScript), quae inter se occurrunt cum secunda parte - extensio binaria, quae ad munus functionitatis opus est. Memorandum est nos scribere 3 versiones extensionum binarum - pro Fenestra, Linux et MacOS. Extensio binaria suppletur ut pars 1C:Incepti tribunal et in 1C applicatione server sita est. Cum primum e cliente interreti vocatur, ad computatorium clientis recepta est et in navigatro installatur.

Cum in Safari currit, extensiones nostrae utuntur NPAPI, cum in Penitus Rimor currit, technicae ActiveX utuntur. Microsoft Edge nondum extensiones sustinet, ideo client in ea cum restrictionibus operatur.

longius progressus

Una munerum evolutionis clientis interretialis est ulterior progressio functionis. Cliens functionis interretialis idem esse debet cum functione tenui clientis, omnes novae functiones simul efficiuntur in clientibus raris et interretialibus.

Alia opera includunt architecturae evolvere, reficere, emendare, perficiendi et constantiae. Exempli gratia, una directionum est ulterior motus ad exemplar operis asynchronum. Nonnulli clientis functionis interretiales nunc in synchrono exemplari commercii cum ministris structi sunt. Exemplar asynchronum nunc magis pertinet in navigatoribus (et non solum in navigatoribus), quod nos cogat clientem interretialem mutare, repositoque synchrono vocat asynchronos (ac proinde codicem restituendo). Gradualis transitus ad exemplar asynchronum explicatur per necessitatem solutionis solutionis subsidii et eorum gradatim adaptationis.

Source: www.habr.com

Add a comment