خلينا نتكلم شوية عن السر اللي بيخلي المواقع المفضلة عندك سريعة ومستجيبة بالشكل ده. السر في الموضوع ده بيرجع لطريقة التعامل مع الـ DOM.
الـ (Document Object Model) بيمثل الصفحة بتاعتك على هيئة structured tree.
زمان كنا بنستخدم طرق في الـ JavaScript زي getElementById أو removeChild عشان نعمل تعديلات على الصفحة. لكن مع تعقيد المواقع الويب وتوسعها، الطرق دي ممكن تخلي الأداء بطيء. هنا بتيجي قوة React بالـ Virtual DOM اللي غيرت قواعد اللعبة تمامًا.
المشكلة في التعامل مع الـ DOM بالطريقة التقليدية
تخيل الـ DOM كشجرة ضخمة مليانة فروع. كل مرة تحب تعدل حاجة بسيطة، زي إنك تحدث أول عنصر في قائمة من عشر عناصر، بتضطر "تهز" الشجرة كلها. ده ممكن يبطأ الأداء، وخصوصًا لما الصفحات تبقى معقدة أكتر. كل ما زاد عدد الفروع (العناصر)، كل ما بقى الموضوع أصعب.
الحل مع React
React قدمت حل رائع للمشكلة دي عن طريق الـ Virtual DOM، وده نسخة خفيفة من الـ HTML DOM.
(a lightweight in-memory representation of the real DOM)
عشان بناءا عليها هنعمل reflect لل updated state
التعديلات بتتحط الأول في الـ Virtual DOM وبعدها React بتعمل تحديث للـ DOM الحقيقي بشكل فعال وسريع.
العملية دي اسمها Reconciliation، وبتخلي التحديثات تحصل بس في الأجزاء اللي محتاجة تحديث فعلي، وده بيحسن الأداء بشكل كبير.
إزاي الـ Virtual DOM بيشتغل
لما بتعمل Render لعناصر JSX في React،
الـ Virtual DOM بيتحدث محتاجين هنا نقف ونسأل سؤال مهم أوي بيتحدث كليا ولا ؟
React only updates the parts of the Virtual DOM that have changed. This is known as "incremental rendering" or "partial rendering".
، ده أسرع بكتير من التعامل المباشر مع الـ DOM الحقيقي. ده بيحصل لإن React بتعمل نسخة من الـ Virtual DOM قبل ما تعمل أي تحديثات، وبتقارن النسخة دي مع التحديثات باستخدام عملية اسمها Diffing أو ( Reconciliation) العملية دي بتحدد العناصر اللي حصل فيها تغيير فعلاً، وReact بتحدث بس العناصر دي في الـ DOM الحقيقي.
Under the Hood React’s Diffing Algorithm
الـ Diffing في React هي السر ورا التحديثات الفعالة للـ DOM. الAlgorithm دي بتقارن بين نسختين من الـ Virtual DOM وبتطبق أقل مجموعة من التغييرات اللي محتاجها عشان تزامنهم.
مثلاً، لو أنواع العناصر الأساسية (root elements) في الشجرتين مختلفة، React هتبني الشجرة كلها من جديد. يعني لو غيرت
<div>
<Tree/>
</div>
ل
<span>
<Tree/>
</span>
بما إن العناصر الأساسية (div وspan) مختلفة، React هتعيد بناء الtree كلها.
طب لو الحالة زي دي
<span id="span1" />
<span id="span2" />
في الحالة دي، React هتحدث بس الـ id من غير ما تلمس باقي العنصر.
React كمان بتحسن التحديثات على مستوى الChild Elements
<ul>
<li>Child1</li>
<li>Child2</li>
</ul>
<ul>
<li>Child1</li>
<li>Child2</li>
<li>Child3</li>
</ul>
React هتشوف Child3 كعنصر جديد وهتحدث القائمة بناءً عليه. لكن لو أضفت عنصر جديد في البداية، React ممكن تعيد بناء القائمة كلها. وهنا بييجي دور الـ Keys.
الـ Keys بتساعد React إنها تتبع العناصر اللي حصل فيها تغيير، اللي اتضافت، أو اللي اتشالت. لازم تكون الـ Keys مميزة بين العناصر الsiblings يعني ميتككرش وثابتة بين الـ renders.
واتكلمت عنها قبل كده بالتفصيل !
Manipulating the DOM with Refs
رغم إن React بتعمل تحسينات على تحديثات الـ DOM باستخدام الـ Virtual DOM، في سيناريوهات معينة ممكن تحتاج فيها تتعامل مباشرة مع عناصر الـ DOM، زي إنك تركز على input معين، تعمل scroll لعناصر معينة، أو تقيس أبعاد عنصر. هنا بيجي دور الـ useRef Hook. من خلال إنشاء ref وربطه بعنصر DOM عن طريق ال ref، تقدر تحصل على الوصول المباشر للـ DOM node.
الـ useRef Hook بيرجع object فيه خاصية current، اللي بتبقى في الأول null لكن بتتخصص لـ DOM node بعد ما يتعمل Render. ده بيسمح لك تستدعي دوال الـ DOM مباشرة على العنصر، وده بيزود التحكم في التفاعلات المحددة.
خلينا نعمل مثال ممتع عشان نشوف الكلام ده في التطبيق. هنعمل div بيغير لونه لما تضغط على زرار. بص ع الصورة
فهم خوارزمية الـ Diffing والـ Keys في React هيساعدك تعمل تطبيقات React أنعم وأسرع لو فهمته صح
ولما تحتاج تحكم دقيق، React بتوفرلك refs اللي تساعدك تتفاعل مباشرة مع الـ DOM.
الـ (Document Object Model) بيمثل الصفحة بتاعتك على هيئة structured tree.
زمان كنا بنستخدم طرق في الـ JavaScript زي getElementById أو removeChild عشان نعمل تعديلات على الصفحة. لكن مع تعقيد المواقع الويب وتوسعها، الطرق دي ممكن تخلي الأداء بطيء. هنا بتيجي قوة React بالـ Virtual DOM اللي غيرت قواعد اللعبة تمامًا.
المشكلة في التعامل مع الـ DOM بالطريقة التقليدية
تخيل الـ DOM كشجرة ضخمة مليانة فروع. كل مرة تحب تعدل حاجة بسيطة، زي إنك تحدث أول عنصر في قائمة من عشر عناصر، بتضطر "تهز" الشجرة كلها. ده ممكن يبطأ الأداء، وخصوصًا لما الصفحات تبقى معقدة أكتر. كل ما زاد عدد الفروع (العناصر)، كل ما بقى الموضوع أصعب.
الحل مع React
React قدمت حل رائع للمشكلة دي عن طريق الـ Virtual DOM، وده نسخة خفيفة من الـ HTML DOM.
(a lightweight in-memory representation of the real DOM)
عشان بناءا عليها هنعمل reflect لل updated state
التعديلات بتتحط الأول في الـ Virtual DOM وبعدها React بتعمل تحديث للـ DOM الحقيقي بشكل فعال وسريع.
العملية دي اسمها Reconciliation، وبتخلي التحديثات تحصل بس في الأجزاء اللي محتاجة تحديث فعلي، وده بيحسن الأداء بشكل كبير.
إزاي الـ Virtual DOM بيشتغل
لما بتعمل Render لعناصر JSX في React،
الـ Virtual DOM بيتحدث محتاجين هنا نقف ونسأل سؤال مهم أوي بيتحدث كليا ولا ؟
React only updates the parts of the Virtual DOM that have changed. This is known as "incremental rendering" or "partial rendering".
، ده أسرع بكتير من التعامل المباشر مع الـ DOM الحقيقي. ده بيحصل لإن React بتعمل نسخة من الـ Virtual DOM قبل ما تعمل أي تحديثات، وبتقارن النسخة دي مع التحديثات باستخدام عملية اسمها Diffing أو ( Reconciliation) العملية دي بتحدد العناصر اللي حصل فيها تغيير فعلاً، وReact بتحدث بس العناصر دي في الـ DOM الحقيقي.
Under the Hood React’s Diffing Algorithm
الـ Diffing في React هي السر ورا التحديثات الفعالة للـ DOM. الAlgorithm دي بتقارن بين نسختين من الـ Virtual DOM وبتطبق أقل مجموعة من التغييرات اللي محتاجها عشان تزامنهم.
مثلاً، لو أنواع العناصر الأساسية (root elements) في الشجرتين مختلفة، React هتبني الشجرة كلها من جديد. يعني لو غيرت
<div>
<Tree/>
</div>
ل
<span>
<Tree/>
</span>
بما إن العناصر الأساسية (div وspan) مختلفة، React هتعيد بناء الtree كلها.
طب لو الحالة زي دي
<span id="span1" />
<span id="span2" />
في الحالة دي، React هتحدث بس الـ id من غير ما تلمس باقي العنصر.
React كمان بتحسن التحديثات على مستوى الChild Elements
<ul>
<li>Child1</li>
<li>Child2</li>
</ul>
<ul>
<li>Child1</li>
<li>Child2</li>
<li>Child3</li>
</ul>
React هتشوف Child3 كعنصر جديد وهتحدث القائمة بناءً عليه. لكن لو أضفت عنصر جديد في البداية، React ممكن تعيد بناء القائمة كلها. وهنا بييجي دور الـ Keys.
الـ Keys بتساعد React إنها تتبع العناصر اللي حصل فيها تغيير، اللي اتضافت، أو اللي اتشالت. لازم تكون الـ Keys مميزة بين العناصر الsiblings يعني ميتككرش وثابتة بين الـ renders.
واتكلمت عنها قبل كده بالتفصيل !
Manipulating the DOM with Refs
رغم إن React بتعمل تحسينات على تحديثات الـ DOM باستخدام الـ Virtual DOM، في سيناريوهات معينة ممكن تحتاج فيها تتعامل مباشرة مع عناصر الـ DOM، زي إنك تركز على input معين، تعمل scroll لعناصر معينة، أو تقيس أبعاد عنصر. هنا بيجي دور الـ useRef Hook. من خلال إنشاء ref وربطه بعنصر DOM عن طريق ال ref، تقدر تحصل على الوصول المباشر للـ DOM node.
الـ useRef Hook بيرجع object فيه خاصية current، اللي بتبقى في الأول null لكن بتتخصص لـ DOM node بعد ما يتعمل Render. ده بيسمح لك تستدعي دوال الـ DOM مباشرة على العنصر، وده بيزود التحكم في التفاعلات المحددة.
خلينا نعمل مثال ممتع عشان نشوف الكلام ده في التطبيق. هنعمل div بيغير لونه لما تضغط على زرار. بص ع الصورة
فهم خوارزمية الـ Diffing والـ Keys في React هيساعدك تعمل تطبيقات React أنعم وأسرع لو فهمته صح
ولما تحتاج تحكم دقيق، React بتوفرلك refs اللي تساعدك تتفاعل مباشرة مع الـ DOM.
❤3👍1
https://www.linkedin.com/posts/activity-7233237827298222081-9IHZ?utm_source=share&utm_medium=member_android
طريقة جديدة لل error handling هتخليك تستغني عن ال try catch
طريقة جديدة لل error handling هتخليك تستغني عن ال try catch
Linkedin
Sign Up | LinkedIn
500 million+ members | Manage your professional identity. Build and engage with your professional network. Access knowledge, insights and opportunities.
👍1
ال useTransition hook
https://www.linkedin.com/posts/activity-7233845287763476481-bXwG?utm_source=share&utm_medium=member_android
https://www.linkedin.com/posts/activity-7233845287763476481-bXwG?utm_source=share&utm_medium=member_android
Linkedin
Sign Up | LinkedIn
500 million+ members | Manage your professional identity. Build and engage with your professional network. Access knowledge, insights and opportunities.
❤1
how to create an interesting progressive blur effect using WebGL, OGL, and GLSL shaders
https://tympanus.net/codrops/2024/07/02/progressive-blur-effect-using-webgl-with-ogl-and-glsl-shaders
https://tympanus.net/codrops/2024/07/02/progressive-blur-effect-using-webgl-with-ogl-and-glsl-shaders
❤1
https://www.linkedin.com/posts/activity-7234244406508175361-1FIf?utm_source=share&utm_medium=member_android
إزاي تعمل optimization لل javascript
إزاي تعمل optimization لل javascript
Linkedin
Sign Up | LinkedIn
500 million+ members | Manage your professional identity. Build and engage with your professional network. Access knowledge, insights and opportunities.
❤1
image_2024-08-28_22-25-05.png
82.6 KB
https://www.linkedin.com/posts/activity-7234641590323957762-gNMO?utm_source=share&utm_medium=member_desktop
خش إقرأ المقالة كاملة ومتنساش تدعيلي
خش إقرأ المقالة كاملة ومتنساش تدعيلي
❤1
https://openui.fly.dev/ai/new
خد الهدية دي مني وإدعيلي إديله أي صورة وهيعملك generate للكود بتاعها ب tailwind
خد الهدية دي مني وإدعيلي إديله أي صورة وهيعملك generate للكود بتاعها ب tailwind
❤3
Custom Cursors for Your Site
https://blog.codepen.io/2024/08/18/exploring-21-unique-custom-cursors-for-your-site/
https://blog.codepen.io/2024/08/18/exploring-21-unique-custom-cursors-for-your-site/
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Scroll-based SVG Filter Animations on Text
https://tympanus.net/codrops/2024/08/22/scroll-based-svg-filter-animations-on-text/
https://tympanus.net/codrops/2024/08/22/scroll-based-svg-filter-animations-on-text/
👍1
https://github.com/trekhleb/javascript-algorithms
عاوز تذاكر Algorithms and data structures in JavaScript خد العظمة دي
عاوز تذاكر Algorithms and data structures in JavaScript خد العظمة دي
GitHub
GitHub - trekhleb/javascript-algorithms: 📝 Algorithms and data structures implemented in JavaScript with explanations and links…
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings - trekhleb/javascript-algorithms
👍1
عاوز تجرب أي package من غير م تعملها setting up في ال local environment
https://npm.runkit.com/
https://npm.runkit.com/
Runkit
RunKit notebooks are interactive javascript playgrounds connected to a complete node environment right in your browser. Every npm module pre-installed.
👍1
دا مقال بيعلمك إزاي تستخدم ال Generators عشان تعمل Visualization للAlgorithms وهي شغالة وتفهمها
وسايبلك مثال بالكود
https://www.covicale.com/blog/using-javascript-generators-to-visualize-algorithms
وسايبلك مثال بالكود
https://www.covicale.com/blog/using-javascript-generators-to-visualize-algorithms
Alexander G. Covic
Using JavaScript Generators to Visualize Algorithms
Learn how to use JavaScript generators to visualize algorithms step by step in a simple and efficient way.
👍1
اللينك دا مجمع كل ال Frontend Resources اللي ممكن تحتاجها
https://dev.to/miguelrodriguezp99/frontend-resources-v2-57mj
https://dev.to/miguelrodriguezp99/frontend-resources-v2-57mj
DEV Community
Frontend Resources V2! 🚀
🚀 Supercharge Your Development with These Resources! 🚀 👋 Hey everyone! 👋 After the great response...
👍1
Material UI v6 is out now !
بما إنها أكتر React component library أنا بستخدمها حرفيا ف عاوزك تبص بصة هنا ع التعديلات اللي ضافتها :"D
https://mui.com/blog/material-ui-v6-is-out/
بما إنها أكتر React component library أنا بستخدمها حرفيا ف عاوزك تبص بصة هنا ع التعديلات اللي ضافتها :"D
https://mui.com/blog/material-ui-v6-is-out/
Mui
Material UI v6 is out now 🎉 - MUI
Material UI v6 is now stable. It comes with new features, improvements, and an experimental integration for static CSS extraction.
👍1