Imba: لغة متوافقة مع جافا سكريبت للعمل السريع مع DOM

Imba هي لغة برمجة مفتوحة المصدر أنشأها Scrimba خصيصًا لتطوير تطبيقات الويب. يتم تجميعها في JavaScript وقادرة على العمل ضمن النظام البيئي الحالي JS. نحن نتحدث ، على سبيل المثال ، عن Node.js ، حول npm ، حول Webpack.

تتمثل القوة الرئيسية لبرنامج Imba في أن هذه اللغة سوف تتيح لك إنشاء تطبيقات أسرع بكثير من تلك التي تعتمد على المكتبات التي تستخدم تقنية Virtual DOM ، مثل React و Vue. يتم تحقيق مكاسب أداء التطبيق من خلال الطريقة التي يعمل بها Imba مع تحديثات DOM. تفاصيل حول هذا يمكن العثور عليها هنا .



يقول مؤلف هذه المادة ، المؤسس المشارك لمشروع Scrimba ، إنه يستخدم Imba منذ عدة سنوات. ووفقا له ، فإن الكتابة بهذه اللغة هي متعة حقيقية ، لأنها ، بالمقارنة مع JavaScript ، تحتوي على صيغة أنظف ، مما يحسن من قراءة الكود.

هذه المادة عبارة عن دليل للإمبا للمبتدئين ، حيث سيسمح لك تطويرها بالبدء في إنشاء تطبيقات بسيطة. أولاً ، سيتم الكشف عن أساسيات اللغة هنا ، وسيتم النظر في تطوير واجهات المستخدم بمساعدتها. سيُظهر على الفور إعداد بيئة التطوير للبرمجة على Imba.

حول المشاريع التي تستخدم Imba


قبل الدخول في الشفرة ، أود أن ألفت انتباهكم إلى حقيقة أن Imba ليس مثل لغة غريبة أخرى تم تجميعها في JS وتستخدم حصريًا في مشاريع الهواة. كما أنها تستخدم في التطبيقات الخطيرة للشركات الكبيرة.

مثال على تطبيقه هو منصة دعم مزاد الأسماك في أيسلندا. في هذا البلد ، تمثل تجارة الأسماك حوالي 1.6 ٪ من الناتج المحلي الإجمالي ، وهو ما يقرب من 390 مليون دولار.


مزاد الأسماك الأيسلندية

مثال آخر هو منصة التدريب Scrimba.com ، حيث يتم استخدام Imba على أجزاء العميل والخادم من المشروع. تعتمد قابلية استخدام هذا النظام الأساسي ، الذي يعتمد على تطبيق معقد ، اعتمادًا كبيرًا على قدرة Imba على مزامنة تغييرات DOM بسرعة.


منصة Scrimba.com

نتيجة لذلك ، يمكننا القول أن اللغة التي ستلتقي بها اليوم مناسبة لتطوير مشاريع بمقاييس مختلفة.

بناء الجملة


يشبه بناء جملة Imba جافا سكريبت ، لكن لغات أخرى مثل Ruby و Python لها أيضًا تأثير. ربما سيتم اعتبار ميزات بناء جملة Imba ملائم كمثال. يوجد أدناه دالة JS بسيطة تقوم بإرجاع أكبر رقمين تم تمريرها إليها ، أو إذا كانت هذه الأرقام متساوية ، false .

 function findGreatest(num1, num2) { if (num1 > num2) {   return num1 } else if (num2 > num1){   return num2 } else {   return false } } 

اكتب الآن نفس الشيء على Imba.

 def findGreatest num1, num2   if num1 > num2       num1   elif num2 > num1       num2   else       false 

ربما مقارنة هذين المثالين ، يمكنك أن ترى على الفور الاختلافات بين Imba وجافا سكريبت. وهي ، على النحو التالي:

  1. function يتحول إلى def . function استبدال function الكلمة المفتاحية def .
  2. عدم وجود أقواس. معلمات الدالة غير محاطة بأقواس. في Imba ، في الواقع ، نادراً ما تكون هناك حاجة إلى أقواس ، على الرغم من أنه يمكنك استخدامها إذا أردت.
  3. المسافة البادئة. تلعب المسافة البادئة دورًا مهمًا للغاية في Imba. وهذا يعني أن ليست هناك حاجة الأقواس مجعد هنا.
  4. مفقود return الكلمة. في Imba ، يتم تنفيذ القيم المرتجعة من الدوال بشكل ضمني ، أي ليست هناك حاجة للكلمة الرئيسية المرتجعة. إرجاع Imba تلقائيًا تعبير الوظيفة الأخير.

