Xuda Slim

ืื•ืชื• ื–ืžืŸ ืจื™ืฆื”, 51 ืžืชื•ืš 60 ืงื•ื‘ืฆื™ ื”ืžืงื•ืจ ืฉืœื•, ื•ืืœืžื ื˜ template ื‘ื“ืฃ ืฉืœื›ื ื”ื•ื ืชื•ื›ื ื™ืช.

Slim ืื™ื ื• ื›ืชื™ื‘ื” ืžื—ื“ืฉ ื•ืื™ื ื• ื”ืกื‘ื”. utils/bundle.js ื‘ื•ื ื” ืืช ืฉืชื™ ื—ื‘ื™ืœื•ืช ื”ื“ืคื“ืคืŸ ืžืื•ืชื• ืขืฅ ื•ื‘ืื•ืชื” ืจื™ืฆื”: ื”ืžืœืื” ืžืฉืจืฉืจืช 60 ืงื•ื‘ืฆื™ ืžืงื•ืจ ืฉืœ ื–ืžืŸ ื”ืจื™ืฆื” ื•ืขื•ื“ 9 ืงื•ื‘ืฆื™ ืกืคืงื™ื, ื•-Slim ืžืฉืจืฉืจืช 51 ืžืื•ืชื ืงื‘ืฆื™ื ืขืฆืžื ื•ืขื•ื“ 2 ืงื•ื‘ืฆื™ ืกืคืงื™ื, css.js ื•-json5.min.js. ื‘ื“ื™ื•ืง 9 ืงื‘ืฆื™ื ื ืžืฆืื™ื ื‘ืจืฉื™ืžื” ื”ืžืœืื” ื•ื—ืกืจื™ื ื‘ืจืฉื™ืžืช Slim, ื•ืื™ืŸ ื‘-Slim ื“ื‘ืจ ืฉืื™ื ื• ื ืžืฆื ื’ื ื‘ื—ื‘ื™ืœื” ื”ืžืœืื”. ืื•ืชื 9 ื”ื xuda_actions.js, xuda_fcm_web.js ื•ืฉื‘ืขืช ืงื•ื‘ืฆื™ ืžื ื•ืข ื”ืกื™ื’ื ืœื™ื: xuda_reactive.core.js, .scheduler.js, .listdiff.js, .bridge.js, xuda_runtime.render.reactive.js, .adapter.js ื•-.pilot.js. ื›ืœื•ืžืจ ื“ืฃ Slim ืžืฆื•ื™ืจ ืขืœ ื™ื“ื™ ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ื™ืฉืŸ ืœื‘ื“ื•, ื‘ืœื™ ืžื ื•ืข ืจื™ืืงื˜ื™ื‘ื™ ืžืชื—ืชื™ื•. ืžื” ืฉืžืงื‘ืœื™ื ื‘ืชืžื•ืจื” ื”ื•ื ืžืกืœื•ืœ ื›ืชื™ื‘ื” ืฉืื™ืŸ ื‘ื• ืฉืœื‘ ื‘ื ื™ื™ื”: ื›ื•ืชื‘ื™ื HTML ืจื’ื™ืœ ื‘ืชื•ืš ืืœืžื ื˜ template, ืงื•ืจืื™ื ืœ-xuda(), ื•ื”ื‘ื ืื™ ื”ื•ืคืš ื›ืœ template ื‘ื“ืฃ ืœืชื•ื›ื ื™ืช ืฉืžืคืชื—ื” ื”ื•ื ื”-id ืฉืœื•. ืฉืชื™ ื”ืขืจื•ืช ื‘ื’ื™ืœื•ื™ ืœื‘ ืœืคื ื™ ืฉืืจ ื”ื“ืฃ. Slim ืื™ื ื• ืงื˜ืŸ ื‘ื‘ืชื™ื. ืžื•ื“ื•ืœ ื”-ES ืฉื“ืคื™ xuda.io ืžื™ื™ื‘ืื™ื ืฉื•ืงืœ 671,803 ื‘ืชื™ื ืขืœ ื”ื“ื™ืกืง ื•-143,551 ื‘ื“ื—ื™ืกืช gzip ื‘ืจืžื” 9, ื•ื”ืงื•ื‘ืฅ ืฉืฉืžื• xuda-runtime-slim.min.es.js ืื™ื ื• ืžืžื•ื–ืขืจ: bundle.js ื›ื•ืชื‘ ืืช ื”ืžื—ืจื•ื–ืช ื”ืžืฉื•ืจืฉืจืช ื”ื—ื•ืฆื” ื›ืžื• ืฉื”ื™ื ื•ืืฃ ืคืขื ืœื ืžืขื‘ื™ืจ ืื•ืชื” ื“ืจืš UglifyJS. ื”ืฉื ืžืชืืจ ืืช ืžืกืœื•ืœ ื”ื›ืชื™ื‘ื” ื•ืืช ืจืฉื™ืžืช 51 ื”ืงื‘ืฆื™ื, ืœื ืืช ื”ื”ื•ืจื“ื”.

51 ืงื•ื‘ืฆื™ ื–ืžืŸ ืจื™ืฆื”, 2 ืฉืœ ืกืคืงื™ื
ื”-id ืฉืœ ื”-template ื”ื•ืคืš ืœ-prog_id
ื‘ืœื™ ืžื ื•ืข ืกื™ื’ื ืœื™ื, ืžื ื•ืข ืจื™ื ื“ื•ืจ ื™ืฉืŸ ื‘ืœื‘ื“
ืื•ืชื• ื–ืžืŸ ืจื™ืฆื”, 51 ืžืชื•ืš 60 ืงื•ื‘ืฆื™ ื”ืžืงื•ืจ ืฉืœื•, ื•ืืœืžื ื˜ template ื‘ื“ืฃ ืฉืœื›ื ื”ื•ื ืชื•ื›ื ื™ืช.
ื”ืกื™ืžื•ืŸ ืฉื ื›ืชื‘

ืฉื™ืฉื” ืžืงื˜ืขื™ื ืžืชื•ืš ื“ืฃ ืฉื ืžืฆื ื‘ืจื™ืคื•ื–ื™ื˜ื•ืจื™ ื”ื–ื”.

