Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zmniejszyć rozmiar DOM ładując tylko pierwszą stronę tabeli ?, Jak ładować pierwszą stronę tabeli, a pozostałe po kolejnym kliknięciu
Blasius
post 27.09.2021, 19:55:53
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.09.2021

Ostrzeżenie: (0%)
-----


Posiadam stronę z prawie 2000 elementami DOM (węzłów), na której znajduje się między innymi prosta tabela napisana za pomocą jQuery z ponad 300 linkami do innych podstron (wzorowana na:)
https://jqueryui.com/tabs/#default
Oto jej układ:
  1. <div id="tabs">
  2. <ul><li><a href="#tabs-1" >Al-Ar</a></li>
  3. <li><a href="#tabs-2" >Ar-D</a></li>
  4. <li><a href="#tabs-3" >E-Ha</a></li>
  5. <li><a href="#tabs-4" >Ha-J</a></li>
  6. <li><a href="#tabs-5" >K-Mo</a></li>
  7. <li><a href="#tabs-6" >Mo-Ro</a></li>
  8. <li><a href="#tabs-7" >Ro-So</a></li>
  9. <li><a href="#tabs-8" >So-Su</a></li>
  10. <li><a href="#tabs-9" >Su-Z</a></li></ul>
  11. <table class="tablica_X">
  12. <tr class="tr1"><td></td></tr>
  13. <tr class="tr"><td>
  14. <div id="tabs-1">
  15. <table class="pol">
  16. <tr> <td class="td10" colspan="4">Al..Ar</td></tr>
  17. <tr> <td class="td1"><a href="hotel1.html">hotel 1</a></td>
  18. <td class="td2">1</td></tr>
  19. <tr> <td class="td1"><a href="hotel2.html">hotel 2</a></td>
  20. <td class="td2">2</td></tr>
  21. ...
  22. <tr> <td class="td1"><a href="hotel20.html">hotel 20</a></td>
  23. <td class="td2">20</td></tr>
  24. <table class="pol">
  25. <tr> <td class="td1"><a href="hotel21.html">hotel 21</a></td>
  26. <td class="td2">21</td></tr>
  27. ...
  28. <tr> <td class="td1"><a href="hotel30.html">hotel 30</a></td>
  29. <td class="td2">30</td></tr>
  30. </div>
  31. <div id="tabs-2">
  32. <table class="pol">
  33. <tr> <td class="td10" colspan="4">Ar...D</td></tr>
  34. <tr> <td class="td1"><a href="hotel31.html">hotel 31</a></td>
  35. <td class="td2">31</td></tr>
  36. ...
  37. <tr> <td class="td1"><a href="hotel51.html">hotel 51</a></td>
  38. <td class="td2">51</td></tr>
  39. <table class="pol">
  40. <tr> <td class="td1"><a href="hotel52.html">hotel 52</a></td>
  41. <td class="td2">52</td></tr>
  42. ...
  43. <tr> <td class="td1"><a href="hotel105.html">hotel 105</a></td>
  44. <td class="td2">105</td></tr>
  45. <div id="tabs-9">
  46. <table class="pol">
  47. <tr> <td class="td10" colspan="4">Su-Z</td></tr>
  48. <tr> <td class="td1"><a href="hotel231.html">hotel 231</a></td>
  49. <td class="td2">231</td></tr>
  50. ...
  51. <tr> <td class="td1"><a href="hotel301.html">hotel 301</a></td>
  52. <td class="td2">301</td></tr>
  53. </div>
  54. ...
  55. <table class="pol">
  56. <tr> <td class="td1"><a href="hotel302.html">hotel 302</a></td>
  57. <td class="td2">302</td></tr>
  58. ...
  59. <tr> <td class="td1"><a href="hotel355.html">hotel 355</a></td>
  60. <td class="td2">355</td></tr>
  61. </div>
  62. </tr>
  63. <tr class="tr1"><td></td>
  64. </tr>
  65. </div>
  66. </tr>
  67. <tr class="tr1"><td></td>
  68. </tr>
  69. </div>

Do tego skrypty:
[JAVASCRIPT] pobierz, plaintext
  1. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  2. <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
  3. <script>
  4. $( function() {
  5. $( "#tabs" ).tabs();
  6. } );
  7. </script>
[JAVASCRIPT] pobierz, plaintext

plus skrypt do otwierania poszczególnych stron z hotelami:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. <!--
  3. onload=function(){
  4. for(i=0;d=document.getElementsByTagName('a')[i++];){
  5. if (d.href.match(/.*hotel\d+\.html/)){
  6. d.onclick=function(){window.open(this.href,'a','width=740px, height=750px, resizable=yes, scrollbars=yes, left=20px, top=20px');return false}
  7. }
  8. }
  9. }
  10. //-->
  11. </script>
[JAVASCRIPT] pobierz, plaintext

Wszystko ładnie działa, ale podczas sprawdzania, np. w PageSpeed Insights pojawia się ostrzeżenie - "Unikaj zbyt dużego DOM - 1795 elementów".
Ponieważ na stronie startowej wyświetla się tylko tablica "#tabs-1", a pozostałe i tak trzeba później kliknąć żeby je zobaczyć, to tablice od "#tabs-2" do "#tabs-9" nie muszą się ładować od razu. I tu prośba o pomoc.
W jaki najprostszy sposób można zoptymalizować rozmiar DOM? Jak zmusić resztę kodu od #tabs-2" do nie ładowania się przy starcie?
I czy JavaScript rzeczywiście opłacalnie przyspieszy ładowanie i działanie strony? Czy sensowniej jest zostawić kod taki jak jest bez JS?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Blasius
post 14.10.2021, 21:33:26
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.09.2021

