RSS

إنفض الغبار عن عادات JavaScript البالية

01 أغسطس

إن سبق لك وأن عملت في مجال تطوير تطبيقات الويب على الشابكة (الإنترنت) فلابد أنك قد إلتقيت ببعض أوامر وشيفرات لغة JavaScript حتى وإن كان ذلك اللقاء على نطاق محدود وضيق لا يتعدى مثلا نسخ بعض أوامر لغة JavaScript من موقع أو مثال ما ومن ثم لصقها ضمن صفحات موقعك مع بعض من التعديلات الطفيفة لتتلاءم تلك الأوامر مع ما لديك من أسماء لعناصر ضمن الصفحة أو حقول إدخال. تستخدم لغة JavaScript عزيزي القارئ لتنفيذ الأوامر البرمجية على مستوى المتصفح وهي تعد اللغة الأكثر شيوعا وشعبية في هذا المجال وتكاد تكون الوحيدة المتفق عليها ما بين أنواع المتصفحات المختلفة المتوافرة في عالم الويب، طبعا إن استثنينا من حساباتنا تقنية الفلاش Flash من شركة أدوبي Adobe والتي بات مستقبلها على المدى البعيد غير مضمون بعد ظهور الإصدار الخامس من لغة HTML من جهة، والذي يقدم بديلا أكثر جدارة ومعيارية منها، ومن جهة أخرى الحرب بسبب المعلنة تارة والمخفية طورا من قبل بعض اللاعبين الكبار مثل شركة أبل التي لم تدعم تشغيل ملفات الفلاش على متصفحات هواتف الآيفون وحواسيب الآيباد اللوحية التي تنتجها صاحبة أكبر قيمة سوقية في عالم شركات الحواسيب اليوم. وعلى الرغم من شعبية وانتشار لغة JavaScript، إلا أنها تستخدم في بيئة إعتاد المطورون فيها على إنجاز معظم العمل البرمجي على مستوى المخدم، وهذا هو تحديدا سبب تهميش وإهمال العديد من مطوري تطبيقات الويب لدورها وعدم إيلاءها الاهتمام الذي تستحقه، وكدليل على ذلك لاحظ ندرة الدورات التدريبية التي تعلم لغة JavaScript بحد ذاتها في بلدنا الحبيب سورية على سبيل المثال (هذا في حال وجود أي من تلك الدورات أصلا)، على الرغم من وجود الكثير من الدورات التدريبية التي تختص بمجال تطوير تطبيقات الويب بشقيه سواء على طرف المخدم (مثل دورات PHP و .NET وغيرهما) أو على طرف الزبون وهو المتصفح في حالتنا هذه (مثل دورات تصميم المواقع والتي تعلم كل من HTML و CSS)، وإن كنت محظوظا فستحصل على جلسة أو إثنتين حول لغة JavaScript في أي من تلك الدورات التدريبية يتم الحديث فيها عن بعض الاستخدامات الشائعة لتلك اللغة مثل عمليات التحقق أو التفاعلية مع المستخدم وهو ما يعزز في نهاية المطاف ثقافة القص واللصق.


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

هذا مثال عما كانت عليه أغلب تطبيقات واستخدامات لغة JavaScript في الماضي القريب، لكن الآن ومع بزوغ فجر التطبيقات القائمة على استخدام تقنية AJAX تغيرت أحوال لغة JavaScript بشكل جذري، حتى أن المتصفحات باتت تتنافس فيما بينها حول مدى سرعة وفعالية مفسر لغة JavaScript الذي تستخدمه، فأصبحنا نسمع أن المفسر في الإصدار الجديد من المتصفح الفلاني بات أسرع بكذا مرة من الإصدار السابق، وأخذت إختبارات الأداء والسرعة لمفسر لغة JavaScript تعتبر من الاختبارات الأساسية لتقييم أي متصفح وتحديد مدى علو كعبه بين أقرانه من المتصفحات. ليس هذا فحسب، بل إنتشرت أطر العمل الخاصة بهذه اللغة ومن بينها Prototype و jQuery وهو أمر إن دل على شيء فإنه يدل على الدور العميق الذي باتت لغة JavaScript تلعبه في عالم الويب بحيث بات المطورون بحاجة إلى مكتبات وأطر عمل تساعدهم في تطوير تطبيقاتهم.

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