هذا لا يعني أن ميزات بناء الجملة الموضحة أعلاه هي أهم جانب في Imba ، ولكنها تجعل الكود أكثر إيجازًا من الكود المشابه المكتوب في JavaScript. ستصبح هذه الميزة أكثر وضوحًا أثناء تقدمنا ​​عبر المواد.

تصميم واجهة المستخدم


دعونا نتحدث عن إنشاء واجهات المستخدم باستخدام Imba. في الواقع ، تم إنشاء هذه اللغة فقط لهذا الغرض. على وجه الخصوص ، هذا يعني أن العقد DOM مدمجة في اللغة في شكل ما يسمى "كائنات من الدرجة الأولى".

إذا كانت لديك خبرة في تطوير React ، فيمكنك مراعاة هذه الميزة من Imba كما لو أن Imba لديها نسختها الخاصة من JSX مدمجة في اللغة.

اطلع على التعليمة البرمجية التالية ، حيث يتم استخدام مكتبة React لعرض زر وعرض رسالة إلى وحدة التحكم عند النقر فوق هذا الزر.

 class App extends React.Component { logOut() {   console.log('button clicked!') } render() {   return (     <div className="container">       <button onClick={this.logOut}>click me!</button>     </div>   ) } } 

إذا قمت بإعادة كتابة هذا على Imba ، فستحصل على ما يلي.

 tag App   def logOut e       log 'button clicked!'   def render       <self.container>           <button :tap.logOut> 'Click me!' Imba.mount <App> 

دعنا نقارن هاتين المقتطفات البرمجية. وهي ، نولي الاهتمام للميزات الثلاث التالية:

  1. العلامات المضمنة. لاحظ أن إنشاء class App extends React.Component تم تحويل class App extends React.Component إلى نموذج أبسط بكثير - tag App . الكلمة الأساسية tag مضمنة في اللغة. علامات DOM مدمجة أيضًا.
  2. عدم وجود علامات إغلاق. نظرًا لأن محاذاة الخط تحدد بنية البرنامج ، فلن تحتاج إلى إغلاق العلامات (على سبيل المثال ، استخدام </button> ). هذا يسرع إدخال نص البرنامج ويقلل من حجمه.
  3. بناء جملة فئة بسيطة. يبسط Imba العمل مع فئات HTML. وهي ، بدلاً من البناء المرهق لـ className="container" يكفي إضافة .container إلى العلامة نفسها.

ربما لاحظت أيضًا ميزات معالجات الأحداث في Imba. وهي ، نربط المعالج المقابل بالزر باستخدام :tap.logOut ، يُستخدم بدلاً من onClick={this.logOut} . هذه مجرد واحدة من عدة طرق للتعامل مع الأحداث القادمة من المستخدم. تفاصيل حول هذا يمكن العثور عليها هنا .

العمل مع البيانات


الآن دعونا نتحدث عن العمل مع البيانات في Imba. يوضح المثال التالي تطبيق React ، في حالة مكون App الذي يوجد به متغير count يساوي 0. تنخفض قيمة هذا المتغير أو تزيد عن طريق النقر فوق الأزرار المقابلة.

 class App extends React.Component { state = {   count: 0 } increase = () => {   this.setState({     count: this.state.count + 1   }) } decrease = () => {   this.setState({     count: this.state.count - 1   }) } render() {   return (     <div className="container">       <button onClick={this.increase}>Increase!</button>       <button onClick={this.decrease}>Decrease!</button>       <p>{this.state.count}</p>     </div>   ) } } 

إليك كيف سيبدو الأمر نفسه على Imba.

 tag App   prop count default: 0   def increase       count += 1   def decrease       count -= 1   def render       <self.container>           <button :tap.increase> 'Increase!'           <button :tap.decrease> 'Decrease!'           <p> count Imba.mount <App> 

أول ما يلفت انتباهك عند مقارنة هذين المثالين هو الفرق في مقدار الكود.

مثال Imba أقصر مرتين تقريبًا - سواء من حيث عدد الأسطر ومقدار الشفرة.

على الرغم من أن مقارنة عدد أسطر التعليمات البرمجية عند مقارنة لغات البرمجة ليست مهمة للغاية ، إلا أنها تؤثر على قابلية قراءة التعليمات البرمجية ، والتي تلعب بالفعل دوراً ، على مقياس قاعدة شفرة معينة. أقل رمز على Imba يعني سهولة القراءة مقارنة React.

