Terdapat banyak enjin permainan di dunia: Unreal Engine, Unity Engine, Godot Engine, Cry Engine dan banyak lagi.
Apakah persamaan enjin permainan ini? Kebolehubahsuaian. Permainan yang berbeza mempunyai keperluan yang berbeza dan memerlukan ciri khusus untuk mencapai matlamat mereka. Sukar untuk menyediakan setiap ciri yang mungkin dalam satu program, itulah sebabnya banyak enjin membenarkan pembangun mengubah suai kod sumber dan membina ciri tersuai mereka sendiri. Penyesuaian adalah bahagian penting dalam enjin ini.
Sekarang, mari beralih semula kepada pembangunan bahagian hadapan. React ialah salah satu rangka kerja paling popular di ruang ini. Tetapi, sama seperti mengubah suai enjin adalah perkara biasa dalam pembangunan permainan, adakah ia sama biasa untuk mengubah suai kod sumber dalaman React dalam pembangunan bahagian hadapan? Soalan ringkas ini mendedahkan banyak perkara tentang perkara yang sebenarnya kami kejar dan menyerlahkan perbezaan arah antara pembangunan bahagian hadapan moden dan bidang lain.
React ialah rangka kerja yang hampir mustahil untuk diubah suai. Anda digalakkan untuk menggunakan React sebagaimana adanya, dan ia tidak bertujuan untuk pembangun menyesuaikan seni bina dalaman atau saluran paip pemaparan. Oleh itu, menggunakan React bermakna anda mesti menyelesaikan semua keperluan anda dalam lingkungan struktur React. Tetapi dunia ini penuh dengan pelbagai keperluan, dan tidak semuanya boleh diselesaikan dalam rangka kerja React.
"Tiada perkara seperti makan tengah hari percuma."
"Tiada alat yang boleh melakukan segala-galanya."
React hanyalah satu alat pembangunan dan ia mempunyai hadnya.
Sebab utama pembangun menggunakan React ialah produktiviti. React telah dibuat dengan soalan, "Bagaimanakah kita boleh membangunkan komponen DOM dengan lebih cekap dalam pembangunan web?" Di tengah-tengah pendekatan React ialah DOM. Sama seperti bagaimana ciri automatik secara amnya bermaksud kekurangan penyesuaian, "produktiviti" yang mereka perkatakan selalunya bermaksud "anda tidak boleh mengubah suai gelung pemaparan yang digabungkan dengan penyemak imbas melalui DOM maya."
Isu utama pertama dengan React ialah DOM. Tidak semuanya berkisar pada DOM, dan bukan setiap program beroperasi di sekelilingnya semata-mata. Namun, React meletakkan DOM sebagai teras falsafahnya. Sintaks JSX, di mana setiap komponen mengembalikan sesuatu "Suka Elemen HTML," jelas menggambarkan pemikiran ini.
Isu kedua ialah DOM maya. Begini cara DOM maya berfungsi:
- DOM sememangnya perlahan.
- Untuk mengurangkan perkara ini, React memperkenalkan logik dalaman yang lebih pantas.
- Logik ini mencipta objek yang menyalin bentuk pokok DOM sebenar, yang dikenali sebagai DOM maya. Setiap kali pemaparan berlaku, React mencari perubahan menggunakan DOM maya ini dan hanya mengemas kini bahagian tersebut.
- Untuk melaksanakan sistem ini, kemas kini DOM mesti sentiasa melalui elemen DOM akar.
- Maya DOM berfungsi dengan lancar dengan operasi dalaman React.
Persoalannya, mengapa HPSE akan menggunakan sistem sedemikian pada mulanya? Selain kebimbangan bahawa pendekatan pemaparan ini tidak dapat menangani pelbagai keperluan HPSE, kebimbangan yang lebih besar ialah kekurangan utiliti sebenar dalam konteks ini.
Dalam HPSE, komponen DOM boleh diurus di peringkat kelas. Apabila tika dibuat, rujukan DOM div peringkat atasnya disimpan sebagai pembolehubah ahli. Kaedah peribadi contoh boleh sama ada secara langsung memanipulasi rujukan DOM atau menggunakan querySelector() untuk mengaksesnya. Dalam kebanyakan kes, ini akan menjadi lebih pantas daripada membandingkan keseluruhan pepohon DOM.
Menggunakan DOM maya hanyalah satu cara untuk mengenal pasti perubahan, tetapi jika anda sudah mempunyai perubahan yang disimpan secara dalaman dalam contoh anda, mencarinya sekali lagi adalah berlebihan. Setelah elemen DOM dikemas kini, penyemak imbas masih akan mencetuskan ReFlow dan RePaint, jadi tiada perbezaan dalam prestasi selepas itu.
Isu utama terletak pada "operasi dalaman" React. Apakah sebenarnya operasi dalaman ini? Terdapat kekurangan dokumentasi atau maklumat terperinci, dan kebanyakan pembangun bahagian hadapan juga tidak memahaminya sepenuhnya. Pelanggan penyemak imbas sudah beroperasi dalam lapisan abstraksi penyemak imbas itu sendiri, menjadikannya terdedah kepada pelbagai cabaran. Proses dalaman React yang legap dan tidak boleh diubah suai hanya memburukkan lagi kelemahan ini.
Perubahan kepada komponen dalam React mesti melalui DOM maya dan DOM maya diuruskan oleh seni bina Fiber, yang mengikut peraturan keutamaan tertentu. Walau bagaimanapun, terdapat sedikit dokumentasi tentang cara menyesuaikan fungsi dalaman React untuk memenuhi prestasi masa nyata atau tuntutan masa ketepatan HPSE. Rasanya seperti membangunkan permainan AAA dengan enjin yang tidak boleh disesuaikan.
"Kenapa perlu bersusah payah?"
Ini soalan yang terus ditimbulkan.
React digandingkan dengan sangat rapat secara dalaman sehinggakan walaupun anda ingin mengubah suainya, anda tidak boleh. Ia tidak pernah direka dengan tujuan itu. Selain itu, gandingan kukuh pemaparan dan kemas kini keadaan menjadikan React tidak sesuai untuk projek HPSE, di mana komponen bukan visual seperti data atau elemen 3D mesti diurus bersama elemen DOM.
Dalam HPSE, masa panggilan acara dan nyahlekap memori mungkin tidak terikat pada komponen individu, tetapi React menguatkuasakan struktur berasaskan komponen ini, menjadikannya sukar untuk mengendalikan keperluan tersebut. Reka bentuk React, di mana perubahan keadaan dalam komponen boleh menjejaskan keseluruhan pepohon pemaparan, juga bercanggah dengan keperluan HPSE untuk meminimumkan atau mengawal kesan tersebut.
Pustaka seperti React Three Fiber (R3F) membolehkan anda membuat tika seperti Mesh atau Scene menggunakan sintaks "Suka Elemen HTML", tetapi itu hanyalah Three.js yang disesuaikan dengan struktur React. Tahap gandingan yang tinggi dalam React hanya memburukkan lagi isu dalaman yang tidak boleh diubah suai.
Pendekatan pengendalian acara React juga bermasalah. React menggunakan sistem acara sintetik untuk memastikan keserasian dan konsistensi penyemak imbas dalam pengendalian acara. Walau bagaimanapun, dengan menambahkan lapisan abstraksi pada pemprosesan acara, sistem ini mengehadkan kawalan terperinci ke atas gelung peristiwa dan pemasaan yang diperlukan dalam HPSE, menjadikannya sukar untuk melaksanakan pengoptimuman penting.
Isu ini timbul kerana falsafah reka bentuk React pada asasnya berbeza daripada matlamat HPSE. React tidak dibina dengan mengambil kira HPSE; ia direka untuk mengoptimumkan pembangunan pelanggan web standard. Jika React telah mengejar hala tuju yang serupa dengan HPSE, ciri-cirinya akan menjadi jauh berbeza, dan akan ada kes untuk mengguna pakainya dalam pembangunan HPSE. Tetapi kerana matlamat mereka sangat berbeza, mereka pasti berpisah.
Ini bukan untuk mengatakan bahawa segala-galanya tentang React, seperti penghalaan atau useEffect, adalah buruk. Malah, kebanyakan ciri ini boleh dilaksanakan menggunakan modul atau kod JavaScript kendiri. Tidak seperti React, modul JavaScript umum tidak menguatkuasakan saluran paip atau peraturan khusus pada projek. Selain itu, jika ia adalah sumber terbuka, anda boleh mengubah suai dalaman mereka untuk memenuhi keperluan anda.
Atas ialah kandungan terperinci (Enjin Tidak Boleh Ubahsuai, React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!