الإستخدام الصحيح لمعرف <script>

عندما ترغب في تضمين تعليمات JavaScript داخل أي صفحة HTML فعليك استخدام معرف <script> بالصيغة التالية:

مع ذلك كثيرا ما نرى استخدام الخاصية language كالتالي:

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

إحفظ تعليماتك في ملف خارجي

إن استخدام ملف خارجي بلاحقة js هو خيار أكثر ترتيبا ونظافة من نثر تلك التعليمات داخل صفحة HTML المعنية من جهة، ومن جهة أخرى فإن مثل هذا السلوك سيتيح للمتصفحات حفظ ذلك الملف ضمن ذاكرتها المخبئية (Cache) بحيث لا تعود إلى طلب وتحميل شيفرات JavaScript خاصتك في كل مرة يتم فيها طلب الصفحة، وهو ما يقود بالنتيجة إلى تحسين أداء وسرعة عرض صفحات موقعك. للقيام بذلك ما عليك سوى وضع تعليمات JavaScript التي تستخدمها في ملف خارجي بامتداد js كما سبق وأن ذكرنا، ومن ثم الإشارة إليه باستخدام معرف script كما هو موضح بالمثال التالي:

لا تؤطر تعليماتك برموز التعليقات في HTML

لقد كانت بعض المتصفحات في تسعينيات القرن الماضي عاجزة عن تفسير وتنفيذ تعليمات لغة JavaScript كالمتصفح Netscape 1.0 على سبيل المثال، بالتالي ومنعا لأي نتائج غير مرغوب بظهورها على مثل تلك المتصفحات، فقد كان ينصح في الفترة ما بين عامي 1994 و 1997 بتأطير مقاطع شيفرات JavaScript لتبدو وكأنها ليست سوى تعليقات HTML غير مطلوب عرضها، وبالتالي فإن تلك المتصفحات التي لا تفقه تفسير نصوص JavaScript كانت تهمل مثل تلك المقاطع ببساطة. المثال التالي يوضح ما نتكلم عنه هنا في هذه الفقرة:

لكن في وقتنا الحاضر فإن كافة المتصفحات (بما فيها المتصفح IE 6 سيء السمعة) قادرة على تفسير تعليمات لغة JavaScript، حتى أن المتصفحات الغير قادرة على تنفيذ تعليمات لغة JavaScript لسبب أو لآخر (كالمتصفح Opera Mini للهواتف المحمولة) تعلم تماما طبيعة تلك الشيفرات وتستثنيها عند عرض محتويات الصفحة.

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

قم بتضمين شيفرتك في نهاية ملفات HTML
قد تبدو هذه النصيحة بالذات غريبة وتخالف تماما ما هو معتاد ومستخدم على نطاق واسع، لكن نعم، فعلى الرغم من أنه كان ينصح منذ فترة ليست بالبعيدة أن يتم تضمين شيفرات JavaScript ضمن قسم head في صفحة HTML، إلا أنه نظرا لكون المتصفحات تقوم بقراءة ملفات HTML من أعلاها إلى أدناها بالتسلسل بما في ذلك الملفات الخارجية والتي يتم تحميلها تلقائيا بمجرد الإشارة إليها، ونظرا لزيادة الإعتماد على لغة JavaScript في تطبيقات الويب الحديثة فإننا نلاحظ التضخم في حجم مثل تلك الملفات مقارنة بما كانت تستخدم لأجله سابقا من استخدامات بسيطة مثل التحقق وبعض التفاعلية كما في الأيام الخوالي، وهو ما يعني (في حال وجود شيفرات JavaScript ضمن ترويسة ملف HTML في قسم head) أن شيفرات JavaScript تلك سيتم تحميلها حتى قبل بعض أجزاء المحتوى ضمن الصفحة. ولجعل عملية تحميل شيفرات JavaScript تلك تلي عرض محتوى الصفحة ذات الأولوية القصوى عادة لا أن تسبقها، عليك تضمين ملفات JavaScript في نهاية وثيقة HTML لا بدايتها وهو ما يوضحه المثال التالي:

تفحص وجود المزايا عوض نوع المتصفح
كل مبرمج JavaScript متوسط الخبرة يعلم تماما أن هنالك فروقات في صيغ بعض التعليمات المتقدمة في لغة JavaScript تظهر ما بين المتصفحات المختلفة، ومثال ذلك طريقة الحصول على كائن من الصنف XMLHttpRequest والتي تختلف ما بين إصدارات المتصفح IE من جهة، وبين غيرها من المتصفحات مثل المتصفح Firefox ذائع الصيت، وكما لا يخفى على المتخصصين فإن لمثل هذا الكائن دور رئيسي في عملية الاتصال بين المتصفح من جهة والمخدم من جهة أخرى في جميع التطبيقات التي تستخدم تقنية AJAX. لذا قد تجد بعض المبرمجين يحاولون التعرف على نوع المتصفح الذي يعرض الصفحة الحالية، ومن ثم تنفيذ مقاطع مختلفة من التعليمات بناء على نوع ذلك المتصفح الذي تم التعرف عليه. بشكل عام يعد هذا الأسلوب واحدا من العادات السيئة التي يجب الإقلاع عن استخدامها مجددا. إن الطريقة الأفضل هي تفحص وجود الميزة المراد إستخدامها مباشرة، وهو ما يجب أن يجري قبل استخدام أي من تلك المزايا المتقدمة موضع الخلاف في طريقة استدعائها ما بين المتصفحات المختلفة، وبالتالي يجب أن يتم التحقق من وجودها بداية ومن ثم القيام باستخدامها إن كانت متاحة على المتصفح الحالي، وهذا أفضل من محاولة التعرف على نوع المتصفح ورقم إصداره وما يستتبع ذلك من الحاجة إلى معرفة إمكانيات كل ما هو متاح من متصفحات وإصدارات.