الوصول الذاتي الضمني


ربما لاحظت أنه في المثال أعلاه ، يمكننا الوصول إلى متغير مثيل الكائن مباشرةً ، مع الإشارة فقط إلى count الاسم. في React ، يتم تنفيذ نفس الشيء باستخدام this.state.count .

في مثالنا على Imba ، يمكن للمرء أيضًا استخدام بنية للنموذج self.count . ومع ذلك ، يتم الوصول إلى self هنا ضمنيًا ، لذلك تكون self اختيارية. عند الإشارة إلى count ، يكتشف Imba ما إذا كان هذا المتغير موجودًا إما في النطاق أو في مثيل التطبيق نفسه.

قابلية التبادل


هناك اختلاف رئيسي آخر بين المثالين السابقين وهو كيفية تطبيق تغيير الدولة. في مثال مكتوب في Imba ، الحالة قابلة للتغيير ، مما يسمح لك بتغيير قيمة متغير count مباشرةً.

React يأخذ نهجا مختلفا ، حيث تعتبر قيمة this.state قابلة للتغيير ، ونتيجة لذلك فإن الطريقة الوحيدة لتغييرها هي استخدام this.setState .

إذا كنت تفضل العمل في حالة غير قابلة للتغيير ، يمكنك استخدام المكتبة المناسبة مع Imba. لغة Imba في هذا المعنى ليست مرتبطة بأي حل معين. في مشروع Scrimba ، نستخدم حالة قابلة للتغيير ، لأننا نعتقد أننا لسنا بحاجة إلى التكاليف الزائدة لموارد النظام اللازمة لضمان الحصانة.

إعداد بيئة التطوير


الآن وقد تعرفت على أساسيات Imba ، فقد حان الوقت للتجربة. للقيام بذلك ، سوف تحتاج إلى تكوين بيئة التطوير. للقيام بذلك ، فقط قم بتنفيذ الأوامر التالية.

 git clone https://github.com/somebee/hello-world-imba.git cd hello-world-imba npm install npm run dev 

بعد ذلك ، انتقل إلى المتصفح على http://localhost:8080/ وستظهر لك الصفحة الرئيسية للمشروع. من أجل تعديل التطبيق - تحرير الملف ، والذي يمكن العثور عليه في src/client.imba .

إذا لم يناسبك التثبيت المحلي لـ Imba ، فيمكنك استخدام رمل الإنترنت التفاعلي لمشروع Scrimba.

إمبا الأداء


دعونا نتحدث عن أداء التطبيقات المكتوبة في إمبا. السبب في أن Imba يسمح لك بإنشاء تطبيقات ويب سريعة للغاية لأن هذه اللغة لا تستخدم مفهوم DOM الظاهري ، الذي أصبح شائعًا جدًا في React. يستخدم Imba تقنية DOM Memoized. إنه أبسط من DOM الظاهري ، ويستخدم آليات وسيطة أقل للعمل مع DOM.

في هذا المعيار ، الذي يمكنك تشغيله في المنزل ببساطة عن طريق النقر على زر RUN BENCHMARK على صفحتها ، نقارن عدد العمليات مع DOM التي يمكن إجراؤها في الثانية خلال تعديل قائمة TODO باستخدام Imba و React و Vue.

في الاختبار ، الذي يتم عرض نتائجه أدناه ، اتضح أن Imba أسرع 20-30 مرة من React و Vue. على أجهزة كمبيوتر مختلفة ، ستختلف نتائج الاختبار.


قياسات الأداء Imba ، React ، و Vue

كما ترون ، فإن استخدام Imba يعني القدرة على العمل بسرعة كبيرة مع DOM.

ملخص


في هذه المقالة ، درسنا فقط أبسط من Imba. إذا كنت مهتمًا بهذه اللغة ، ألقِ نظرة على وثائقها . على وجه الخصوص ، سيكون من المفيد إتقان مفهومه المتمثل في استخدام getters و setters وآلية المكالمات الضمنية. فيما يلي قائمة بالموارد المفيدة المتعلقة بالإيمبا. تجدر الإشارة إلى أنه في البداية قد تبدو هذه اللغة صعبة ، سوف يستغرق الأمر بعض الوقت لإتقانها ، ولكن ، كما يعلم الجميع ، لا يمكنك بسهولة الحصول على سمكة من بركة.

أعزائي القراء! هل تخطط لاستخدام لغة Imba في مشاريعك؟

Source: https://habr.com/ru/post/ar431874/


All Articles