ืฉื•ื ื“ื‘ืจ ืžื›ืืŸ ืื™ื ื• ืกืงื™ืฆื” ืฉืœ ืื™ืš ื”ืชื—ื‘ื™ืจ ื™ื›ื•ืœ ืœื”ื™ืจืื•ืช. ื›ืœ ืฉื•ืจื” ืœืžื˜ื” ื ืœืงื—ื” ืžืชื•ืš website-static/xuda.io/src/examples-html/index.html, ื”ื“ืฃ ืฉืขืœื™ื• ื–ืžืŸ ื”ืจื™ืฆื” ืžื•ื“ื’ื, ื•ืžืกืคืจื™ ื”ืฉื•ืจื•ืช ืžื•ื“ืคืกื™ื ื›ื“ื™ ืฉืชื•ื›ืœื• ืœืคืชื•ื— ืืช ื”ืงื•ื‘ืฅ ื•ืœื”ืฉื•ื•ืช. ืงืจืื• ืืช ื–ื” ื‘ืฉื‘ื™ืœ ื”ืฆื•ืจื” ื•ืœื ื‘ืฉื‘ื™ืœ ื”ืขื™ืฆื•ื‘: ืกืงืจื™ืคื˜ ืžื•ื“ื•ืœ ืฉืงื•ืจื ืœืืชื—ื•ืœ ืขื prog id ืื—ื“, template ืฉื”-id ืฉืœื• ื”ื•ื ืื•ืชื• prog id, xu-single-view ื›ืฉื•ืจืฉ, xu-store ืฉืžื—ื–ื™ืง ืžืฆื‘ ืžืงื•ืžื™ ืขื xu-bind ืฉื›ื•ืชื‘ ื‘ื—ื–ืจื” ืœืชื•ื›ื•, ืฉืœื™ืฉื™ื™ืช xu-for ืฉืขื•ื‘ืจืช ืขืœ ืžืขืจืš ื›ืฉืฉื ื™ ื”ืื™ื ื“ืงืก ื•ื”ืขืจืš ืžืงื‘ืœื™ื ืฉื, ื•-xu-panel ืฉืžืจื›ื™ื‘ ืชื•ื›ื ื™ืช ืฉื ื™ื™ื” ื‘ืชื•ืš ื”ืจืืฉื•ื ื”. ื”ืชื—ื™ืœื™ืช xu-exp: ืขืœ ืžืืคื™ื™ืŸ ืื•ืžืจืช ืฉื”ืขืจืš ื”ื•ื ื‘ื™ื˜ื•ื™ ื•ืœื ืœื™ื˜ืจืœ, ื•ื”ื‘ื™ื˜ื•ื™ื™ื ื›ืืŸ ื”ื eval: secure_eval ืžื”ื“ืจ ืžืงื•ืจ ื‘ืคืขื ื”ืฉื ื™ื™ื” ืฉื”ื•ื ื ืชืงืœ ื‘ื• ื‘ืืžืฆืขื•ืช new Function, ื•ืื—ืจืช ื ื•ืคืœ ื—ื–ืจื” ืœ-eval ื‘ืชื•ืš ื”ืกืงื•ืค ืฉืœ ื”ื“ืฃ ืขืฆืžื•.

website-static/xuda.io/src/examples-html/index.html
ืฉื•ืจื•ืช 29 ืขื“ 55, ื”ืืชื—ื•ืœ. ืงืจื™ืื” ืื—ืช, prog id ืื—ื“, ื‘ืœื™ ื‘ืื ื“ืœืจ ื‘ื“ืจืš
<script type="module">
import { bootTemplatePage } from "../assets/site.js";
bootTemplatePage({ progId: "xuda_slim_html_examples" });
ืฉื•ืจื•ืช 79 ื•-80. ื”-id ื”ื•ื ืฉื ื”ืชื•ื›ื ื™ืช, ื•ื”-id ืฉืœ ื”-template ื”ืจืืฉื•ืŸ ื”ื•ืคืš ืœ-prog_id
<template id="xuda_slim_html_examples">
<xu-single-view>
ืฉื•ืจื•ืช 194 ืขื“ 197. ืžืฆื‘ ืžืงื•ืžื™, ื•ืงื™ืฉื•ืจ ื“ื• ื›ื™ื•ื•ื ื™ ืœืชื•ื›ื•
<div xu-store="{'headline':'Bound by xu-bind'}">
<input xu-bind="headline" />
<p xu-exp:xu-content="@headline">Bound by xu-bind</p>
ืฉื•ืจื•ืช 361 ืขื“ 363. ื”ืœื•ืœืื” ื ื•ืชื ืช ืฉื ืœืื™ื ื“ืงืก ื•ืœืขืจืš, ื•ืฉื ื™ื”ื ืงืจื™ืื™ื ื‘ืชื•ืš ื”ื‘ื™ื˜ื•ื™
<div xu-for="@steps" xu-for-key="stepIndex" xu-for-val="step">
<span xu-exp:xu-content="(@stepIndex + 1) + '. ' + @step.label">Label</span>
ืฉื•ืจื” 728. ืชื•ื›ื ื™ืช ืฉื ื™ื™ื”, ืžื•ืจื›ื‘ืช ื‘ืžืงื•ื
<xu-panel program="child_panel_demo"></xu-panel>
ื”ืืชื—ื•ืœ ื‘ืฉื•ืจื•ืช 29 ืขื“ 55, ื”-id ืฉืœ ื”-template ื‘ืฉื•ืจื” 79, xu-single-view ื‘ืฉื•ืจื” 80, xu-store ืขื xu-bind ื‘ืฉื•ืจื•ืช 194 ืขื“ 197, ืฉืœื™ืฉื™ื™ืช xu-for ื‘ืฉื•ืจื•ืช 361 ืขื“ 363, ื•-xu-panel ื‘ืฉื•ืจื” 728. ืžืืคื™ื™ื ื™ class ืงื•ืฆืฆื• ื›ืืŸ ืœื˜ื•ื‘ืช ื”ืจื•ื—ื‘; ื›ืœ ืžืืคื™ื™ืŸ xu- ืžื•ืคื™ืข ืžื™ืœื” ื‘ืžื™ืœื”.
20

ืžื˜ืคืœื™ ืžืืคื™ื™ื ื™ื ื‘ืจื™ืฉื•ื ื”ื“ื™ืจืงื˜ื™ื‘ื•ืช

6

ืชื’ื™ื•ืช ืžื‘ื ื™ื•ืช ืฉื ื•ืขื“ื• ืœื›ืชื™ื‘ื” ื™ื“ื ื™ืช

51

ืงื•ื‘ืฆื™ ืžืงื•ืจ ืฉืœ ื–ืžืŸ ื”ืจื™ืฆื” ื‘ืจืฉื™ืžืช Slim, ืžืชื•ืš 60

1084

ื˜ืขื ื•ืช ืฉืขื•ื‘ืจื•ืช ื‘-runtime/test, 0 ื›ืฉืœื™ื

ื”ืืชื—ื•ืœ

ื‘ื ืื™ ืื—ื“, ื•ืฉืœื•ืฉ ื“ืจื›ื™ื ืฉืžื•ืฆื™ืื•ืช ื–ื• ืืช ื–ื• ืฉื‘ื”ืŸ ื“ืฃ Slim ืžื•ืฆื ืืช ื”ืชื•ื›ื ื™ื•ืช ืฉืœื•.

xuda() ืžืงื‘ืœ ืืœืžื ื˜, ืื•ื‘ื™ื™ืงื˜ ืืคืฉืจื•ื™ื•ืช ื•ืคื•ื ืงืฆื™ื™ืช ื”ืžืฉืš ื‘ื›ืœ ืกื“ืจ ืืจื’ื•ืžื ื˜ื™ื, ื›ืฉื”ื–ื™ื”ื•ื™ ื ืขืฉื” ืœืคื™ ื˜ื™ืคื•ืก ื•ืœื ืœืคื™ ืžื™ืงื•ื, ื•ืชื—ืช ื—ื‘ื™ืœืช Slim ืืœืžื ื˜ ื—ืกืจ ื ื•ืคืœ ื—ื–ืจื” ืœืžื—ืจื•ื–ืช body ืขื ืื–ื”ืจื” ื‘ืžืงื•ื ืœื‘ื˜ืœ ืืช ื”ืืชื—ื•ืœ. ืžื” ืฉืงื•ืจื” ืื—ืจ ื›ืš ื ืงื‘ืข ืขืœ ื™ื“ื™ ืฉืืœื” ืื—ืช ื‘ื“ื™ื•ืง, ืฉื ืฉืืœืช ืคืขื ืื—ืช: ื”ืื ื™ืฉ ืืœืžื ื˜ื™ template ื‘ื“ืฃ. ืฉืœื•ืฉ ื”ืชืฉื•ื‘ื•ืช ืœืžื˜ื” ืื™ื ืŸ ืžืชืขืจื‘ื‘ื•ืช. ื”ืจืืฉื•ื ื” ื›ื•ืชื‘ืช ืžื—ื“ืฉ ืืช ื”ื“ืฃ, ื”ืฉื ื™ื™ื” ืžืฉืื™ืจื” ืื•ืชื• ื‘ืžืงื•ืžื•, ื•ื”ืฉืœื™ืฉื™ืช ื”ื™ื ืžืฆื‘ ื”ื›ืฉืœ, ื•ื›ื“ืื™ ืœื“ืขืช ื‘ืื™ื–ื• ืžื”ืŸ ืืชื ื ืžืฆืื™ื ืœืคื ื™ ืฉืžืชื—ื™ืœื™ื ืœื ืคื•ืช ืžืกืš ืจื™ืง.

ืขื ืฃ ื”-template ื”ื•ื ื”ืจืกื ื™ ื•ื–ื” ืžืคืชื™ืข ืื ืฉื™ื: ื”ืกื™ืžื•ืŸ ืฉื›ืชื‘ืชื ืžืคื•ืขื ื—, ืžื•ืžืจ, ื•ืื– ื ืžื—ืง ืžืืœืžื ื˜ ื”ืฉื•ืจืฉ ืœืคื ื™ ืฉืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ืžื—ื–ื™ืจ ืื•ืชื•. ืื ื‘ื“ืฃ ืฉืœื›ื ื™ืฉ ืชื•ื›ืŸ ืฉื ื•ืฆืจ ื‘ืฉืจืช ืžื—ื•ืฅ ืœ-template ื•ืฆื™ืคื™ืชื ืฉื™ืฉืจื•ื“ ืืช ื”ืืชื—ื•ืœ, ื‘ื“ืงื• ื‘ืื™ื–ื” ืžืฉืœื•ืฉืช ื”ืขื ืคื™ื ื”ืืœื” ืืชื ื‘ืืžืช ื ืžืฆืื™ื.
Slim ืžื•ืœ ื”ืžืœืื”

ืชืฉืขื” ืงื‘ืฆื™ื ื”ื ื›ืœ ื”ื”ื‘ื“ืœ, ื•ื›ืœ ืื—ื“ ืžื”ื ื”ื•ื ืžืฉื”ื• ืฉื“ืฃ Slim ืื™ื ื• ื™ื›ื•ืœ ืœืขืฉื•ืช.

ืฉืชื™ ื”ื—ื‘ื™ืœื•ืช ื ื‘ื ื•ืช ืžืื•ืชื• ืขืฅ ืขืœ ื™ื“ื™ ืื•ืชื• ืกืงืจื™ืคื˜, utils/bundle.js. Slim ืžืฉืจืฉืจืช 51 ืงื•ื‘ืฆื™ ืžืงื•ืจ ืฉืœ ื–ืžืŸ ื”ืจื™ืฆื” ื•ืขื•ื“ 2 ืงื•ื‘ืฆื™ ืกืคืงื™ื. ื—ื‘ื™ืœืช ื”ื“ืคื“ืคืŸ ื”ืžืœืื” ืžืฉืจืฉืจืช 60 ืงื•ื‘ืฆื™ ื–ืžืŸ ืจื™ืฆื” ื•ืขื•ื“ 9 ืงื•ื‘ืฆื™ ืกืคืงื™ื. ื”ืฉื•ื•ืืช ืฉืชื™ ื”ืจืฉื™ืžื•ืช ื ื•ืชื ืช ื‘ื“ื™ื•ืง 9 ืฉืžื•ืช ืฉื ืžืฆืื™ื ื‘ืจืฉื™ืžื” ื”ืžืœืื” ื•ืœื ื‘ืจืฉื™ืžืช Slim, ื•ื“ื‘ืจ ื‘-Slim ืฉืื™ื ื• ื ืžืฆื ื’ื ื‘ื—ื‘ื™ืœื” ื”ืžืœืื”. Slim ื”ื•ื ื—ื™ืกื•ืจ, ืœืขื•ืœื ืœื ืคื™ืฆื•ืœ, ื•ืœื›ืŸ ื‘ื™ื˜ื•ื™ ืฉืขื•ื‘ื“ ื‘ืื—ืช ืขื•ื‘ื“ ื’ื ื‘ืื—ืจืช. ืžื” ืฉื‘ื ืขื›ืฉื™ื• ื”ื•ื ืชืฉืขืช ื”ืฉืžื•ืช ื”ืืœื” ื•ืืจื‘ืข ื”ื™ืฆื™ืื•ืช ื”ืžื•ืงื“ืžื•ืช ืฉื ืœื•ื•ืช ืืœื™ื”ื.