استخدام الأقواس المربعة لخصائص الكائنات
يمكن الوصول إلى خصائص أي كائن في لغة JavaScript باستخدام إحدى طريقتين، إما باستخدام النقطة كفاصل ما بين اسم الكائن واسم الخاصية، مثلا: myObject.property أو عن طريق إحاطة اسم الخاصية بأقواس مربعة عقب ذكر اسم الكائن نفسه: [“myObject[“property على سبيل المثال

إن استخدام النقطة كما في الطريقة الأولى يجعل من اسم تلك الخاصية في الصيغة مثبتا ولا يمكن تغييره أثناء زمن التنفيذ (إن كان لذلك حاجة أصلا)، فيما تقوم لغة JavaScript في الطريقة الثانية بتقييم ما هو داخل الأقواس المربعة بداية قبل الانتقال للخاصية المشار إليها بالنسبة للكائن المعطى، وهو ما قد يتيح استخدام الصيغة التالية على سبيل المثال: [myObject[“value”+i في حين أن المقابل الذي يستخدم النقطة غير صحيح ويعطي نتيجة مخالفة تماما لما هو متوقع myObject.value+i

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

الإشارة للعناصر بطريقة صحيحة
إن كل نماذج الإدخال (form) في وثائق HTML يجب أن تمتلك قيمة لخاصية الإسم name، وعلى الرغم من أن كثير من المتصفحات تتيح الوصول إلى عناصر الإدخال في نموذج الإدخال مباشرة وكأنها خصائص للوثيقة الحالية، إلا أن الركون إلى ذلك والاعتماد عليه هو إجراء غير موثوق، والأفضل في مثل هذه الحالة هو استخدام الشكل الكامل والصحيح لعملية الإشارة تلك كما هو موضح في المثال التالي:


كما يمكن من جهة أخرى إعطاء العنصر قيمة لخاصية id في معرفه ومن ثم الوصول والإشارة إليه باستخدام الطريقة ()getElementById

استخدام خاصية onClick في الروابط
عندما ترغب في إنشاء رابط يستدعي تابع JavaScript ما فلا تستخدم الأسلوب الشائع التالي:

بدلا من ذلك ضع اسم التابع المراد إستدعاؤه ضمن خاصية onClick، مع ملاحظة أن سلوك الرابط يتغير بتغير القيمة المعادة من ذلك التابع، فإن كانت true أو ما يكافؤها فسيتم الانتقال إلى الصفحة المشار إليها بخاصية العنوان href وإلا فلن يتم الانتقال إلى تلك الصفحة مطلقا. بالتالي يتم الإشارة ضمن خاصية href إلى عنوان صفحة تتضمن على سبيل المثال شرحا يشير إلى ضرورة تمكين لغة JavaScript حتى يتم تنفيذ المطلوب بشكل صحيح:

وهكذا إن تم تنفيذ التابع ()doSomething وهو من برمجة المطور، سيتلوه الأمر return false وبالتالي لن يتم الانتقال إلى الصفحة jsRequired.html، وإن لم يكن باستطاعة المتصفح تنفيذ شيفرة JavaScript الموجودة ضمن الخاصية onClick فسيتم الانتقال إلى تلك الصفحة تلقائيا عند النقر على الرابط وذلك نظرا لعدم إعادة القيمة false كما هو مطلوب من onClick لإيقاف مثل هذا السلوك.

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

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

استخدام تنسيق JSON لتبادل المعطيات
عندما تحتاج إلى تبادل المعطيات مع المخدم وبالذات البيانات ذات الطبيعة المركبة كما في بعض حالات تطبيقات AJAX المتقدمة، حاول استخدام تنسيق (JSON (JavaScript Object Notation بدلا من تنسيق XML نظرا لكونه طريقة أكثر فعالية خصوصا على طرف المتصفح، وذلك إن كانت لغة البرمجة التي تستخدمها على طرف المخدم تدعم بدورها التعامل مع مثل هكذا تنسيق. لمزيد من المعلومات حول هذا التنسيق إرجع إلى مقالة “تنسيق JSON لتمثيل الكائنات في لغة JavaScript“.

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

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

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


 
9 تعليقات

Posted by في 1 أغسطس 2011 in تقنيات الويب

 

الأوسمة:

9 responses to “إنفض الغبار عن عادات JavaScript البالية

  1. Homam Mawaldi

    1 أغسطس 2011 at 3:49 مساءً

    متل ما حكيت حضرتك أستاذي، الجافا سكربت صارت أساسية بتطبيقات الويب الجديدة
    ومن فترة بلشنا نسمع بـانتشار بيئة node.js اللي بتخلي الجافا سكربت يشتغل عل سرفر سايد – وهي أسرع من الـ php بمعالجة الطلبات
    ———————-
    بصراحة أكثر استخداماتي للجافا سكربت بتكون عن طريق jquery plugins أو كم method من المكتبة … بس مابكتب كتير كود😦

     
  2. linuxscout

    2 أغسطس 2011 at 1:59 مساءً

    هذا المقال جاء في الوقت المناسب لي، فأنا أحتاج إليه

     
  3. Hussain Alhaddad

    18 أغسطس 2011 at 5:11 مساءً

    مقال رائع جداً ، يعطيك العافية

     
  4. Jnom

    6 سبتمبر 2011 at 11:46 صباحًا

    السلام عليكم
    بصراحة مقال رائع جدا، لقد قرأت فيما سبق عدة مقالات باللغة الأجنبية و كنت أنوي أن أترجمها إلى لغة الضاد، لكنني وجدتها كلها ملخصة و مختصرة هنا بما في ذلك من معايير سرعة تنفيذ الكود و سرعة تحميل صفحة الـ HTML و كذا ترتيب مكونات الصفحة الخارجية…..الخ

    لي تعليق بسيط حول استخدام خاصية onClick في الروبط، أنا أرى أنه من الأحسن دمج كل الاستدعاءات المتعلقة بالكليك في الملف الخارجي مع التعليمات الاخرى و بالتحديد عند الحدث ready

    لك جزيل الشكر أخي الكريم
    تحياتي

     
    • خالد الشمعة

      7 سبتمبر 2011 at 8:14 صباحًا

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

       
  5. أحمد

    10 نوفمبر 2011 at 9:13 مساءً

    مقال في المستوى شكرا أخي على التوضيحات

     
  6. فارس

    14 يونيو 2012 at 2:44 مساءً

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

     
    • خالد الشمعة

      17 يونيو 2012 at 7:30 صباحًا

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

       
      • doublevie19

        5 سبتمبر 2013 at 11:05 مساءً

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

         

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

 
%d مدونون معجبون بهذه: