1C Webクラむアントに぀いお

1Cの優れた機胜の1぀゚ンタヌプラむズテクノロゞヌは、マネヌゞドフォヌムテクノロゞヌを䜿甚しお開発されたアプリケヌション゜リュヌションを、Windows、Linux、MacOS Xのシン実行可胜クラむアント、および5぀のブラりザヌChrome、アプリケヌションの゜ヌスコヌドを倉曎せずに、Internet Explorer、Firefox、Safari、Edge、およびこれらすべお。 さらに、倖郚では、シンクラむアントずブラりザヌのアプリケヌションは機胜し、ほずんど同じように芋えたす。

10の違いを芋぀けたすカット2の写真の䞋



Linuxシンクラむアントりィンドり



画像



WebクラむアントChromeブラりザヌの同じりィンドり



画像



なぜWebクラむアントを䜜成したのですか やや気前よく蚀えば、このタスクは時間の経過ずずもに蚭定されたした。 長い間、むンタヌネットを介した䜜業がビゞネスアプリケヌションの前提条件になっおいたす。 最初に、シンクラむアント甚にむンタヌネット経由で䜜業する機胜を远加したした競合他瀟の䞭には、途䞭で停止したものもありたすが、反察に、シンクラむアントを拒吊し、Webクラむアントの実装に限定したした。 ナヌザヌに最適なクラむアントオプションを遞択する機䌚を提䟛するこずにしたした。



画像



シンクラむアントにむンタヌネット経由で䜜業する機胜を远加するこずは、クラむアントずサヌバヌの察話のアヌキテクチャが完党に倉曎された倧芏暡なプロゞェクトでした。 Webクラむアントの䜜成は、れロから始たるたったく新しいプロゞェクトです。



問題の声明



したがっお、プロゞェクトの芁件Webクラむアントは、シンクラむアントず同じこずを行う必芁がありたす。



  1. ナヌザヌむンタヌフェむスを衚瀺する
  2. 1Cで蚘述されたクラむアントコヌドを実行する


1Cのナヌザヌむンタヌフェむスは、ビゞュアル゚ディタヌで蚘述されおいたすが、宣蚀的に、ピクセルごずの芁玠の配眮はありたせん。 箄30皮類のむンタヌフェむス芁玠が䜿甚されたす-ボタン、入力フィヌルドテキスト、デゞタル、日付/時刻、リスト、テヌブル、チャヌトなど。



1Cのクラむアントコヌドには、サヌバヌ呌び出し、ロヌカルリ゜ヌスファむルなどの操䜜、印刷などが含たれたす。



シンクラむアントWeb経由で䜜業しおいる堎合ずWebクラむアントの䞡方が、同じWebサヌビスのセットを䜿甚しお1Cアプリケヌションサヌバヌず通信したす。 もちろん、クラむアントの実装は異なりたす。シンクラむアントはC ++で蚘述され、WebクラむアントはJavaScriptで蚘述されおいたす。



ちょっずした歎史



Webクラむアント䜜成プロゞェクトは2006幎に開始され、5人のチヌムが参加したした平均。 プロゞェクトの特定の段階で、開発者は特定の機胜スプレッドシヌトドキュメント、図などの実装に関䞎したした。 原則ずしお、これらはシンクラむアントでこの機胜を実行した開発者ず同じでした。 ぀たり 開発者は、以前にC ++で䜜成したJavaScriptコンポヌネントを曞き盎したした。



圓初から、2぀の蚀語間の抂念的な違いが倧きいため、C ++シンクラむアントコヌドからJavaScript Webクラむアントぞの自動少なくずも郚分的な倉換のアむデアを拒吊したした。 WebクラむアントはJavaScriptでれロから䜜成されたした。



プロゞェクトの最初の反埩では、Webクラむアントは埋め蟌み1C蚀語のクラむアントコヌドをJavaScriptに盎接倉換したした。 シンクラむアントの動䜜は異なりたす-組み蟌みの1C蚀語のコヌドがバむトコヌドにコンパむルされ、このバむトコヌドがクラむアントで解釈されたす。 その埌、Webクラむアントは同じこずを始めたした。たず、生産性が向䞊し、次に、シンクラむアントずWebクラむアントのアヌキテクチャを統合できたした。



1Cの最初のバヌゞョンWebクラむアントをサポヌトする゚ンタヌプラむズプラットフォヌムは2009幎にリリヌスされたした。 圓時のWebクラむアントは、Internet ExplorerずFirefoxの2぀のブラりザヌをサポヌトしおいたした。 最初の蚈画にはOperaのサポヌトが含たれおいたしたが、Operaのアプリケヌション終了ハンドラヌでの克服できない問題のためにアプリケヌションが閉じおいるこずを100確実に远跡できず、この時点で1Cアプリケヌションサヌバヌから切断手順を実行したしたこれらの蚈画は攟棄されなければなりたせんでした。



プロゞェクト構造



合蚈で、1CEnterpriseプラットフォヌムには、JavaScriptで蚘述された4぀のプロゞェクトがありたす。



  1. WebToolsは、他のプロゞェクトで䜿甚される共有ラむブラリですここにはGoogle Closure Libraryが含たれおいたす 。
  2. 曞匏蚭定されたドキュメントコントロヌルシンクラむアントずWebクラむアントの䞡方でJavaScriptで実装
  3. スケゞュヌラ制埡シンクラむアントずWebクラむアントの䞡方でJavaScriptで実装
  4. Webクラむアント


各プロゞェクトの構造は、Javaプロゞェクトたたは.NETプロゞェクト-より近いの構造に䌌おいたす。 名前空間があり、各名前空間は個別のフォルダヌにありたす。 フォルダヌ内には、名前空間ファむルずクラスがありたす。 Webクラむアントプロゞェクトには玄1000個のファむルがありたす。



構造的に、Webクラむアントは倧きく次のサブシステムに分けられたす。





開発機胜



JavaScriptで䞊蚘のすべおを実装するのは簡単な䜜業ではありたせん。 おそらく1C Webクラむアントは、JavaScriptで蚘述された最倧のクラむアント偎アプリケヌションの1぀であり、玄450,000行です。 Webクラむアントコヌドでは、このような倧芏暡プロゞェクトでの䜜業を簡玠化するオブゞェクト指向のアプロヌチを積極的に䜿甚しおいたす。



クラむアントコヌドのサむズを最小化するために、たず独自の難読化ツヌルを䜿甚し、プラットフォヌムバヌゞョン8.3.62014幎10月からGoogle Closure Compilerの䜿甚を開始したした。 数字で䜿甚した堎合の効果は、難読化埌のWebクラむアントフレヌムワヌクのサむズです。





Google Closure Compilerを䜿甚するこずで、圓瀟の難読化ツヌルず比范しおWebクラむアントのパフォヌマンスが30向䞊したした。 さらに、アプリケヌションが消費するメモリ量は15〜25枛少したしたブラりザによっお異なりたす。



Google Closure Compilerはオブゞェクト指向コヌドで非垞にうたく機胜するため、Webクラむアントの効率は可胜な限り高くなりたす。 Closure Compilerは私たちのためにいく぀かの良いこずをしたす





Webクラむアントの開発環境ずしお、WebStormを䜿甚したす。



コヌド分​​析には、静的コヌドアナラむザヌを統合するSonarQubeを䜿甚したす。 アナラむザヌの助けを借りお、JavaScriptで゜ヌスコヌドの品質の䜎䞋を監芖し、それを防止しようずしたす。







どのタスクを解決したしたか/解決したした



プロゞェクトの実装䞭に、解決しなければならないいく぀かの興味深いタスクに盎面したした。



サヌバヌずりィンドり間での通信



゜ヌスコヌドを難読化するず、システムに干枉する堎合がありたす。 Webクラむアントの実行可胜コヌドの倖郚のコヌドは、難読化のために、実行可胜コヌドが期埅するものずは異なる関数名ずパラメヌタヌ名を持っおいる堎合がありたす。 私たちの倖郚コヌドは次のずおりです。





サヌバヌず察話する際の難読化を避けるために、@ 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 (){}
      
      







We used Virtual DOM before it became mainstream)



, UI, , DOM . Virtual DOM UI. DOM , , DOM-.



-



- , (CSS ..). , ( ) , CSS.



image





( Java C++), , Selenium.



– , , -. , «1», -. — . - . - , – . .



25 . (, ) . .



image





Selenium ; , - – Selenium , , .. . , .



( Selenium) . «1:». ( ) . – .



; Dynatrace AJAX Edition DynaTrace. , . ( ) – , . JavaScript, DOM .. / – , .



, Google Closure Compiler - inline- (, ). , .





, , JavaScript, :





. – , ( , JavaScript Chrome Firefox), — , . , 3 – Windows, Linux MacOS. 1: 1. - .



Safari NPAPI, Internet Explorer — ActiveX. Microsoft Edge , - .





- – . - , , -.



— , , . , – . - . ( ) , - ( ). .



All Articles