Slim
ื—ื‘ื™ืœืช ื”ื“ืคื“ืคืŸ ื”ืžืœืื”
ืงื•ื‘ืฆื™ ืžืงื•ืจ ืฉืœ ื–ืžืŸ ื”ืจื™ืฆื”51, ืžืฉื•ืจืฉืจื™ื ื‘-utils/bundle.js:243 ื•ื ื›ืชื‘ื™ื ื”ื—ื•ืฆื” ื›ืžื—ืจื•ื–ืช ื›ืžื• ืฉื”ื.60, ื‘-utils/bundle.js:62. ื”ืชืฉืขื” ื”ื ื•ืกืคื™ื ื”ื xuda_actions.js, xuda_fcm_web.js ื•ืฉื‘ืขืช ืงื•ื‘ืฆื™ ื”ืžื ื•ืข ื”ืจื™ืืงื˜ื™ื‘ื™.
ืงื•ื‘ืฆื™ ืกืคืงื™ื2: css.js ื•-json5.min.js.9: ืฉื ื™ ืืœื” ื•ืขื•ื“ pouchdb.min.js, pouchdb.find.min.js, client.min.js, fingerprint2.min.js, socket.io.min.js, peerjs.min.js ื•-clona-2.0.6.min.js.
ืžื ื•ืข ื”ืกื™ื’ื ืœื™ืืื™ื ื• ื ืฉืœื—. xuda_reactive.core.js, .scheduler.js, .listdiff.js, .bridge.js ื•ืฉืœื•ืฉืช ืงื•ื‘ืฆื™ render.reactive ื—ืกืจื™ื ื›ื•ืœื. ื“ืฃ Slim ืžืฆื•ื™ืจ ืขืœ ื™ื“ื™ ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ื™ืฉืŸ ืœื‘ื“ื•.ื ืฉืœื—: ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ืจื™ืืงื˜ื™ื‘ื™, ื”ืžืชื–ืžืŸ ืฉืœื•, ื”ืฉื•ื•ืืช ื”ืจืฉื™ืžื•ืช ืฉืœื•, ื•ื”ื˜ื™ื™ืก ืฉืžื—ืœื™ื˜ ืื™ื–ื” ืžื ื•ืข ืจื™ื ื“ื•ืจ ืชื•ื›ื ื™ืช ืžืงื‘ืœืช.
ืžืชืื ื‘ืกื™ืก ื”ื ืชื•ื ื™ืืœืขื•ืœื ืื™ื ื• ื ื˜ืขืŸ. ื”ืืชื—ื•ืœ ื—ื•ื–ืจ ื‘-runtime/js/index.js:407, ืœืคื ื™ ื˜ื•ืขืŸ ื”ืคืจื•ื™ืงื˜ ื•ื”ืžืชืื ื‘-:423 ืขื“ :429. func.db ืœืขื•ืœื ืื™ื ื• ืžื•ืงืฆื” ื•-APP_OBJ[app_id] ื ืฉืืจ ืื•ื‘ื™ื™ืงื˜ ืจื™ืง.xuda-db-adapter-module.mjs ืžื™ื•ื‘ื, func.db ืžื•ืงืฆื”, ื•-init_db_replication ืžืชื—ื™ืœ ืขืœ ืžื–ื”ื” ื”ืืคืœื™ืงืฆื™ื”.
ืชื•ืกืฃ ื”ืžืกื’ืจืชinit_ui_framework ื—ื•ื–ืจ ื‘ืฉื•ืจื” ื”ืจืืฉื•ื ื” ืฉืœื• ื›ืืฉืจ glb.SLIM_BUNDLE ืžื•ื’ื“ืจ, ื‘-xuda_UI.utils.js:521. ืชื•ืกืคื™ ื”ืžืกื’ืจืช ืฉืœ Tailwind ื•-Ionic ืœืขื•ืœื ืื™ื ื ืžืื•ืชื—ืœื™ื.ืชื•ืกืฃ ื”ืžืกื’ืจืช ืฉืœ ื”ืชื•ื›ื ื™ืช ื ืคืชืจ ื•ืžืื•ืชื—ืœ ืœืคื ื™ ืฉื”ืขืฅ ื ืกืจืง.
ืชื•ืกืคื™ ืจืงืขregister_run_background_plugins ื—ื•ื–ืจ ื‘ืื•ืชื” ื“ืจืš ื‘-xuda_main.js:199, ื›ืš ืฉืฉื•ื ื“ื‘ืจ ืื™ื ื• ืจืฅ ื‘ืจืงืข.ืขื•ื‘ืจ ืขืœ app_plugins_purchased ื•ืžืคืขื™ืœ ื›ืœ ืจืฉื•ืžื” ืฉื ื•ืฉืืช installed ื•-run_in_background.
ืžืงื•ืจ ื”ืชื•ื›ื ื™ืชื”-DOM. xuda() ืžืจื™ืฅ document.querySelectorAll('template') ื‘-index.js:225, ืžืžืคืชื— ื›ืœ ืชื•ื›ื ื™ืช ืœืคื™ ื”-id ืฉืœื” ืื• template_<index>, ืœื•ืงื— ืืช ื”-id ื”ืจืืฉื•ืŸ ื‘ืชื•ืจ prog_id, ื•ืื– ืžืจื•ืงืŸ ืืช ืืœืžื ื˜ ื”ืฉื•ืจืฉ. id ื—ืกืจ ืžืกืชื™ื™ื ื‘-console.error, xuda_utils.js:105 ืขื“ 144._session.project_data.programs ืจืืฉื•ืŸ, ื•ืจืง ื›ืืฉืจ SLIM_BUNDLE ืื™ื ื• ืžื•ื’ื“ืจ ื”ื—ื™ืคื•ืฉ ื ื•ืคืœ ืืœ xuda-progs-loader-module.
ื“ื™ืจืงื˜ื™ื‘ื•ืช ื•ื‘ื™ื˜ื•ื™ื™ื

ืขืฉืจื™ื ืžื˜ืคืœื™ ืžืืคื™ื™ื ื™ื, ื•ืกื“ืจ ืฉืื•ืจื›ื• ืฉื ื™ ืžืขืจื›ื™ื.

ืจื™ืฉื•ื ื”ื“ื™ืจืงื˜ื™ื‘ื•ืช ื”ื•ื ืื•ื‘ื™ื™ืงื˜ ืคืฉื•ื˜ ืฉืœ 20 ืžื˜ืคืœื™ื, ืž-xu-attrs ื‘ืฉื•ืจื” 68 ืขื“ xu-viewport ื‘ืฉื•ืจื” 234 ืฉืœ xuda_runtime.browser.handlers.factory.common.js. ืžื˜ืคืœ xu-exp ื ื•ืกืฃ ืื—ื“ ืžื•ืจื›ื‘ ืžืขืœื™ื”ื, ื•ืžื˜ืคืœื™ื ื‘ืจืžืช ืชื’ื™ืช ื ื•ืกืคื™ื ืขื‘ื•ืจ xu-panel ื•-xu-teleport. ื–ื” ื›ืœ ืื•ืฆืจ ื”ืžื™ืœื™ื. ืื™ืŸ ืฉืœื‘ ื”ื™ื“ื•ืจ ื•ืื™ืŸ ืฉืคืช ืชื‘ื ื™ื•ืช: ื”ืžืืคื™ื™ืŸ ื ืงืจื ืžื”ืืœืžื ื˜ ื•ื”ืขืจืš ืžื•ืขืจืš ื‘ืชื•ืš ื”ื“ืฃ.

  • ื”ืขืฉืจื™ื, ื‘ืกื“ืจ ื”ืžืงื•ืจ: xu-attrs, xu-ref, xu-bind, xu-render, xu-show, xu-content, xu-text, xu-html, xu-for, xu-for-key, xu-for-val, xu-class, xu-on, xu-script, xu-style-global, xu-style, xu-cdn, xu-ui-plugin, xu-store, xu-viewport. ืฉืฉ ืชื’ื™ื•ืช ืžื‘ื ื™ื•ืช ื”ืŸ ืฉืœื›ื ืœื›ืชื™ื‘ื” ื’ื ื›ืŸ: xu-template, xu-single-view, xu-multi-view, xu-panel, xu-teleport, xu-slot. ืฉืชื™ื™ื ื ื•ืกืคื•ืช, xu-nav ื•-xu-modal-controller, ื”ืŸ ืคื ื™ืžื™ื•ืช, ื•ื”ื‘ื•ื“ืง ืฉืœ Studio ืžืชืจื™ืข ืžืคื ื™ ื›ืชื™ื‘ืชืŸ.
  • xu-if, xu-else-if ื•-xu-else ื”ืŸ ื™ืœื™ื“ื™ื•ืช ืœืžื ื•ืข ื”ืจื™ืืงื˜ื™ื‘ื™ ื‘ืœื‘ื“. ืขื‘ื•ืจ ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ื™ืฉืŸ, ืฉื”ื•ื ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ื™ื—ื™ื“ ืฉื™ืฉ ืœ-Slim, ื›ืœ ืขื ืฃ ืžื”ื•ื“ืจ ืœ-xu-exp:xu-render ืฉืงื•ืœ ื‘-xuda_common.js:763 ืขื“ 782, ื•ืžืืคื™ื™ื ื™ xu-if ืฉื ื›ืชื‘ื• ื ืฉืืจื™ื ื‘ืžืงื•ืžื ื‘ื›ื•ื•ื ื” ื›ื“ื™ ืฉื”ืžืงื•ืจ ืฉื›ืชื‘ืชื ื™ื™ืฉืืจ ืงืจื™ื ื‘-DOM.
  • xu-render ื•-xu-if ืžืกื™ืจื™ื ืืช ื”ืืœืžื ื˜. ืฉืขืจ ืกื’ื•ืจ ืžืฉืื™ืจ ืื—ืจื™ื• ืืœืžื ื˜ xurender ื—ืฉื•ืฃ ื›ืขื•ื’ืŸ ืœืฆืžื™ื—ื” ืžื—ื“ืฉ, ื‘-xuda_runtime.browser.dom.js:554. xu-show ืžืฉืื™ืจ ืืช ื”ืฆื•ืžืช ืžื•ืจื›ื‘ ื•ืžื—ืœื™ืฃ ื ืจืื•ืช ื‘ืœื‘ื“. ื”ื‘ื—ื™ืจื” ื‘ื™ื ื™ื”ื ื”ื™ื ื”ื‘ื—ื™ืจื” ืื ืชืช ืขืฅ ืžื•ืกืชืจ ืขื•ืœื” ืœื›ื ื‘-DOM.
  • ื‘ื™ื˜ื•ื™ื™ื ื”ื eval, ื•ื–ื” ืœื ื“ื™ืžื•ื™ ืœืฉื•ื ื™. secure_eval ืžื”ื“ืจ ืžืงื•ืจ ื‘ืคืขื ื”ืฉื ื™ื™ื” ืฉื”ื•ื ื ืชืงืœ ื‘ื• ื‘ืืžืฆืขื•ืช new Function('xu','func','glb','SESSION_ID','SESSION_OBJ','dsSessionP',...) ื‘-xuda_expression.js:1116, ื•ืื—ืจืช ื ื•ืคืœ ื—ื–ืจื” ืœ-eval(val) ื‘ืกืงื•ืค ื”ื“ืฃ ื‘-:1134. ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ืช ืชื•ื›ืŸ ื‘ืœื™ unsafe-eval ืื™ื ื” ื™ื›ื•ืœื” ืœื”ืจื™ืฅ ื•ืœื• ืžืืคื™ื™ืŸ xu-exp: ืื—ื“.