Ostrzeżenie: (0%)
-----


A przeczytałeś, że KOMPLETNIE NIE ZNAM JAVASCRIPT?
Właśnie dlatego wklejałem na czuja ten kod. I udało się, bo na szczęście znalazłem w necie poniższy (ten drugi) skrypt:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onclick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('hotel')) {
  4. }
  5.  
  6. event.preventDefault();
  7. const url = event.target.href;
  8. console.log('Fetching results at ' + url);
  9.  
  10. }
  11. const pagination = document.querySelector('html');
  12. pagination.addEventListener('click', onclick);
  13.  
  14. </script>
  15. <script>
  16. var myHTML = document.querySelector('html');
  17. myHTML.onclick = onload=function(){
  18. for(i=0;d=document.getElementsByTagName('a')[i++];){
  19. if (d.href.match(/.*hotel\d+\.html/)){
  20. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  21. }
  22. }
  23. }
  24. </script>
[JAVASCRIPT] pobierz, plaintext

Ten działa jak chciałem.
Twój też, aczkolwiek nie działa otwieranie nowych okien o określonych wymiarach.
Wiem, że Twój jest elegancki i krótszy., a jeśli chce się Tobie poprawić, to byłoby fajnie.
Oczywiście dziękuję za pomoc! thumbsupsmileyanim.gif
Go to the top of the page
+Quote Post

Posty w temacie
- Blasius   Jak zmniejszyć rozmiar DOM ładując tylko pierwszą stronę tabeli ?   27.09.2021, 19:55:53
- - viking   A po co tam tabele?   28.09.2021, 06:02:57
- - Blasius   A dlaczego nie? Po prostu taka tabelka ładnie wygl...   28.09.2021, 20:11:53
- - trueblue   Odpowiedzi są w manualu, do którego zresztą podałe...   28.09.2021, 20:40:55
- - Blasius   Tak, wiem, ale żeby załadować kolejne tablice musi...   28.09.2021, 21:42:49
- - Pyton_000   Przecież pod spodem jest " view source" ...   29.09.2021, 20:32:37
- - Blasius   Dzięki za "otworzenie oczu". Pokombinowa...   1.10.2021, 19:01:55
- - trueblue   https://www.audero.it/blog/2018/05/16/event...-in-...   1.10.2021, 19:09:30
- - Blasius   Dodałem ten skrypt: [JAVASCRIPT] pobierz, plaintex...   1.10.2021, 22:01:11
- - trueblue   #tabs To ma być selektor CSS określający, który n...   2.10.2021, 07:00:04
- - Blasius   Może zadaję banalne pytania, ale kompletnie nie zn...   2.10.2021, 18:57:12
- - trueblue   A jak komórkom w tabeli nadałeś klasę td1?   3.10.2021, 08:24:59
- - Blasius   Normalnie, w css... [CSS] pobierz, plaintext .td1...   3.10.2021, 19:18:49
- - trueblue   A nie wydaje Ci się, że klasy nadałeś w HTML?   3.10.2021, 21:26:34
- - Blasius   Nie. Są w pliku*.css Nie bardzo rozumiem pytanie....   3.10.2021, 21:56:42
- - trueblue   Jeśli uważasz, że nadałeś klasy dla tych elementów...   4.10.2021, 07:33:25
- - Blasius   Zrobiłem tak: [JAVASCRIPT] pobierz, plaintext ...   4.10.2021, 19:51:23
|- - trueblue   Cytat(Blasius @ 4.10.2021, 20:51:23 )...   5.10.2021, 06:59:14
- - Blasius   Zrobiłem tak: zmieniłem tabelę [HTML] pobierz, pla...   5.10.2021, 20:09:20
- - trueblue   Klasę powinieneś nadać elementowi <a>, przec...   6.10.2021, 10:00:15
- - Blasius   Zmieniłem [JAVASCRIPT] pobierz, plaintext if ...   6.10.2021, 21:59:49
- - viking   Classlist to taki worek na klasy (lista klas na el...   7.10.2021, 05:24:07
- - Blasius   W końcu pojąłem... Ale nie spotkałem się nigdzie ...   7.10.2021, 19:55:56
- - trueblue   Przecież kod do otwierania okna jest we wcześniejs...   7.10.2021, 20:44:06
- - Blasius   Ten? [JAVASCRIPT] pobierz, plaintext <script...   7.10.2021, 20:48:43
- - trueblue   Nie chodzi o to, abyś ten kod jako całość wkleił z...   8.10.2021, 09:19:01
- - Blasius   Poddaję się. Wierz mi, że próbowałem. kilkadziesią...   11.10.2021, 20:23:44
- - trueblue   Podałem Ci wskazówkę w poprzednim poście.   12.10.2021, 10:34:57
- - Blasius   Wymęczyłem (czytaj - znalazłem i trochę zmieniłem)...   12.10.2021, 19:06:20
- - trueblue   Nie wiem dlaczego uparcie wklejasz stary kod, skor...   13.10.2021, 08:07:53
- - Blasius   A przeczytałeś, że KOMPLETNIE NIE ZNAM JAVASCRIPT?...   14.10.2021, 21:33:26


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 07:03