Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() Vue.js تحسين التطبيق. بعض النصائح العملية - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2020-10-30
تطوير البرمجيات

تحسين تطبيق Vue.js. بعض النصائح العملية

The Codest

دومينيك جرزيزيلسكي

Software Engineer كبير Software Engineer

Vue هو إطار عمل تقدمي سريع النمو لبناء واجهات المستخدم. لقد أصبح إطار عمل JavaScript صاحب أكبر عدد من النجوم على GitHub والمشروع الأكثر نجومًا لعامي 2016 و2017 على نفس البوابة.

إنشاء التطبيقات في Vue بسيطة حقًا على هذا النحو، ولكن إذا كنت ترغب في إنشاء تطبيقات ذات جودة عالية، فأنت أمام تحدٍ أكبر قليلًا.

كونك جزءًا من The Codest الفريق والمدافع الحقيقي عن تقنية 1TP5555T، أريد مشاركة بعض الإرشادات (لم يتم نسخها من مستندات Vue الرسمية) والتي ستعمل على تحسين الكود الجودة و أداء تطبيقات Vue.

أولاً، قم بتطبيق دليل النمط Vue و ESLint

لا أريد أن أكرر ما قيل بالفعل. هناك دليل للأسلوب في مستندات Vue:
مستندات 1TP5555T 2 - دليل الأنماط أو
مستندات Vue 3 - دليل الأنماط

يمكنك أن تجد هناك أربع فئات من القواعد. نحن نهتم حقاً بثلاث منها:

  • أساسي قواعد تمنعنا من الأخطاء
  • موصى به و موصى به بشدة قواعد الحفاظ على أفضل الممارسات - إلى تحسين الجودة وسهولة قراءة التعليمات البرمجية.

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

بشكل افتراضي، يجب أن تجد التمديدات في تكوين ESLint واستبدال "المكوّن الإضافي:vue/الأساسي" مع "المكون الإضافي:vue/موصى به"هذا كل ما في الأمر.

بالطبع، هناك بعض القواعد التي يجب أن تتذكرها، لأن ESLint لا يمكنها التعامل مع كل شيء بمفردها. على سبيل المثال

  • تسمية متسقة,
  • تسمية الأحداث في حالة الكباب,
  • البادئة $_namespace_TP62T_Namespace_ الخصائص الخاصة في المكونات الإضافية والخلطات وغيرها,
  • ترتيب عنصر المستوى الأعلى لمكون الملف الواحد.

لا تستخدم عدة v-إذا

قد يكون من الضروري في بعض الأحيان تقديم أكثر من عنصر واحد بشكل مشروط، ولكن غالبًا ما يكتب الناس شيئًا من هذا القبيل:

المحتوى

المحتوى

المحتوى

إنه غير ضروري لأنه يمكننا كتابته بشكل أكثر أناقة:

<code> <template v-if="condition">
   <div>المحتوى</div>
   <div>المحتوى</div>
   <div>المحتوى</div>
 </template>

ولكن ماذا لو أردنا القيام بذلك كعنصر جذر؟ في Vue، لا يمكننا استخدام لهذا الغرض. في بعض الحالات، قد يكون التغليف في div كافياً.