ื”ืกื“ืจ ืฉื‘ื• ืืœืžื ื˜ ืžื•ืขืจืš
  1. run_xu_before
    xu-cdn, xu-style, xu-render, xu-for-key, xu-for-val, ื‘ืกื“ืจ ื”ื–ื”, ืž-xuda_GLB.js:175 ืขื“ 181. ื”ืฉืขืจ ื•ืžืคืชื—ื•ืช ื”ืœื•ืœืื” ื ืกื’ืจื™ื ืœืคื ื™ ืฉืžื™ืฉื”ื• ืงื•ืจื ืื•ืชื.
  2. ื”ื’ื•ืฃ
    ื›ืœ ืžื˜ืคืœ ืฉื ื•ืชืจ, ื‘ืกื“ืจ ืฉื‘ื• ื”ืžืืคื™ื™ื ื™ื ืžื•ืคื™ืขื™ื ืขืœ ื”ืืœืžื ื˜. xu-for, xu-content, xu-show, xu-on ื•-xu-store ืจืฆื™ื ื›ื•ืœื ื›ืืŸ.
  3. run_xu_after
    xu-bind, xu-class, xu-script, xu-ui-plugin, xu-ref, ืž-xuda_GLB.js:184. ื”ืงื™ืฉื•ืจ ื•ื”ืกืงืจื™ืคื˜ื™ื ืจื•ืื™ื ืืœืžื ื˜ ื’ืžื•ืจ, ื•-xu-ref ืžื—ื•ืœืง ืื—ืจื•ืŸ.
  4. ืžืขื‘ืจ ื”-xu-exp
    xu-exp: ืื™ื ื• ืžื˜ืคืœ ืขืฉืจื™ื ื•ืื—ื“. ื”ื•ื ืžื•ืจื›ื‘ ืžืขืœ ื”ืจื™ืฉื•ื ื‘-factory.js ื•ืžืกืžืŸ ืืช ื”ืขืจืš ื›ื‘ื™ื˜ื•ื™, ื›ืš ืฉ-xu-exp:xu-render ืขื“ื™ื™ืŸ ืชื•ืคืก ืืช ืžืฉื‘ืฆืช xu-render ื‘ืชื•ืš run_xu_before ื•ืœื ืžืฉื‘ืฆืช ืžืฉืœื•.
ืื™ืจื•ืขื™ื

ืฉืžื•ื ื” ืงื™ืฆื•ืจื™ื, ื›ืชื™ื‘ื” ืžื—ื“ืฉ ืื—ืช, ื•ื‘ืœื™ ืžืขืจื›ืช ืื™ืจื•ืขื™ื ืฉื ื™ื™ื” ืžืชื—ืช.

ืฉืžื•ื ื” ืงื™ืฆื•ืจื™ ืื™ืจื•ืข ืžื•ืฆื”ืจื™ื ื‘ืžืขืจืš ืื—ื“, glb.attr_abbreviations_arr ื‘-xuda_GLB.js:185. ืืฃ ืื—ื“ ืžื”ื ืื™ื ื• ืžื˜ืคืœ. ื‘ื–ืžืŸ ื”ื ืจืžื•ืœ, xuda_runtime.browser.attributes.policy.js:42 ืขื“ 56 ื‘ื•ื“ืง ืื ืฉื ื”ืžืืคื™ื™ืŸ ื ืžืฆื ื‘ืžืขืจืš ื”ื–ื”, ื›ื•ืชื‘ ื‘ืžืงื•ืžื• xu-on:<event> ืฉื ื•ืฉื ืžื˜ืคืœ custom ื•ืชื”ืœื™ืš ืขื‘ื•ื“ื” ืฉืœ ืฆืขื“ ืขื“ื›ื•ืŸ ืื—ื“ ื‘ื“ื™ื•ืง, ื•ืื– ืžื•ื—ืง ืืช ื”ืžืืคื™ื™ืŸ ื”ืžืงื•ืจื™. xu-click ื•ื”ืฆื•ืจื” ื”ืืจื•ื›ื” xu-on:click ืžื’ื™ืขื™ื ืœืื•ืชื• ืงื•ื“ ื‘ื“ื™ื•ืง ื‘ืื•ืชื” ื“ืจืš, ื•ืœื›ืŸ ืื™ืŸ ืžื” ืœืœืžื•ื“ ืขืœ ื”ืงื™ืฆื•ืจื™ื ืžืขื‘ืจ ืœืจืฉื™ืžืช ื”ืฉืžื•ื ื”.

ื”ืคืขืœื” ืจืืฉื•ื ื”

ื™ื™ื‘ื•ื ื”ืžื•ื“ื•ืœ, ื›ืชื™ื‘ืช template, ืงืจื™ืื” ืœื‘ื ืื™.

