ايها افضل واسرع لتنفيذ كود معين , في الجافا سكربت VS سيرفر (php)؟
- Ahmed Khaled F
- 2014-02-01T05:21:31+00:00
السلام عليكم
جا في بالي سؤال فني , الحين لو ابغى اكتب كود معين , هذا الكود اقدر اكتبه ياما اما جافا سكربت او اكتبه بال php.
لانه انا عارف ان اكواد الجافاسكربت تنفذ على جهاز المستخدم , اما php تنفذ على السيرفر
الان ايها افضل من ناحية الاداء و السرعة ؟ وليش اذا امكن .
ويعكيم العافية
سؤالك مقسوم لـ أفضل و اسرع. في كلا الحالتين، عليك الاختبار لمعرفة ما يناسبك.
لنأخذ في الاعتبار مثالك لثمود
مثلاً نموذج تسجيل الدخول , لو ابغى اتحقق من اسم المستخدم والاميل و وكلمة المرور , وفيه تحت الفورم رسالة "اذا سجل صح او خطأ".
الأسرع: جافاسكريبت. لماذا؟ عملية التحقق ستكون في جهاز المستخدم. إذا أرسلت الطلب إلى الخادم للتحقق، عليك الانتظار مدة ( بدء الاتصال مع الخادم + التحقق من المعلومات باستخدام PHP + الرد من الخادم)
الأفضل: استخدام الطريقتين مع بعض. لماذا؟ إذا استخدمت جافاسكريبت، ستتحقق أولا من معلومات التسجيل و إذا كانت توافق شروطك، ستسمح بإرسال الطلب إلى خادمك. إذا لم توافق شروطك، ستُظهر رسالة خطأ و لن تسمح بارسال الطلب للخادم. لكن، أستطيع معرفة عنوان ارسال طلب التسجيل من وسم Form و إرسال طلب تسجيل باستخدام curl مثلا بدون المرور بأي جافاسكريبت. قبل فترة، أحد الأشخاص وضع الشرط التالي للتسجيل في موقعه "يجب ان يكون اسم المستخدم مكون من 6 حروف و أكثر". أرسلت طلب HTTP باسنخدام curl فيه معلومات التسجيل للعنوان المذكور في وسم form و استطعت التسجيل باسم مستخدم مكون من حرف واحد. لماذا؟ التحقق من شرط التسجيل كان Javascript فقط و لم يتحقق من الشروط من ناحية الخادم.
لذلك، الأفضل استخدام الطريقتين. في حالة قام شخص باستخدام الطريقة السابقة، سيكون لديك حل آخر لمنعه و إجباره لاتباع شروطك.
قد تسأل: لماذا أفضل الاثنين إذا الطريقة السابقة أثبتت أنك تستطيع تجاوز جافاسكريبت؟ ببساطة، عدد محاولات الحالة السابقة قليلة. و إذا قام شخص عادي بالتسجيل، من الأفضل توفير feedback سريع للتأكد من صحة المعلومات المُدخلة.
لنأتي لمثالك الآخر:
عندي صفحة html, وابغى اطبع فيها كلمها (مرحباً بك) وليكن 100000 مرة عن طريق لووب.
الأسرع: قد يكون Javascript. لماذا أسرع؟ إرسال معلومات عبر الانترنت بطئ. إذا أرسلت "مرحباً بك" فهذه 9 حروف. كل حرف عبارة عن بايت، إذا لديك صفحة فيها 100000 مرحبا بك، سيكون حجمها 9 * 100000 = تقريبا 1 ميغا. أما إذا أرسلت صفحة فيها كود javascript لكتابة 100000 مرحبا بك سيكون محتوى الصفحة كالتالي:
for (var i=0;i<100000;i++)
{
document.write("مرحباُ بك");
}
حجم الرد تقريبا 63 بايت. أقل من حجم الصفحة السابقة. إذا سرعة وصول هذه الصفحة للمستخدم أسرع.
لكن هل هذا الحل الأمثل؟ لا
يوجد حل آخر و هو إنشاء الصفحة مرة في PHP و حفظها في كاش أو استخدام مسرعات HTTP مثل varnish. استخدام الطريقة الثانية لأنها ستزيل الكثير من الضغط من خادمك و جهاز المستخدم. و سبب السرعة أن مسرّعات http تحفظ الصفحة في الذاكرة، و سترد على الطلبات من المعلومات المحفوظة في الذاكرة بدلا من الاستعلام من برنامجك المكتوب بـ PHP مثلا.
لكن،
هل زوارك من مستخدمي انترنت الجوال؟ إذا نعم، استخدم javascript لإرسال صفحة حجمها أقل لأن استخدام الانترنت في الجوال أغلى من العادي
هل زوارك لديهم أجهزة قديمة؟ استخدم مسرّع HTTP. إرسال طلب جافاسكريبت من هذا النوع سيبطئ من أجهزتهم.
هل عبارة "مرحبا بك" تتغير مع كل مستخدم؟ استخدم javascript لأن مسرّعات http تأخذ حيّز من الذاكرة، و إذا استخدمتها في هذه الحالة، أغلب الذاكرة ستكون مليئة بمعلومات مفيدة لشخص واحد فقط، و هذه طريقة سيئة للتعامل مع المشاكل.
هل زوارك معطلين javascript في متصفحاتهم؟ استخدم PHP أو مسرّع http
ما هدفي من طرح الأسئلة السابقة؟ لا توجد مهما كانت طريقة أفضل واحدة و ثابتة. لن تعرف الطريقة الأفضل و الأسرع إلا بعد الاختبار و الفكير و معرفة متطلبات موقعك و زوّارك". غير ذلك، *آراء شخصية.
أنا الشخص المقصود بوضع شرط تسجيل 6 أحرف كشرط تسجيل :) فى takefastnotes.com و هذا الموقف علمنى أن استخدم كلا الطريقتين :)
تحياتى لك
نعم تذكرت :) حياك الله
يجب إستخدام الإثنين معاً , وذلك لأنه استخدام javascript وحدها فى تنفيذ أشياء معينه قد لا يتم إذا كانت الجافاسكريبت معطله و كمثال على ذلك :
لديك فورم تسجيل الدخول , يمكنك فى حالة إستخدام الجافاسكريبت فقط عدم كتابة action الفورم أو كتابة وسوم form من الأساس و إستخدام الجى كويرى مع
$("#my_button").click(function(){
// post to check page
});
أما إذا كانت الجافا سكريبت معطله فلن يتمكن العضو من تسجيل الدخول
أما فى حالة إستخدامك لكلا النمطين فى عمل تسجيل الدخول فتقوم بعمل الفورم كاملة كأنك لن تستخدم الجافاسكريت أساساً , ثم بالجافاسكريبت تقوم بعمل منع submit للفورم و تقوم بالإرسال إلى صفحة التأكد من البيانات عن طريق الجى كويرى , فإن كان الجافا سكريبت معطلاً تستخدم الفورم بطبيعتها
هذا مجرد مثال , مثال آخر على برمجة تطبيق شات :
العنصر المتكرر لدينا فى الشات هو سطر التعليق , يحتوى على إسم المستخدم و ربما صورته و التعليق و التاريخ
تقوم بإرسال ID آخر تعليق وصل لك إلى php فترسل لك التعليقات التى تمت بعده
يمكن برمجة php لترسل التعليقات الجديده على شكل html كامل و تقوم فقط بعمل append لها و لكن ذلك سيستهلك موارد ووقت أطول فى التنفيذ
يمكن برمجة php لترسل التعليقات الجديده على شكل json array و تقوم الجافاسكريبت بفكها لعناصر و تركيبها على divs مثلاً ثم عمل append لها و ذلك سيستهلك موارد ووقت أقل فى التنفيذ
الجواب دائما في جافاسكربت. تخيل أن لديك حاسوب بمعالجات بعدد المتصفحات الإنترنت في العالم.
نعم حتى فحص السلامة validation قم به في جافاسكربت لكن لا تعتمد عليه وهذا أمر مهم.
ما معنى ذلك؟ عندما تقوم بفحص سلامة المدخلات بلغة جافاسكربت فإن المستخدم بمجرد أن يضغط على حرف في حقل الأرقام أو بمجرد إدخال تاريخ خاطئ مثل 31 شباط يتحول الصندوق إلى أحمر دون الإنتظار حتى يضغط إرسال ثم تذهب للخادم ويتحقق منها ثم تعود للمستخدم حمرا.
لكن ما معنى لا تعتمد عليها؟ يجب أن يظل التحقق في الخادم هو خط الدفاع الأول والإلزامي وما تقوم به في جافاسكربت ما هو إلا زخرفة وتلميح وتلوين للمستخدم.
ماذا الذي يمكنك أن تقوم به في جافاسكربت؟ تقريبا كل شيء لكن أهم شيء هو القولبة انظر مقالي عن mustache
كلامك صحيح انهم مختلفين تماماً , لانه php سيرفر , والجافا سكربت جهاز المستخدم .
بعطيك مثال تقريبي.
مثلاً نموذج تسجيل الدخول , لو ابغى اتحقق من اسم المستخدم والاميل و وكلمة المرور , وفيه تحت الفورم رسالة "اذا سجل صح او خطأ".
1- php : اي الافضل اني استخدم التحقق بكتابة اكواد php , واكتفي بطباعة الرسالة بالاجاكس.
2 - javaScript ولا اخليها كلها جافا سكربت.
اي منهم راح يكون ردة فعلة اسرغ من الثانية
التحقق من صحة البريد الإلكتروني وقوة كلمة السر بالإمكان عملها بالجافا سكربت لتخفيف الحمل على المزود.
التحقق من أن الحساب موجود فعلاً يحتاج إلى التواصل مع المزود.
بعد أن يقوم بالتسجيل لابد أن يتم إرسال البيانات وحفظها ممايعني أنه في مرحلة من المراحل سوف تحتاج الى التعامل مع المزود سواءا كان php او غيره.
ولكن إن كنت تفرض pattern معين لكلمة المرور , فعند إستخدامك للجافاسكريبت فقط فإنه يمكن تخطى هذا الباترن عن طريق تعطيل جافاسكريبت :)
لا بد أن يكون هناك check من الطرفين , لسببين :
1- سرعة الإستجابة من الجافاسكريبت
2- الأمان من php
عزيزنا thamood ما همني اني استخدم موارد السيرفر , همي هو في ردة الفعل , مين بيكون اقوى.
وكلامك صحيح من ناحية النقطتين الذي ذكرتهم.
انا قبل شوي حملت قالب وكنت اعدل عليه , القالب متلغم اكواد جافا سكربت , وكان مسببلي بطئ وتعليق خفيف في متصفح كروم ,
فقت اقعد امزز واشيل اكواد الجافا سكربت , لقيت فرق معاي من ناحية تحميل الصفحة وتعليق المتصفح.
ففكرتي هنا لو ابغى استغني عن هذه الاكواد الي هي جافا سكربت , سواء كانت بسيطة او معقدة , وكتبتها php , هل بيكون فيه فرق؟
ويعطيم العافية عالمساعدة
أنا لا أعلم صراحة .. لكن أعتقد الجافا سكربت هو الأفضل والأسرع خصوصاً باستخدام تقنية الأجاكس لأنه يوفر الكثير من الجهد والكتابة أكواد كبيرة على صفحة واحدة .
ما فهمت قصدي , ببسطها
عندي صفحة html, وابغى اطبع فيها كلمها (مرحباً بك) وليكن 100000 مرة عن طريق لووب.
فا مين بيكون اداءة اقوى واسرع في عملية التنفيذ ؟ , لو كتبت الكود على السيرفر ولا جافا سكربت
اذا كان غرضك هو طباعة كلمة مرحبا بك بالتأكيد الجافاسكربت افضل لانها لن تستهلك شيئ من موارد السيرفر وستنفذ فقط على جهاز المستخدم وبسرعة اكبر.
لو فرضنا ان جهاز المستخدم ضعيف ؟
وما يهمني انه ياخد موارد السيرفر , همي هو ردة الفعل الي هي response في طباعة الجملة.
انت قصدك العكس , لو ما ابغى احد يشوف الكود المفروض php .
على حسب احتياجاتك ، اذا كنت مثلا ترفع ملف وتحسب اللودنق فالافضل من جهة المستخدم ( جافا سكربت ) ، بشكل عام الجافا سكربت راح تساعد بتخفيف الحمل على السيرفر فبدلا من اي يتم معالجة الكود بكل مره من جهة السيرفر ومن ثم ينتظر المستخدم حتى ننتج الصفحه ومن ثم تظهر الصفحه ، هذا يؤدي الى رفع الحمل على السيرفر وقد يعطل طلبات اخرى على الصفحه من ناس اخريين في الوقت الذي يتم فيه معالجة الكود ، نستطيع ان نختصر كل ذلك من خلال معالجة الكود من جهاز المستخدم بواسطة الجافا سكربت ، لكن السرعه والاداء بما يخص كود الجافا سكربت يعتمد على المتسخدمين في المقام الاول بحسب نوعية مواصفات الجهاز اللي يتسخدمونه بتصفح الموقع ، بالنهايه اذا كان الكود بسيط فلا حاجه للجافا السكربت ، خصوصا اذا كانت معلومات حساسه بالموقع .
مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.