لا بأس بذلك، ولكن، بقدر ما قد نرغب في ذلك، لا يمكننا أحيانًا التفاف العناصر في div، على سبيل المثال، بسبب دلالات html (على سبيل المثال

  • يجب أن يكون ابنًا مباشرًا لـ
      أو ). لذلك عندما يتعين علينا أن نكتب

    • (( item.name ))
    • ...وسنرى خطأ من هذا القبيل :

      Vue js code Vue

      يمكننا التعامل معها من خلال باستخدام JSX ومكون وظيفي، كما يجب أن نمرر قيمة منطقية وستحل محل v-إذا.

      لا تكتب معالجات استدعاء واجهة برمجة التطبيقات في المكونات

      في الواقع، هذا فقط أحد الأمثلة على ما لا يجب عليك فعله في المكونات. ببساطة افعل ما هو ضروري محليًا في منطق المكونات. يجب فصل كل طريقة يمكن أن تكون خارجية واستدعائها فقط في المكونات مثل منطق الأعمال.

      مثال على ذلك:

      بدلاً من طريقة مثل هذه

      تم إنشاؤه() (
      هذا.fetchArticles();
      <),
      الطرق: (
       مزامنة جلب المقالات () (
        جرّب (
          const data = await axios.get(url);
          this.articles = data.articles;
          ) التقاط (e) (
          // معالجة الخطأ
          )
        )
      )

      اكتب شيئًا كهذا - فقط قم باستدعاء الأسلوب المناسب الذي سيعيد نتائج واجهة برمجة التطبيقات:

      aync fetchArticles() (
         حاول (
           this.articles = await ArticlesService.fetchAll();
         ) إمساك (e) (
           // معالجة الخطأ
         )
        )

      استخدم فتحات بدلاً من كميات كبيرة من الدعائم

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

      
      (( نص ))

      في هذه المرحلة، إنه مكون بسيط يقبل دعامة نصية فقط. حسنًا، ولكن قد لا يكون ذلك كافيًا لأننا سنحتاج إلى أيقونات في الزر. في هذه الحالة، علينا إضافة خاصيتين أخريين (2، لأننا نريد أن يكون لدينا خيار الإضافة قبل النص أو بعده). إذًا، سيبدو المكوّن هكذا:

      
      (( نص ))

      الأمر ليس سيئاً، لدينا 3 دعائم فقط، ولكن...

      ماذا لو احتجنا إلى مؤشر تحميل؟ حسنًا، سيتعين علينا إضافة دعامة أخرى. وذلك لكل ميزة جديدة! هل تبدو مواكبة نمو عدد المكونات أمرًا صعبًا الآن؟ نعم، يبدو كذلك بالتأكيد!

      لنستخدم الفتحات بدلاً من ذلك.

      أبسط، أليس كذلك؟ حسناً، ولكن كيف يمكننا الحصول على ميزة إضافة أيقونة؟ الأمر سهل للغاية! فقط استخدم المكوّن هكذا:

      رجوع
      
      التالي

      طريقة سهلة لتحسين الأداء

      سأطلعك على بعض النصائح التي يسهل تطبيقها حقًا، حتى تتمكن من الاستفادة منها على الفور.

      مسارات التحميل البطيء

      في بعض الأحيان قد يكون لدينا مسارات متاحة فقط للمسؤولين أو المستخدمين الذين لديهم وصول خاص، كما قد تكون زياراتهم أقل من غيرهم. إنها حالات مثالية لاستخدام مسار التحميل البطيء.

      فقط استخدم دالة السهم في خاصية المكون الخاص بك لإرجاع دالة الاستيراد:

      تصدير افتراضي VueRouter جديد VueRouter (
         (
           الوضع: 'تاريخ',
           المسارات: [
             (
               المسار: '/الهبوط',
               المكوّن: () => استيراد ('.../الصفحات/صفحات/مرحبًا'),
               الاسم: 'ترحيب'
             ),
        ...

      بدلاً من:

      استيراد PW مرحبًا من '@/pages/p-welcome';
      
      تصدير افتراضي VueRouter جديد VueRouter (
      (
      الوضع: 'تاريخ',
      المسارات: [
      (
      المسار: '/الهبوط',
      مكون: PW welcome, //مكون مستورد فقط
      الاسم: 'ترحيب'
      ),

      تحميل كسول لمكونات Vue

      قد يحدث وضع مماثل مع مكونات 1TP5555T. يمكننا استيراد مكوّنات ملف واحد هكذا بتكاسل:

      المكون الكسول = () => استيراد ('pathToComponent.vue')
      تصدير افتراضي (
      المكوّنات: (lazyComponent )
      )
      
      // صيغة أخرى
      تصدير افتراضي (
      مكونات: (
      المكوّن الكسول: () => استيراد ('pathToComponent.vue')
      )
      )

      بفضل التحميل البطيء لذلك المكون، سيتم تنزيله فقط عند طلبه. على سبيل المثال، إن كان لدينا مكوّن بـ v-إذا، سيُطلب فقط في حال كان المكوّن للتصيير. لذا إن لم تكن قيمة v-إذا صحيحة، فلن يُحمَّل المكون. لهذا السبب يمكن أيضًا استخدام الاستيراد البطيء لـ JavaScript الملفات.

      المكافأة: عند استخدام Vue CLI 3+، يتم التحميل المسبق لكل مورد تم تحميله بشكل كسول بشكل افتراضي!

      تطوير vue js

      استخدم أغلفة شفافة بدلاً من دعائم السمات

      فكر في مكون مثل هذا المكون:

      بدون أي مشاكل، يمكننا استخدامه على هذا النحو:

      أو


      إنه يعمل، لأن Vue يسمح لك بتمرير سمات html إلى المكوّن حتى لو لم تُصرّحها كخاصيّات. تُطبَّق سمات html على العنصر الجذر للمُكوِّن (الإدخال في هذه الحالة).

      تظهر المشكلة عندما نريد توسيع مكوّن الإدخال الخاص بنا، حيث يمكن أن يبدو هكذا:

      <code> <template>
         <div class="form-group">
           <label :for="id">(( التسمية ))</label>
           <input
             :id="id"
             :value="value"
             class="base-input"
             @input="$emit('input', $event.target.value)"
           >
         </div>
       </template>

      والآن، باستخدام المكوّن بهذه الطريقة

       

      لن يعمل كما نريد، لأنه سيتم تطبيق النوع والعنصر النائب على div (العنصر الجذر) وهذا غير منطقي. لذا، نحن بحاجة إلى التعامل مع ذلك، لأننا نريد إضافة خصائصنا إلى عنصر الإدخال. قد تكون فكرتك الأولى هي "دعنا نضيف السمات التي نحتاجها!" وبالطبع سينجح ذلك، ولكن... ماذا لو أردنا استخدام النوع, الإكمال التلقائي, العنصر النائب, ضبط تلقائي للصورة, معطل, وضع الإدخالإلخ، إذن علينا تعريف الخاصيات لكل سمة من سمات html. أنا شخصيًا لا أحب هذه الطريقة الطويلة، لذا دعنا نبحث عن شيء أفضل!

      يمكننا التعامل مع المشكلة برمتها في سطرين فقط

      <template>
        <div class="form-group">
          <label :for="id">(( التسمية ))</label>
          <!-- pay attention to v-bind="$attrs" -->
          <input
            :id="id"
            v-bind="$attrs"
            :value="value"
            class="base-input"
            @input="$emit('input', $event.target.value)"
          >
        </div>
      </template>
      
      <script>
      export default (
        name: 'BaseInput',
        inheritAttrs: false, // <- pay attention to this line
        props: ['value', 'label', 'id']
      );
      </script>

      يمكننا استخدام v-bind="$attrs" وتمرير السمات مباشرةً إلى دون الإعلان عن كميات ضخمة من الدعائم. تذكر أيضًا بشأن إضافة خيار الوراثة: خطأ لتعطيل تمرير السمات إلى العنصر الجذر. لنذهب أبعد من ذلك قليلًا: ماذا لو احتجنا إلى إضافة مستمعي الأحداث إلى هذا الإدخال؟ مرة أخرى، يمكن التعامل معها عن طريق الخاصيات أو الأحداث المخصصة، ولكن هناك حل أفضل.

      <template>
        <div class="form-group">
          <label :for="id">(( التسمية ))</label>
          <!-- pay attention to v-on="listeners" -->
          <input
            :id="id"
            v-bind="$attrs"
            :value="value"
            class="base-input"
            v-on="listeners"
          >
      </div>
      </template>
      
      <script>
      export default (
        name: 'BaseInput',
        inheritAttrs: false,
        props: ['value', 'label', 'id'],
        computed: (
          listeners() (
            return (
              ...this.$listeners,
              input: event => this.$emit('input', event.target.value)
            );
          )
        )
      );
      </script>

      هناك خاصية محسوبة جديدة تُعيد المكوّن للمستمعين وتضيف مستمع الإدخال. نستخدم ذلك الإدخال المحسوب ببساطة عن طريق كتابة v-on="مستمعون".

      استخدم المراقب مع الخيار الفوري بدلاً من الخطاف والمراقب المُنشأ معًا

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

      تصدير افتراضي (
        الاسم: 'مكون ما',
        مشاهدة: (
          SomeWatchedProperty() (
            هذا.fetchData();
          )
        ),
        تم إنشاؤها() (
          هذا.fetchData();
        ),
        الطرق: (
          fetchData() (
            ) // التعامل مع بيانات الجلب
          )
        )
      );

      بالطبع، إنه يعمل، ولكن... إنه ليس أفضل نهج، ولا حتى نهج جيد. لذا، دعونا نتحقق من كيفية إعادة هيكلة هذا، مثال على نهج ليس سيئًا للغاية:

      تصدير افتراضي (
      الاسم: 'مكون ما',
      مشاهدة: (
        someWatchedProperty: 'fetchData'
      ),
        تم إنشاؤه() (
          هذا.fetchData();
        ),
        الطرق: (
          fetchData() (
            ) // التعامل مع بيانات الجلب
          )
        )
      );

      الإصدار أعلاه أفضل لأنّه ليس من الضروري وجود طريقة أخرى، لقد قمنا فقط بتسمية طريقة يجب استدعاؤها لتغيير خاصية المشاهدة.

      نهج أفضل:

      تصدير افتراضي (
          الاسم: 'مكون ما',
          مشاهدة: (
            SomeWatchedProperty: (
              المعالج: 'fetchData',
              فوري: صحيح
            )
          ),
          الطرق: (
            fetchData() (
              // التعامل مع بيانات الجلب
            )
          )
        );

      تخلصنا من خطاف الإنشاء. بإضافة الخيار "فوري"، نجعل هذا المكوّن يستدعي طريقة جلب البيانات مباشرةً بعد بداية الملاحظة (أي قبل خطاف الإنشاء بقليل وبعد ما قبل الإنشاء)، لذا يمكن استخدامه بدلًا من خطاف الإنشاء.

      ملخص تلميحات Vue.js

      لن تجعل هذه النصائح تطبيقك مثاليًا ولكن استخدامها سيجعل تطبيقك مثاليًا بسرعة تحسين جودة التعليمات البرمجية الخاصة بك. كما آمل أن تجد في الأمثلة أعلاه ما يثير اهتمامك.

      لاحظ أنه تم تبسيط بعضها لأغراض المقالة.

      اقرأ المزيد:

      JavaScript ميت تمامًا. شخص ما على الإنترنت

      نظرة أعمق على أكثر خطافات React شيوعًا

      مشاريع البرامج التي يمكنك استخدام JavaScript فيها

  • مقالات ذات صلة

    تطوير البرمجيات

    إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

    اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

    ذا كوديست
    تطوير البرمجيات

    أفضل 10 شركات لتطوير البرمجيات في لاتفيا

    تعرّف على أفضل شركات تطوير البرمجيات في لاتفيا وحلولها المبتكرة في أحدث مقالاتنا. اكتشف كيف يمكن لهذه الشركات الرائدة في مجال التكنولوجيا المساعدة في الارتقاء بأعمالك.

    thecodest
    الحلول المؤسسية وحلول التوسعة

    أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

    استكشف هذا الدليل الأساسي حول تطوير برمجيات جافا outsourcing بنجاح لتعزيز الكفاءة والوصول إلى الخبرة وتحقيق نجاح المشروع باستخدام The Codest.

    thecodest
    تطوير البرمجيات

    الدليل الشامل للاستعانة بمصادر خارجية في بولندا

    إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

    ذا كوديست
    الحلول المؤسسية وحلول التوسعة

    الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

    تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

    The Codest
    ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

    اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

      نبذة عنا

      The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

      المملكة المتحدة - المقر الرئيسي

      • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
        لندن، إنجلترا

      بولندا - مراكز التكنولوجيا المحلية

      • مجمع مكاتب فابريتشنا المكتبي، أليجا
        بوكوجو 18، 31-564 كراكوف
      • سفارة الأدمغة، كونستروكتورسكا
        11, 02-673 02-673 وارسو، بولندا

        The Codest

      • الصفحة الرئيسية
      • نبذة عنا
      • الخدمات
      • دراسات الحالة
      • اعرف كيف
      • الوظائف
      • القاموس

        الخدمات

      • استشاري
      • تطوير البرمجيات
      • تطوير الواجهة الخلفية
      • تطوير الواجهة الأمامية
      • Staff Augmentation
      • مطورو الواجهة الخلفية
      • مهندسو السحابة
      • مهندسو البيانات
      • أخرى
      • مهندسو ضمان الجودة

        الموارد

      • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
      • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
      • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
      • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
      • The Codest
      • The Codest
      • The Codest
      • Privacy policy
      • شروط استخدام الموقع الإلكتروني

      جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

      arArabic
      en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic