يوجد العديد من الإختلافات بين PHP و JavaScript، ولا يمكن معرفة أفضل طريقة لتنفيذ الكود بدون معرفة الغرض المطلوب من الكود تحديدًا. هنا نفس الكود السابق ولكن في لغة JavaScript:
async function main() {
const filesArray = [
'http://domain1.com//ok.php',
'http://domain3.com//ok.php',
'http://domain2.com//ok.php'
];
for (const file of filesArray) {
const res = await fetch(file)
const content = await res.text();
if (content.includes('class="vid-myworld"')) {
console.log(content);
break;
}
}
}
ملاحظة: الكود السابق قد قد لا ينتج أي شيء أو قد يظهر خطأ ما مثل "This request has been blocked" حسب البيئة التي يتم تشغيل الكود فيها وحسب إعدادات المشروع والحزم المثبتة (في حالة إستعمال Node.js أو Deno.js)
بعض الاقتراحات حول هذا المشكل بالذات:
استخدم .glb وليس .gltf. سيكون الشكل الثنائي لـ glTF أصغر بنسبة 25-30٪ من ملف .gltf مع بيانات ثنائية مضمنة ، ولا يلزم فك تشفيره من Data URI. يعد استخدام .gltf مع ملف .bin ثنائي منفصل أيضًا أحد الخيارات. استخدم glTF-Pipeline لإجراء هذه التغييرات.
قم بتحميل وحدة فك ترميز Draco مسبقًا عن طريق استدعاء dracoLoader.preload () قبل أن يبدأ تحميل النموذج الخاص بك. ، سيوفر ذلك 500 مللي ثانية تم إنفاقها في جلب وحدة فك التشفير بعد تنزيل النموذج بالفعل.
ضع في اعتبارك استخدام https://github.com/zeux/meshoptimizer#installing-gltfpack لتبسيط النموذج ، أو على الأقل لتكميمه ، ثم gzip. يعد هذا بديلاً لـ Draco ، وقد لا يضغط الملف أيضًا ، ولكن يمكن أن يقلل في بعض الأحيان وقت التحميل الكلي على الرغم من ذلك.
1. نظرة عامة
من سؤالك أظن أنه يجب فهم المصفوفات في الجافا وأهمية كل نوع منها ، بالإضافة إلى فهم المقارنة بينهم .
أولاً ، سنرى نموذجًا للتنفيذ باستخدام ArrayList. بعد ذلك ، سننتقل إلى واجهة القائمة ونقارن الاختلافات.
2. باستخدام ArrayList
ArrayList هو أحد تطبيقات القائمة الأكثر استخدامًا في Java. إنه مبني على قمة مصفوفة ، والتي يمكن أن تنمو وتتقلص ديناميكيًا عندما نضيف / نزيل العناصر. من الجيد تهيئة قائمة بسعة أولية عندما نعلم أنها ستكبر:
ArrayList<String> list = new ArrayList<>(25);
باستخدام ArrayList كنوع مرجعي ، يمكننا استخدام طرق في ArrayList API غير موجودة في List API - على سبيل المثال ، insuranceCapacity أو trimToSize أو removeRange.
2.2. مشكلة البيانات المتغيرة الحجم
لنفترض أنه مع تطور التطبيق ، يصبح من الواضح أن عدد الركاب يختلف كثيرًا. على سبيل المثال ، إذا كان هناك خمسة مسافرين محجوزين فقط ، بسعة أولية 20 ، فإن الفاقد في الذاكرة هو 75٪. لنفترض أننا قررنا التبديل إلى قائمة أكثر كفاءة في استخدام الذاكرة.
2.3 تغيير النوع
توفر Java تطبيق قائمة آخر يسمى LinkedList لتخزين البيانات متغيرة الحجم. يستخدم LinkedList مجموعة من العقد المرتبطة لتخزين العناصر واستردادها. ماذا لو قررنا تغيير التطبيق الأساسي من ArrayList إلى LinkedList:
private LinkedList<Passenger> passengers = new LinkedList<>();
يؤثر هذا التغيير على أجزاء أكثر من التطبيق لأن جميع الوظائف في التطبيق التجريبي تتوقع العمل مع نوع ArrayList.
3. التبديل إلى القائمة List
private List<Passenger> passengers = new ArrayList<>(20);
هنا ، نحن نستخدم واجهة القائمة كنوع مرجعي بدلاً من نوع ArrayList الأكثر تحديدًا. يمكننا تطبيق نفس المبدأ على جميع استدعاءات الوظائف وأنواع الإرجاع. فمثلا:
public List<Passenger> getPassengersBySource(String source) {
return passengers.stream()
.filter(it -> it.getSource().equals(source))
.collect(Collectors.toList());
}
كلا الفئتين ArrayList و LinkedList عبارة عن تطبيقات لواجهة List. لذلك ، يمكننا الآن تغيير تطبيق القاعدة بأمان دون إحداث أي اضطرابات في أجزاء أخرى من التطبيق. لا يزال الفصل يجمع ويعمل بشكل جيد كما كان من قبل.
خلاصة
لا يمكننا تحديد افضل نوع مصفوفة فهذا يندرج حسب استخدامك لها
https://ziadmoham.github.io/shetosgym/ ده موقع الي لسه عمله امبارح عايز اعرف رايكم وايه الغلطات
2 ازاي بسلم المشروع للباك اند يعني مش ازاي بديله الملفات يعني ايه التفاصيل الي مفروض تكون في الموقع
3 لو حضرتك فتحت الموق حتلاقي قسم المقالات هل انا كل مقال لازم اعملو صفحة وكده ولا الباك اند الي بيعمل
بالنسبة للموقع ، مصمم بشكل جيد ويحترم معايير تصميم واجهات المستخدم ، لكن هناك بعض الأمور الطفيفة مثل صور البانر التي تحت قسم المقالات في الصفحة الرئيسية يجب ان تكون متناسقة مع حجم القسم
كيفية تسليم المشروع لمطور الخلفية : هناك خياران
الخيار الأول تسليم الكود المصدري للمطور
الخيار الثاني التعامل ب restful apis وهذا لا يستلزم منك تسليم الكود لمطور الخلفية
بالنسبة لقسم المقالات ، سيكون ديناميكي بحيث يتم انشاء المقال من لوحة التحكم ويُضاف تلقائيا في الموقع
بخصوص التصميم و الواجهة فليس لدي خبرة كبيرة لكن هناك بعض النقاط لفتت إنتباهي، يجب عليك وضع عنوان مناسب للصفحة، الجزء الذي يأتي بعد الترويسة الصورة فيه تأخذ حجم كبير جداً من الأفضل تقليل الحجم الذي تأخذه على الصفحة إرتفاع القسم كبير جداً، محتاج تعمل تمرير للشريط حتى تتصفح ذلك القسم، قسم المقالات جيد ممكن تضيف زر أو رابط للذهاب إلى قسم المقالات، قسم الشريط المتحرك محتاج شغل أفضل، ممكن تكبير لأزرار التنقل و تعطيها نفس اللون الرئيسي، أيضاً محتاج تبرز عنوان للقسم، قسم الأسعار جيد لكن هناك بعض اللخبطة في السعر، يُمكن أن تقوم بتطويره بشكل أكبر بحيث تُبرز الخُطة الأفضل للإشتراك الأمر يعود لك.
جزء الفوتر به مساحات فارغة بشكل كبير، يُمكنك تقليل الهوامش و الحشوات، أيضاً تحتاج لتفعيل الأزرار و الروابط، يُمكن أيضاً تغيير لون العناوين الرئيسية و تكبيرها قليلاً و لون الأيقونات للون الرئيسي في ذلك القسم.
يُمكن إضافة جزء مثلاً ماذا قالو عنا و تضع ردود العملاء
بخصوص الأشياء الديناميكية في الموقع فأنت كمُبرمج واجهات محتاج تعمل صفحات كنموذج مثلاً صفحة المقال و كل روابط المقالات تقود لتلك الصفحة، الصفحة تكون عبارة عن قالب و المحتوى يكون محتوى تجريبي لكن التصميم أنت من يقوم به، مبرمج الواجهات الخلفية مهمته جلب البيانات المتغيرة و عرضها، لكن التصميم أنت من يقوم به، الصفحة ستكون صفحة واحدة، نفس الأمر بخصوص صفحة المقالات إن كانت موجودة و هي صفحة تُعرض بها كل المقالات، تضع عُنصر مقال واحد و تُكرره أكثر من مرة و تضع في الأسفل pagination (أزرار الترقيم) أو زر لتحميل المزيد، نفس الأمر بخصوص صفحة إتصل بنا و صفحة معلومات عنا.