ื‘ืœื™ ืฉืœื‘ ื‘ื ื™ื™ื”, ื‘ืœื™ ื”ื’ื“ืจื•ืช ื‘ืื ื“ืœืจ, ื‘ืœื™ ื”ืชืงื ื”. ื“ืคื™ ื”ื“ื•ื’ืžืื•ืช ืฉืœ xuda.io ืขื•ืฉื™ื ืืช ืฉืœื•ืฉืช ื”ื“ื‘ืจื™ื ื”ืืœื” ื•ืœื ื™ื•ืชืจ, ื•ืœื›ืŸ ื”ื ื”ื”ืคื ื™ื” ื”ื›ื ื” ื•ืœื ืžื“ืจื™ืš ืฉื ื›ืชื‘ ื‘ื“ื™ืขื‘ื“.

  1. 01

    ื™ื™ื‘ื•ื ื”ืžื•ื“ื•ืœ

    ืžื•ื“ื•ืœ ื”-ES ืฉื“ืคื™ xuda.io ืžื™ื™ื‘ืื™ื ื”ื•ื website-static/xuda.io/src/assets/xuda-runtime-slim-es.js. ื”ื•ื ืฉื•ืงืœ 671,803 ื‘ืชื™ื ืขืœ ื”ื“ื™ืกืง ื•-143,551 ื‘ื“ื—ื™ืกืช gzip ื‘ืจืžื” 9, ื•ื”ืขื•ืชืง ื‘ืขืฅ ื”ืžืงื•ืจ ื•ื”ืขื•ืชืง ืฉื ื‘ื ื” ื‘-dist ื–ื”ื™ื ื‘ื™ืช ื‘ื‘ื™ืช, md5 e950abcb5372188891ed775c62d55be4. ืื–ื”ืจื” ืื—ืช ืœื’ื‘ื™ ื”ืฉื: ื”ืงื•ื‘ืฅ ื”ืื— ืฉืฉืžื• xuda-runtime-slim.min.es.js ืื™ื ื• ืžืžื•ื–ืขืจ. bundle.js ืžืฉืจืฉืจ ืืช ื”ืžืงื•ืจื•ืช ืœืžื—ืจื•ื–ืช ื•ื›ื•ืชื‘ ืื•ืชื” ื”ื—ื•ืฆื” ื‘-:312 ื‘ืœื™ ืœื”ืขื‘ื™ืจ ืื•ืชื” ื“ืจืš UglifyJS, ื•ืจืง ืฉืœื‘ vite ื•ืขื•ื“ terser ื”ืžืื•ื—ืจ ื™ื•ืชืจ ื‘ื—ื‘ื™ืœืช ื”-npm ืžืžื–ืขืจ. Slim ืžืชืืจ ืืช ืจืฉื™ืžืช 51 ื”ืงื‘ืฆื™ื ื•ืืช ืžืกืœื•ืœ ื”ื›ืชื™ื‘ื”, ืœื ืืช ื”ื”ื•ืจื“ื”.

  2. 02

    ืžืชืŸ template ืขื id ืœื“ืฃ

    ืืœืžื ื˜ template ืจื’ื™ืœ ืฉืœ HTML ืžืžื•ืคื” ืœื›ื™ื ื•ื™ xu-single-view ื‘ื›ืœ ืžื ื•ืข ืจื™ื ื“ื•ืจ, ื‘-xuda_runtime.browser.nodes.js:410 ืขื“ 432. ื”ื›ื™ื ื•ื™ ื”ื–ื” ื ื•ืฉื ืžืฉืงืœ: ืืœืžื ื˜ template ืืžื™ืชื™ ื”ื•ื ืื™ื ืจื˜ื™ ืœืคื™ ื”ืชืงืŸ, ื•ืœื›ืŸ ืžืกืœื•ืœ ื‘ืœื™ ื›ื™ื ื•ื™ ื”ื™ื” ืงื•ืจื ืœ-createElement('template') ื•ื”ืชื•ื›ื ื™ืช ืœื ื”ื™ื™ืชื” ืžืฆื™ื™ืจืช ื“ื‘ืจ. ื“ืฃ ื”ื“ื•ื’ืžืื•ืช ืคื•ืชื— ืืช ืฉืœื• ื‘-website-static/xuda.io/src/examples-html/index.html:79, template ืขื id ื‘ืฉื xuda_slim_html_examples, ืขื xu-single-view ื‘ืฉื•ืจื” ืฉืื—ืจื™ื•. ื›ืชื™ื‘ื” ื‘-HTML ืขื•ืœื” ื‘ืงืฉืช ืจืฉืช ืื—ืช ืฉื›ืชื™ื‘ื” ื‘-JSON ืื™ื ื” ืžืฉืœืžืช, ืžืคื ื™ ืฉืกืจื™ืงืช ื”-template ืžื™ื™ื‘ืืช ื“ื™ื ืžื™ืช ืืช xuda-cli-plugin-html-parser-module.esm.mjs, 748 ืฉื•ืจื•ืช, ื‘-index.js:227 ื›ื“ื™ ืœื”ืคื•ืš ืกื™ืžื•ืŸ ืœืขืฅ ืฆืžืชื™ื.

  3. 03

    ืงืจื™ืื” ืœื‘ื ืื™ ืขื ื”-id ื”ื–ื”

    website-static/xuda.io/src/assets/site.js:812 ืงื•ืจื ืœ-new Xuda(document.getElementById(mountId) || document.body, {prog_id, ...}). xuda() ืžืงื‘ืœ ืืœืžื ื˜, ืื•ื‘ื™ื™ืงื˜ ืืคืฉืจื•ื™ื•ืช ื•ืคื•ื ืงืฆื™ื™ืช ื”ืžืฉืš ื‘ื›ืœ ืกื“ืจ ืืจื’ื•ืžื ื˜ื™ื, ื›ืฉื”ื–ื™ื”ื•ื™ ืœืคื™ ื˜ื™ืคื•ืก ื•ืœื ืœืคื™ ืžื™ืงื•ื, ื‘-runtime/js/index.js:41 ืขื“ 60, ื•ืชื—ืช Slim ืืœืžื ื˜ ื—ืกืจ ื ื•ืคืœ ื—ื–ืจื” ืœ-'body' ืขื ืื–ื”ืจื” ื‘ืžืงื•ื ืœื‘ื˜ืœ ืืช ื”ืืชื—ื•ืœ. ืื—ืจ ื›ืš ื”ืกื™ืžื•ืŸ ืขื•ืฉื” ืืช ื”ืฉืืจ: xu-store ืขื xu-bind ื‘-index.html:194 ืขื“ 197, ืฉืœื™ืฉื™ื™ืช xu-for ื‘-361 ืขื“ 363, ื•-xu-panel ื‘-728. ื”ืกืชื™ื™ื’ื•ืช ืื—ืช ืœืคื ื™ ืฉืืชื ืžืขืชื™ืงื™ื ืืช ื”ืงื•ื‘ืฅ ื”ื–ื”: ืžื•ื“ื•ืœ ื”-ES ืฉื ืžืฆื ื‘-website-static ื™ืฉืŸ ื™ื•ืชืจ ืž-runtime/js. ื—ื™ืคื•ืฉ ืœื ืžื•ืฆื ื‘ื• xu-teleport, ืœื xu-attrs, ืœื xu-if ื•ืœื DS_LOADING, ื‘ื–ืžืŸ ืฉื“ืฃ ื”ื“ื•ื’ืžืื•ืช ื›ื•ืชื‘ xu-teleport ืชื—ืช ื›ื•ืชืจืช Live Preview.

ืžื’ื‘ืœื•ืช ื‘ื’ื™ืœื•ื™ ืœื‘

ืชืฉืขื” ื“ื‘ืจื™ื ืฉื“ืฃ Slim ืื™ื ื• ืขื•ืฉื”, ื›ืœ ืื—ื“ ืขื ื”ืฉื•ืจื” ืฉื‘ื” ืืคืฉืจ ืœืงืจื•ื ืืช ื”ืกื™ืจื•ื‘.

  • Slim ืžืืชื—ืœ ื•ื—ื•ื–ืจ ื‘-runtime/js/index.js ืฉื•ืจื” 407, ืœืคื ื™ ื˜ื•ืขืŸ ื”ืคืจื•ื™ืงื˜ ื‘ืฉื•ืจื” 423 ื•ืžืชืื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ืฉื•ืจื” 425. func.db ืœืขื•ืœื ืื™ื ื• ืžื•ืงืฆื” ื•-APP_OBJ[app_id] ื ืฉืืจ ื”ืื•ื‘ื™ื™ืงื˜ ื”ืจื™ืง ืฉื ืงื‘ืข ื‘ืฉื•ืจื” 400, ื›ืš ืฉืœื“ืฃ ืฉื”ื•ื˜ืžืข ื™ืฉื™ืจื•ืช ืื™ืŸ ืžืื’ืจ PouchDB, ืื™ืŸ ืฉื›ืคื•ืœ ื•ืื™ืŸ ืจื™ืฉื•ื ืชื•ืกืคื™ื.
  • xu-ui-plugin ื•-xu-widget ืื™ื ื ืขื•ืฉื™ื ื“ื‘ืจ ื‘ื“ืฃ Slim ืจื’ื™ืœ. app_plugins_purchased ืœืขื•ืœื ืื™ื ื• ืžืื•ื›ืœืก, ื•ืœื›ืŸ ื”ืฉืขืจ ื”ืจืืฉื•ืŸ ื‘-run_ui_plugin, plugin?.installed ื‘-runtime/js/xuda_common.js ืฉื•ืจื” 2105, ื”ื•ื ืฉืงืจ ื‘ื›ืœ ืงืจื™ืื”. ื“ืฃ ื”ื“ื•ื’ืžืื•ืช ืฉืœ xuda.io ืžืกืžืŸ ืืช ื›ืจื˜ื™ืก xu-ui-plugin ืฉืœื• ืขืฆืžื• ื›-Reference-only, ื‘-examples-html/index.html ืฉื•ืจื” 674.
  • ื–ื” ืื™ื ื• ืืจื’ื– ื—ื•ืœ. secure_eval ืžื”ื“ืจ ืžืงื•ืจ ื‘ืคืขื ื”ืฉื ื™ื™ื” ืฉื”ื•ื ื ืชืงืœ ื‘ื• ื‘ืืžืฆืขื•ืช new Function ื‘-runtime/js/xuda_expression.js ืฉื•ืจื” 1116 ื•ืื—ืจืช ื ื•ืคืœ ื—ื–ืจื” ืœ-eval(val) ื‘ืฉื•ืจื” 1134, ื•ืชื•ืกืฃ ืžืžืฉืง ืžื’ื™ืข ื‘ื™ื™ื‘ื•ื ื“ื™ื ืžื™ ืœืชื•ืš ื”ืจื™ืืœื ืฉืœ ื”ื“ืฃ ืขืฆืžื• ื›ืฉื”ื•ื ืžื—ื–ื™ืง ืืช ืฆื•ืžืช ื”-DOM ื”ื’ื•ืœืžื™. ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ืช ืชื•ื›ืŸ ื‘ืœื™ unsafe-eval ืื™ื ื” ื™ื›ื•ืœื” ืœื”ืจื™ืฅ ื•ืœื• ืžืืคื™ื™ืŸ xu-exp: ืื—ื“.
  • ืฉืชื™ ืื™ื ื˜ื’ืจืฆื™ื•ืช ื”ืžืกื’ืจืช ืžื›ื•ื‘ื•ืช ื•ืœื ืžื•ื—ืœืฉื•ืช. init_ui_framework ื—ื•ื–ืจ ื‘ืฉื•ืจื” ื”ืจืืฉื•ื ื” ืฉืœ ื’ื•ืคื• ื›ืืฉืจ glb.SLIM_BUNDLE ืžื•ื’ื“ืจ, ื‘-runtime/js/xuda_UI.utils.js ืฉื•ืจื” 521, ื•-register_run_background_plugins ืขื•ืฉื” ืื•ืชื• ื“ื‘ืจ ื‘-runtime/js/xuda_main.js ืฉื•ืจื” 199. Tailwind ื•-Ionic ืœืขื•ืœื ืื™ื ื ืžืื•ืชื—ืœื™ื ืชื—ืช Slim.
  • ืžื ื•ืข ื”ืกื™ื’ื ืœื™ื ืื™ื ื• ื‘ืจืฉื™ืžืช ื”ืงื‘ืฆื™ื. ืฉื‘ืขืช ื”ืงื‘ืฆื™ื ื”ืจื™ืืงื˜ื™ื‘ื™ื™ื, xuda_reactive.core.js, .scheduler.js, .listdiff.js ื•-.bridge.js ื•ืขื•ื“ xuda_runtime.render.reactive.js, .adapter.js ื•-.pilot.js, ื™ื•ืฉื‘ื™ื ื‘ืจืฉื™ืžื” ื”ืžืœืื” ื‘-utils/bundle.js ืฉื•ืจื•ืช 131 ืขื“ 138 ื•ื‘ืฉื•ื ืจืฉื™ืžืช Slim. ื“ืฃ Slim ืžืฆื•ื™ืจ ืขืœ ื™ื“ื™ ืžื ื•ืข ื”ืจื™ื ื“ื•ืจ ื”ื™ืฉืŸ ืœื‘ื“ื•.
  • func.action ืื™ื ื• ืžื•ื’ื“ืจ, ืžืคื ื™ ืฉ-xuda_actions.js ื”ื•ื ืื—ื“ ืžืชืฉืขืช ื”ืงื‘ืฆื™ื ืฉืจืฉื™ืžืช Slim ืžืฉืžื™ื˜ื”. ืฆืขื“ ืชื”ืœื™ืš ื”ืขื‘ื•ื“ื” invoke_action ื‘-runtime/js/xuda_events.js ืฉื•ืจื” 920 ื•ืžืกืœื•ืœ act_refresh ื‘ื–ืžืŸ ืืžืช ื‘-runtime/js/xuda_runtime.browser.realtime.js ืฉื•ืจื” 107 ืงื•ืจืื™ื ืœื• ืฉื ื™ื”ื. ืจืง ื”ืฉื ื™ ื™ื•ืฉื‘ ื‘ืชื•ืš catch.
  • ืžื•ื“ื•ืœ ื”-ES ืฉื ืžืฆื ื‘-website-static/xuda.io ื™ืฉืŸ ื™ื•ืชืจ ืž-runtime/js. ื—ืคืฉื• ื‘ื• xu-teleport, xu-attrs, xu-if, DS_LOADING ืื• normalize_doc_for_runtime ื•ื›ืœ ืื—ื“ ืžื”ื—ืžื™ืฉื” ืžื—ื–ื™ืจ ืืคืก ืชื•ืฆืื•ืช, ื‘ื–ืžืŸ ืฉื“ืฃ ื”ื“ื•ื’ืžืื•ืช ื›ื•ืชื‘ xu-teleport ืชื—ืช ื›ื•ืชืจืช Live Preview.
  • Slim ืื™ื ื• ืงื˜ืŸ ื‘ื‘ืชื™ื. website-static/xuda.io/src/assets/xuda-runtime-slim-es.js ืฉื•ืงืœ 671,803 ื‘ืชื™ื ืขืœ ื”ื“ื™ืกืง ื•-143,551 ื‘ื“ื—ื™ืกืช gzip ื‘ืจืžื” 9. ื”ืฉื ืžืชืืจ ืืช ืžืกืœื•ืœ ื”ื›ืชื™ื‘ื” ื•ืืช ืจืฉื™ืžืช 51 ื”ืงื‘ืฆื™ื, ืœื ืืช ื”ื”ื•ืจื“ื”, ื•ืื™ืŸ ื‘ืจื™ืคื•ื–ื™ื˜ื•ืจื™ ื”ื–ื” ืžืงื•ืจ ืœืฉื•ื ื”ืฉื•ื•ืืช ื’ื•ื“ืœ ืžื•ืœ ืžืกื’ืจืช ืื—ืจืช.
  • ืฉืชื™ื™ื ืžืชื•ืš 29 ื—ื‘ื™ืœื•ืช ื”ื‘ื“ื™ืงื” ืื™ื ืŸ ื™ื›ื•ืœื•ืช ืœืจื•ืฅ ืžื”ืขืชืง ื ืงื™. allprogs_sweep.mjs ื•-realprog_dryrun.mjs ืงื•ืจืื•ืช ืฉืชื™ื”ืŸ ืืช runtime/test/fixtures/progs, ื•-runtime/test/fixtures ืžื›ื™ืœ ืจืง .gitignore, ื›ืš ืฉืฉืชื™ื”ืŸ ื–ื•ืจืงื•ืช ENOENT ืœืคื ื™ ืฉื”ืŸ ื‘ื•ื“ืงื•ืช ื“ื‘ืจ.
ืฆืคื™ื™ื”

ื”ื”ื“ื’ืžื”, ืื—ืจื™ ื”ืžื ื’ื ื•ืŸ ื•ืœื ื‘ืžืงื•ืžื•.

ื›ืœ ื˜ืขื ื” ืœืžืขืœื” ื ืงืจืื” ืžืชื•ืš ื”ืขืฅ ื‘ืชืืจื™ืš 2026-08-19 ื•ื ื•ืฉืืช ืืช ื”ืงื•ื‘ืฅ ื•ื”ืฉื•ืจื” ืฉืžืžื ื” ื”ื’ื™ืขื”. ื”ืงืœื˜ื” ืื™ื ื” ื ื•ืฉืืช ืืฃ ืื—ื“ ืžื”ืฉื ื™ื™ื, ื•ื”ืงืœื˜ื” ืžืชื™ื™ืฉื ืช. ืœื›ืŸ ื‘ืžืงื•ื ืฉื‘ื• ื”ืกืจื˜ื•ืŸ ื•ื”ื“ืฃ ื”ื–ื” ื—ืœื•ืงื™ื, ื”ื“ืฃ ืžื ืฆื—, ื•ื‘ืžืงื•ื ืฉื‘ื• ืืชื ืžืคืงืคืงื™ื ื‘ื“ืฃ, ืคืชื—ื• ืืช ื”ืงื•ื‘ืฅ ืฉื”ื•ื ืžืฆื™ื™ืŸ. ืฆืคื• ื‘ื–ื” ื‘ืฉื‘ื™ืœ ืฆื•ืจืช ื”ื”ื˜ืžืขื”, ื•ืื– ืงืจืื• ืฉื•ื‘ ืืช ื”ื”ืขืจื” ื‘ืฉื‘ื™ืœ ืžื” ืฉื”ื”ื˜ืžืขื” ืœื ืชืขืฉื”.

ืœืคื ื™ ื”ื”ื˜ืžืขื”

ืฉืฉ ื”ืฉืืœื•ืช ืฉืจืฉื™ืžืช ื”ืงื‘ืฆื™ื ืžืขืœื”

ื ืขื ื• ืžื•ืœ ื”ืขืฅ ื›ืคื™ ืฉื”ื•ื ืขื•ืžื“ ื‘ืชืืจื™ืš 2026-08-19, ื›ืœ ืื—ืช ืขื ื”ืงื•ื‘ืฅ ื•ื”ืฉื•ืจื” ืฉืืคืฉืจ ืœื‘ื“ื•ืง ืื•ืชื” ืžื•ืœื.

ืฉืชื™ ื“ืœืชื•ืช, ืฆื•ืจืช project_data ืื—ืช.

ื“ืœืช ื”ื”ื˜ืžืขื” ื”ื™ืฉื™ืจื” ื”ื™ื ืชื’ื™ืช script ื•ืืœืžื ื˜ template. ืชื—ืช Slim, xuda() ืžืจื™ืฅ document.querySelectorAll("template"), ื”ื•ืคืš ื›ืœ ืชื•ืฆืื” ืœืชื•ื›ื ื™ืช ืฉืžืคืชื—ื” ื”ื•ื ื”-id ืฉืœื” ืื• template_0, template_1 ื•ื›ืŸ ื”ืœืื” ื›ืฉืื™ืŸ ืœื” ื›ื–ื”, ืœื•ืงื— ืืช ื”-id ื”ืจืืฉื•ืŸ ื‘ืชื•ืจ prog_id ื•ืื– ืžืจื•ืงืŸ ืืช ื”-innerHTML ืฉืœ ืืœืžื ื˜ ื”ืฉื•ืจืฉ, ื‘-runtime/js/index.js ืฉื•ืจื•ืช 225 ืขื“ 252. ื”ื•ื ื’ื ืžืงื‘ืœ ืืœืžื ื˜, ืืคืฉืจื•ื™ื•ืช ื•ืคื•ื ืงืฆื™ื™ืช ื”ืžืฉืš ื‘ื›ืœ ืกื“ืจ ืืจื’ื•ืžื ื˜ื™ื, ื›ืฉื”ื–ื™ื”ื•ื™ ืœืคื™ ื˜ื™ืคื•ืก ื•ืœื ืœืคื™ ืžื™ืงื•ื, ื•ืืœืžื ื˜ ื—ืกืจ ื ื•ืคืœ ื—ื–ืจื” ืœ-body ืขื ืื–ื”ืจื” ื‘ืžืงื•ื ืœื‘ื˜ืœ, ื‘ืฉื•ืจื•ืช 41 ืขื“ 60. ื›ืชื™ื‘ื” ื‘-HTML ืขื•ืœื” ื‘ืงืฉืช ืจืฉืช ืื—ืช ืฉื›ืชื™ื‘ื” ื‘-JSON ืื™ื ื” ืžืฉืœืžืช: ื™ื™ื‘ื•ื ื“ื™ื ืžื™ ืฉืœ xuda-cli-plugin-html-parser-module.esm.mjs ื‘ืฉื•ืจื” 227, 748 ืฉื•ืจื•ืช, ื›ื“ื™ ืœื”ืคื•ืš ืืช ื”ืกื™ืžื•ืŸ ืฉืœื›ื ืœืขืฅ ืฆืžืชื™ื. ื“ืœืช ืœื•ื— ื”ื‘ืงืจื” ืžื“ืœื’ืช ืขืœ ื”ืกืจื™ืงื” ื•ืžื•ืกืจืช ืœื–ืžืŸ ื”ืจื™ืฆื” ืืช ืื•ืชื” ืžืคืช ืชื•ื›ื ื™ื•ืช ื™ืฉื™ืจื•ืช, ื•ืœื›ืŸ ื”ืžืืคื™ื™ื ื™ื ืฉืืชื ืœื•ืžื“ื™ื ื›ืืŸ ืขื•ื‘ืจื™ื ื›ืžื• ืฉื”ื. ืงื—ื• ืืช ื”ืจืืฉื•ื ื” ืื ืืชื ืจื•ืฆื™ื ื“ืฃ. ืงื—ื• ืืช ื”ืฉื ื™ื™ื” ืื ืืชื ืจื•ืฆื™ื ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืืช ื”ืฉื›ืคื•ืœ ื•ืืช 62 ื”ืชื•ืกืคื™ื ืฉืืชื—ื•ืœ Slim ื—ื•ื–ืจ ืœืคื ื™ ืฉื”ื•ื ืžื’ื™ืข ืืœื™ื”ื.