рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Microsoft рдиреЗ
рдирдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреЗрд╢ рдХреАред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ Microsoft Visual Studio рдФрд░ рдЕрдиреНрдп рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд┐рддрдиреА рдЙрдкрдпреЛрдЧреА рд╣реИ, рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╣рд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдЖ рдЧрдпрд╛ рд╣реИ
рдПрдЪрдЯреАрдПрдордПрд▓ + рдЬреЗрдПрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдиреЗ рднреА рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреГрд╢реНрдп рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ: рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (
рдПрдХ ,
рджреЛ ,
рддреАрди ,
рдЪрд╛рд░, рдФрд░ рдЗрд╕реА рддрд░рд╣), рдФрд░ рд╕рд░рд▓ рддрдХрдиреАрдХ, рдЬреИрд╕реЗ рдХрд┐:
var StringTemplate = "<div class=\"{Flag}\" >" + "<p class=\"name\" >{Name}</p>" + "<p class=\"message\" >{Text}</p>" + "<p class=\"date\" >{Date}</p>" + "</div>", html = "", Container = document.getElementById('container2'); for (var i = 0; i < TestDataLength; i++) { html += StringTemplate .replace(/\{Flag\}/g, TestData[i].Out ? "message out" : "message") .replace(/\{Name\}/g, TestData[i].Name || "") .replace(/\{Text\}/g, TestData[i].Text || "") .replace(/\{Date\}/g, TestData[i].Date.toLocaleTimeString()); } Container.innerHTML = html;
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╛рдж рдХреА рд╡рд┐рдзрд┐, рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рдЧрдарди рдХреЗ рдмрд╛рдж рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдЖрдк рдЙрд╕ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП id рдпрд╛ data-id рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдпрд╛ querySelector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди DOM рдЦреЛрдЬрдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред
рдХреНрд▓реЛрдЬрд░ рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╕рдВрджреАрджрд╛ рджреЛрд╕реНрдд рд╣реИрдВ!
рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ DOM рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ: document.createElement (), document.createTextNode (), рдФрд░ (рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ) document.createAttr ()ред рдЗрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЖрдВрддрд░рд┐рдХ HTML
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ
рдзреАрдорд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдкреЗрдЬ рдХреЛрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреБрдЫ рдЪреАрдиреА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЯрдордкрд▓рд╛рдЯрд░ рдореЙрдбреНрдпреВрд▓ рдФрд░ рддреАрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдПрдВрдЧреЗ рдФрд░ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдПрдВрдЧреЗ:
module Templater { export function Element(TagName: string, Attributes: Object) : HTMLElement { var item:HTMLElement = document.createElement(TagName); for (var p in Attributes) if (typeof(Attributes[p]) == "string") item.setAttribute(p, Attributes[p]); else if (Attributes[p] instanceof Attr) item.setAttributeNode(Attributes[p]); return item; } export function Text(Text: string): Text { return document.createTextNode(Text); } export function Nest(Element: HTMLElement, Items: any[]): HTMLElement { var l = Items.length; for (var i = 0; i < l; i++) if (Items[i]) Element.appendChild(Items[i]); return Element; }
рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЯреИрдЧ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдиреЗрд╕реНрдЯ - рддрддреНрд╡реЛрдВ рдФрд░ рдкрд╛рда рдХреА рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ - рд╕рд┐рд░реНрдл document.createTextNode () рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рдп;
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ
рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рдиреАрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рд╕рднреНрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдкрддреНрд░ рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рддрддреНрд╡ рд╣реИред рдЪрд▓реЛ рд╕реНрдкрд╖реНрдЯ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:
export class Block { constructor (public Element: HTMLElement, public Binding) { } }
рдЦреИрд░, рдФрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рддрддреНрд╡ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдЧреА:
export class Template { constructor (public Create: { (Element: { (TagName: string, Attributes: Object): HTMLElement; }, Nest: { (Element: HTMLElement, Items: any[]): HTMLElement; }, Text: { (Text: string): Text; }) : Block; }, public Update: { (Element: Block, Data); }) { } public Make(Data) { var item = this.Create(Element, Nest, Text); this.Update(item, Data); return item; } }
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдШрдЯрдХ рдбреЗрд╡рд▓рдкрд░ рдФрд░ рдШрдЯрдХ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрд╕рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЯреЗрдореНрдкрд▓реЗрдЯ:
import T = Templater; var myItem = new T.Template( (Element, Nest, Text) => { var Name, Date, Text, Flag, Container; Nest(Container = Element('div', { 'class': Flag = document.createAttribute("class") } ), [ Name = Element('p', { 'class': 'name' }), Text = Element('p', { 'class': 'text' }), Date = Element('p', { 'class': 'date' }) ]); return new T.Block(Container, { Name: Name, Date: Date, Text: Text, Flag: Flag, Container: Container }); }, (Element: T.Block, Data) => { var b = Element.Binding; b.Name.innerText = Data.Name || ""; b.Date.innerText = Data.Date.toLocaleTimeString(); b.Text.innerText = Data.Text || ""; b.Flag.nodeValue = "message " + (Data.Out == true ? "out" : ""); });
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдФрд░ рд▓рд╛рдн рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ - рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди (рддрд░реНрдХреЛрдВ) рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб => {рдХреЛрдб}ред рдпрд╣ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░реНрдХ (рддрддреНрд╡, рдиреЗрд╕реНрдЯ, рдкрд╛рда) рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ: рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реАрдзрд╛ рд╕рдВрджрд░реНрдн рдПрдХ рд╕рдВрдХреЗрддрдХ рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдПред рдпреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдмрд╕ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди (рдмрдирд╛рдПрдБ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрддреНрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЬреЛрдбрд╝реА (рддрддреНрд╡, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпреВрдмрд╛рдЧ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП QuerySelector рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди (рдЕрдкрдбреЗрдЯ) рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рддрддреНрд╡реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ
рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдкреБрд░рд╛рдиреЗ .NET рдореЗрдВ рд╣реИ
module Example { export class ExampleData { constructor (public Name: string, public Date: Date, public Text: string, public Out: bool) { } public static GetExampleData(count: number): any[] { var result = [], ExampleText = "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit...", NameA = "John Doe", NameB = "Jane Doe", StartDate = new Date(), Interval = 300; for (var i = 0; i < count; i++) { result.push(new ExampleData( i % 2 == 1 ? NameA : NameB, StartDate, ExampleText, i % 2 == 1)); StartDate = new Date(StartDate.getTime() + Interval); } return result; } } }
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЖрдирдиреНрджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрд░реНрде C- рдЬреИрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рд╣реИ - рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рд▓рд┐рдВрдХ, рдФрд░ рди рдХрд┐ "рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ-рдХреБрдЫ"ред
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ
рдХреЛрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд░рд╣рддрд╛ рд╣реИ:
window.onload = () => { var TestDataLength = 1500, TestData = Example.ExampleData.GetExampleData(TestDataLength), Container = document.getElementById('container1'); var TestStart = new Date(); for (var i = 0; i < TestDataLength; i++) Container.appendChild(myItem.Make(TestData[i]).Element); var TestEnd = new Date(); console.log("Test completed", { time: TestEnd.getTime() - TestStart.getTime(), count: TestDataLength }); var StringTemplate = "<div class=\"{Flag}\" >" + "<p class=\"name\" >{Name}</p>" + "<p class=\"message\" >{Text}</p>" + "<p class=\"date\" >{Date}</p>" + "</div>"; var html = ""; Container = document.getElementById('container2'); TestStart = new Date(); for (var i = 0; i < TestDataLength; i++) { html += StringTemplate .replace(/\{Flag\}/g, TestData[i].Out ? "message out" : "message") .replace(/\{Name\}/g, TestData[i].Name || "") .replace(/\{Text\}/g, TestData[i].Text || "") .replace(/\{Date\}/g, TestData[i].Date.toLocaleTimeString()); } Container.innerHTML = html; TestEnd = new Date(); console.log("Test with string templater completed", { time: TestEnd.getTime() - TestStart.getTime(), count: TestDataLength }); };
рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
tsc templater.ts
рдереЛрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрдкрд╛рдЗрд▓рд░ js рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдореВрд▓ рд╕реЗ рдЖрдХрд╛рд░ рдФрд░ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИред рдзрдиреНрдпрд╡рд╛рдж Microsoft!
рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд┐рдВрдХ