Artikel ini dikaji semula oleh Florian Rappl dan Moritz Kröger. Terima kasih kepada semua pengulas rakan sebaya di SitePoint untuk membuat kandungan SitePoint sempurna!
Sebagai minat dalam pengaturcaraan reaktif berfungsi (FRP) tumbuh, RXJS telah menjadi salah satu perpustakaan JavaScript yang paling popular dalam paradigma ini. Dalam artikel ini, kami akan meneroka sepuluh fungsi mesti tahu dalam RXJS.
Nota: Artikel ini mengandaikan bahawa anda sudah biasa dengan asas -asas RXJS, seperti yang diterangkan dalam artikel "Bermula dengan pengaturcaraan reaktif berfungsi dengan RXJS".mata utama
- RXJS memanfaatkan objek yang dapat dilihat sama dengan array yang diisi dari masa ke masa untuk memudahkan pengaturcaraan reaktif berfungsi (FRP), yang membolehkan pengendalian kesilapan yang lebih deklaratif dan kuat dalam aplikasi.
- Operasi teras aliran mudah dalam RXJS, seperti
- ,
map()
,filter()
, danreduce()
, operasi array cermin, tetapi digunakan untuk aliran nombor yang memancarkan nilai dari masa ke masa.take()
Fungsi khas seperti - dan
flatMap()
adalah penting untuk mengendalikan struktur data yang kompleks dan menguruskan pelbagai aliran secara berasingan, menjadikannya kritikal untuk tugas pengaturcaraan reaktif lanjutan.switch()
Pengendali seperti - ,
concat()
danmerge()
boleh digunakan untuk menggabungkan pelbagai aliran, masing -masing memainkan peranan yang berbeza dalam pengurusan aliran dan penyegerakan data.combineLatest()
Fungsi - menyediakan mekanisme berdasarkan keadaan luaran untuk berhenti berlangganan, yang menggambarkan fleksibiliti RXJ dalam kawalan aliran dan pengurusan sumber.
takeUntil()
Pengaturcaraan reaktif adalah paradigma pengaturcaraan yang mengambil aliran data yang dipanggil objek yang dapat dilihat sebagai unit pengaturcaraan asasnya.
Objek Stream -atau yang boleh dilihat dalam Jargon -sama -sama pendengar acara: Kedua -duanya menunggu sesuatu yang berlaku dan memberitahu anda apabila ia berlaku. Satu siri pemberitahuan asynchronous yang diperoleh dari pendengar onclick adalah contoh sempurna aliran data.
Dengan kata lain, objek yang dapat dilihat tidak lebih daripada array yang diisi dari masa ke masa.
Unsur -unsur array ini boleh datang dari hampir mana -mana sahaja: sistem fail, peristiwa DOM, panggilan API, dan juga data segerak yang ditukar seperti tatasusunan. Secara asasnya, pengaturcaraan reaktif tidak lebih daripada menggunakan objek yang dapat dilihat sebagai blok bangunan program.
Hubungan dengan Array
array adalah mudah kerana kandungan mereka adalah muktamad melainkan jika berubah secara eksplisit. Dalam pengertian ini, tidak ada temporalitas penting dalam array.
Sebaliknya, objek yang dapat dilihat ditakrifkan oleh masa. Paling banyak anda boleh tahu bahawa aliran telah diterima setakat ini [1, 2, 3]. Anda tidak dapat memastikan jika anda akan mendapat 4 -atau tidak -dan ia adalah sumber data, bukan program anda, yang menentukannya.
Hubungan antara aliran dan tatasusunan sangat mendalam bahawa kebanyakan sambungan reaktif berasal dari dunia pengaturcaraan berfungsi, di mana operasi senarai adalah teras.
biasa dengan rxjs
Pertimbangkan aplikasi tugas biasa. Mari lihat persoalan bagaimana untuk memaparkan nama tugas yang belum selesai pengguna menggunakan RXJS:
const task_stream = // 创建所有数据库中任务的流 getTasks(). // 只获取此用户的任务 filter((task) => task.user_id == user_id). // 获取未完成的任务 filter((task) => !task.completed). // 只获取任务名称 map((task) => task.name) /* 任务如下所示: task = { user_id : number, completed : boolean, name : string } */
Setakat ini, ini hanyalah lanjutan array, tetapi ia menunjukkan gaya fungsi pengaturcaraan reaktif.
Sifat deklaratif menjadi jelas dengan menambahkan fungsi yang lebih kompleks, "dunia nyata". Katakan kita mahu:
- Memulakan permintaan sebagai tindak balas kepada pilihan pengguna untuk melihat tugas yang lengkap atau belum selesai; Hantar hanya sekali permintaan kedua ke pemilihan terakhir untuk mengelakkan lebar jalur membuang -buang apabila pengguna dengan cepat mengubah pemilihan;
- Cuba semula sehingga tiga permintaan gagal; mengecat pandangan hanya jika pelayan menghantar respons yang berbeza daripada kali terakhir.
- Steply terurai:
const task_stream = parameter_stream. debounce(1000). map((parameter) => { getTasks(). retry(3). filter((task) => task.user_id === user_id). filter((task) => task.completed === parameter). map((task) => task.name) }). flatMap(Rx.Observable.from). distinctUntilChanged(). update()
Parameter_Stream memberitahu kami sama ada pengguna mahu menyelesaikan tugas atau belum selesai dan menyimpan pemilihan dalam parameter;
Debounce () Pastikan kami hanya memberi tumpuan kepada butang terakhir klik sesaat;- Bahagian di sekitar getTasks () adalah sama seperti sebelumnya;
- DistinctUndilChanged () memastikan bahawa kita hanya mengikuti respons pelayan yang berbeza daripada yang terakhir; dan
- kemas kini () bertanggungjawab untuk mengemas kini UI untuk mencerminkan apa yang kami dapat dari pelayan.
- Mengendalikan debounce, cuba semula, dan "berbeza sehingga berubah" logik dalam gaya yang penting, berasaskan panggilan balik adalah berkesan, tetapi ia adalah rapuh dan kompleks.
- Kunci ialah pengaturcaraan menggunakan RXJS membolehkan:
sistem berskala;
pengendalian ralat mudah, langsung dan kuat.
- Dalam proses melayari sepuluh fungsi mesti tahu RXJS, kita akan menghadapi setiap fungsi dalam contoh di atas.
- Operasi aliran mudah
- Fungsi asas aliran mudah (aliran yang memancarkan nilai mudah, seperti rentetan) termasuk:
penapis ()
Kurangkan ()
ambil () / takeWhile ()
- Selain mengambil () dan TakeWhile (), ini serupa dengan fungsi array pesanan tinggi JavaScript.
- kami akan menggunakan fungsi ini dengan menyelesaikan masalah contoh: Cari semua pengguna dalam pangkalan data dengan laman web .com atau .org dan hitung panjang purata nama laman web mereka.
- JsonPlaceholder akan berfungsi sebagai sumber pengguna kami. Ini adalah perwakilan JSON data pengguna yang akan kami gunakan.
- 1.
menerima panggilan balik sebagai parameter;
Jalankannya pada setiap elemen array yang anda panggil;Mengembalikan array baru di mana setiap elemen array asal digantikan oleh hasil yang dihasilkan oleh panggilan balik di atasnya.
satu -satunya perbezaan apabila menggunakan peta () pada objek yang dapat dilihat ialah:
- Ia mengembalikan objek baru yang boleh dilihat, bukan array baru;
- Ia dilaksanakan apabila objek yang dapat dilihat mengeluarkan projek baru, dan bukannya segera.
- kita boleh menggunakan peta () untuk menukar aliran data pengguna kami ke dalam senarai yang hanya mengandungi nama laman web mereka:
const task_stream = // 创建所有数据库中任务的流 getTasks(). // 只获取此用户的任务 filter((task) => task.user_id == user_id). // 获取未完成的任务 filter((task) => !task.completed). // 只获取任务名称 map((task) => task.name) /* 任务如下所示: task = { user_id : number, completed : boolean, name : string } */
di sini, kami menggunakan peta untuk menggantikan setiap objek pengguna dalam aliran masuk dengan setiap laman web pengguna.
rxjs juga membolehkan anda memanggil peta () sebagai pilih (). Kedua -dua nama merujuk kepada fungsi yang sama.
2
seperti peta (), penapis () tidak kira peranan yang sama pada objek yang dapat dilihat seperti pada tatasusunan. Untuk mencari setiap pengguna dengan alamat laman web .net atau .org, kami boleh menulis ini:const task_stream = parameter_stream. debounce(1000). map((parameter) => { getTasks(). retry(3). filter((task) => task.user_id === user_id). filter((task) => task.completed === parameter). map((task) => task.name) }). flatMap(Rx.Observable.from). distinctUntilChanged(). update()
Ini hanya akan memilih pengguna yang laman webnya berakhir dengan "bersih" atau "org".Kurangkan () membolehkan kita menggunakan semua nilai tunggal dan mengubahnya menjadi satu hasil.
mengurangkan () sering merupakan operasi senarai asas yang paling membingungkan, kerana tidak seperti penapis () atau peta (), tingkah lakunya berbeza dengan penggunaan.
Biasanya, mengurangkan () mengambil koleksi nilai dan menukarkannya ke dalam satu titik data. Dalam contoh kami, kami akan menyediakannya dengan aliran nama laman web dan menggunakan mengurangkan () untuk menukar aliran itu menjadi objek yang mengira jumlah bilangan laman web yang kami dapati dan panjang namanya.
source. map((user) => user.website)
- Jumlah panjang semua nama.
- ingat bahawa mengurangkan () mengembalikan hasilnya hanya apabila objek sumber yang dapat dilihat selesai. Jika anda ingin mengetahui status penumpuk setiap kali aliran menerima item baru, gunakan imbasan () sebaliknya.
ambil () dan takeWhile () melengkapkan fungsi asas aliran mudah.
ambil (n) baca nilai n dari aliran dan berhenti berlangganan.
kita boleh menggunakan imbasan () untuk memancarkan objek kami setiap kali kami menerima laman web, dan hanya mengambil () dua nilai pertama.
source. map((user) => user.website). filter((website) => (website.endsWith('net') || website.endsWith('org')); })
Operasi aliran pesanan tinggisource. map((user) => user.website). filter((website) => (website.endsWith('net') || website.endsWith('org'))). reduce((data, website) => { return { count : data.count += 1, name_length : data.name_length += website.length } }, { count : 0, name_length : 0 })
5.
... Malah, kita sudah menggunakannya!Apabila kita menentukan aliran sumber, kita panggil daripromise () dan flatmap ():
daripromise;
rx.observable.from;source. map((user) => user.website). filter((website) => (website.endsWith('net') || website.endsWith('org'))). scan((data, website) => { return { count : data.count += 1, name_length : data.name_length += website.length } }, { count : 0, name_length : 0 }). take(2);
flatmap.- objek yang dapat dilihat dari janji
- Janji mewakili satu nilai masa depan yang kita akan mendapat asynchronously -contohnya, hasil panggilan ke pelayan.
- Ciri -ciri yang menentukan
janji adalah bahawa ia hanya mewakili nilai masa depan. Ia tidak boleh mengembalikan pelbagai data tak segerak;
Ini bermakna apabila kita menggunakan rx.observable.frompromise () kita mendapat objek yang dapat dilihat yang memancarkan nilai tunggal -atau:
- nilai yang dihuraikan kepada janji; atau
- Janji ditolak nilai.
Apabila janji mengembalikan rentetan atau nombor, kita tidak perlu melakukan sesuatu yang istimewa. Walau bagaimanapun, apabila ia mengembalikan array (yang mana dalam kes kita), kita lebih suka membuat objek yang dapat dilihat yang memancarkan kandungan array dan bukannya array itu sendiri sebagai satu nilai.
6
Proses ini dipanggil meratakan, yang flatmap () proses. Ia mempunyai banyak beban, tetapi kami hanya menggunakan beban yang paling mudah dan paling biasa digunakan.- panggil flatmap () pada objek yang dapat dilihat yang mengeluarkan resolusi tunggal atau penolakan janji;
- Lulus fungsi untuk membuat objek yang boleh dilihat baru.
- Dalam contoh kami, kami lulus rx.observable.from (), yang mewujudkan urutan dari nilai -nilai array:
const task_stream = // 创建所有数据库中任务的流 getTasks(). // 只获取此用户的任务 filter((task) => task.user_id == user_id). // 获取未完成的任务 filter((task) => !task.completed). // 只获取任务名称 map((task) => task.name) /* 任务如下所示: task = { user_id : number, completed : boolean, name : string } */
const task_stream = parameter_stream. debounce(1000). map((parameter) => { getTasks(). retry(3). filter((task) => task.user_id === user_id). filter((task) => task.completed === parameter). map((task) => task.name) }). flatMap(Rx.Observable.from). distinctUntilChanged(). update()
Menggabungkan pelbagai aliran
Biasanya, kita akan mempunyai pelbagai aliran yang perlu digabungkan. Terdapat banyak cara untuk menggabungkan sungai, tetapi ada yang kelihatan lebih kerap daripada yang lain.
7.
Sambungan dan gabungan adalah dua cara yang paling biasa untuk menggabungkan sungai.concat () akan mencetak semua nilai sumber1 dan hanya akan mula mencetak nilai Source2 selepas Source1 selesai.
source. map((user) => user.website)
menggabungkan () aliran akan mencetak nilai Source1 dan Source2 mengikut urutan yang diterima: ia tidak menunggu aliran pertama selesai sebelum memancarkan nilai aliran kedua.Biasanya, kami ingin mendengar objek yang dapat dilihat yang memancarkan objek yang dapat dilihat, tetapi hanya memberi tumpuan kepada pelepasan terkini dari sumber.
untuk terus memperluaskan analogi Facebook Messenger, Switch () adalah anda ... dengan baik, togol orang yang anda balas berdasarkan siapa yang sedang menghantar mesej.
Untuk tujuan ini, RXJS menyediakan suis.
Antara muka pengguna menyediakan beberapa kes penggunaan yang baik untuk suis (). Jika permohonan kami membuat permintaan setiap kali pengguna memilih apa yang mereka mahu cari, kami boleh mengandaikan bahawa mereka hanya mahu melihat hasil pemilihan terkini. Oleh itu, kami menggunakan Switch () untuk mendengar hanya untuk hasil pemilihan terkini.
Dengan cara ini, kita harus pastikan tidak membazirkan jalur lebar dan hanya pilih akses ke pelayan untuk kali terakhir pengguna membuat setiap saat. Fungsi yang kami gunakan untuk ini dipanggil debounce ()
Jika anda mahu pergi ke arah yang lain dan hanya ikuti pilihan pertama, anda boleh menggunakan Throttle (). Ia mempunyai API yang sama, tetapi berkelakuan sebaliknya.
9
Bagaimana jika kita mahu membenarkan pengguna mencari jawatan atau pengguna dengan ID tertentu?- Tukar sebarang pilihan;
- Tukar dua pilihan.
- bertindak balas terhadap sebarang tahap perubahan menggunakan combinelatest ()
Dalam kes pertama, kita perlu membuat aliran yang memulakan permintaan rangkaian menggunakan yang berikut:
- ID baru -baru ini dipilih oleh pengguna.
- ... dan lakukan ini apabila pengguna mengemas kini sebarang pilihan.
Apabila mana -mana aliran memancarkan nilai, CombinElatest () mengambil nilai yang dipancarkan dan berpasangan dengan item terakhir yang dipancarkan oleh aliran lain dan mengeluarkan pasangan itu sebagai array.
const task_stream = // 创建所有数据库中任务的流 getTasks(). // 只获取此用户的任务 filter((task) => task.user_id == user_id). // 获取未完成的任务 filter((task) => !task.completed). // 只获取任务名称 map((task) => task.name) /* 任务如下所示: task = { user_id : number, completed : boolean, name : string } */
Ini lebih mudah untuk digambarkan dalam carta:Gunakan zip untuk bertindak balas hanya kepada perubahan dalam dua aliran
const task_stream = parameter_stream. debounce(1000). map((parameter) => { getTasks(). retry(3). filter((task) => task.user_id === user_id). filter((task) => task.completed === parameter). map((task) => task.name) }). flatMap(Rx.Observable.from). distinctUntilChanged(). update()
jadi tunggu sehingga pengguna mengemas kini pemilihan bidang ID dan titik akhir, menggantikan CombinElatest () dengan zip ().Tidak seperti CombinElatest (), zip () akan menunggu sehingga kedua -dua objek yang dapat dilihat memancarkan kandungan baru sebelum menghantar pelbagai nilai yang dikemas kini.
source. map((user) => user.website)
10Akhirnya, TakeUntil () membolehkan kita mendengar aliran pertama sehingga aliran kedua mula memancarkan nilai.
source. map((user) => user.website). filter((website) => (website.endsWith('net') || website.endsWith('org')); })
Hanya menambah dimensi masa ke array membuka pintu kepada pemikiran baru mengenai program.
rxjs adalah lebih daripada apa yang kita lihat di sini, tetapi itu cukup untuk pergi jauh.
Mulakan dengan RXJS Lite, bersedia untuk merujuk kepada dokumentasi dan luangkan masa untuk melakukannya. Sebelum anda tahu, semuanya akan kelihatan seperti sungai ... kerana semuanya.
Soalan Lazim Mengenai Fungsi RXJS (FAQ)
Apakah perbezaan utama antara RXJS dan JavaScript tradisional?
RXJS adalah perpustakaan pengaturcaraan reaktif menggunakan objek yang dapat dilihat untuk memudahkan gabungan kod asynchronous atau callback. Ini dibandingkan dengan menggunakan JavaScript tradisional dengan gaya pengaturcaraan yang lebih penting. Perbezaan utama ialah bagaimana mereka memproses data -RXJS merawat data sebagai aliran, yang boleh dikendalikan dan diubah menggunakan pelbagai pengendali, sementara JavaScript tradisional memproses data dengan cara yang lebih linear.
Bagaimana untuk membuat objek yang dapat dilihat dalam RXJS?
Dalam RXJS, anda boleh membuat objek yang boleh dilihat menggunakan pembina baru () yang baru. Pembina ini mengambil fungsi sebagai hujah, yang dipanggil fungsi pelanggan, yang dilaksanakan apabila pada mulanya melanggan objek yang dapat dilihat. Berikut adalah contoh asas:
const task_stream = // 创建所有数据库中任务的流 getTasks(). // 只获取此用户的任务 filter((task) => task.user_id == user_id). // 获取未完成的任务 filter((task) => !task.completed). // 只获取任务名称 map((task) => task.name) /* 任务如下所示: task = { user_id : number, completed : boolean, name : string } */
Apakah pengendali utama dalam RXJS dan bagaimana mereka bekerja?
RXJS mempunyai pelbagai pengendali yang boleh digunakan untuk mengawal bagaimana aliran data antara objek dan pemerhati yang dapat dilihat. Beberapa pengendali utama termasuk peta (), penapis (), mengurangkan (), menggabungkan (), dan concat (). Setiap pengendali ini mengendalikan aliran data dengan cara yang berbeza, seperti menukar data, menapis nilai tertentu, atau menggabungkan pelbagai aliran.
Bagaimana menangani kesilapan dalam RXJS?
rxjs menyediakan beberapa pengendali yang mengendalikan kesilapan, seperti catchError (), cuba semula (), dan retrywhen (). Pengendali penangkapan () digunakan untuk menangkap kesilapan pada aliran yang dapat dilihat dan mengembalikan objek baru yang dapat dilihat atau membuang kesilapan. Pengendali semula () boleh digunakan untuk menyerahkan semula objek yang boleh dilihat sekiranya berlaku ralat. Pengendali semula () adalah sama, tetapi ia memberikan lebih banyak kawalan ke atas apabila cuba semula.
Bagaimana membatalkan langganan objek yang dapat dilihat dalam RXJS?
Apabila anda melanggan yang dapat dilihat, anda menerima langganan yang mempunyai kaedah berhenti berlangganan (). Anda boleh memanggil kaedah ini untuk membatalkan pelaksanaan objek yang dapat dilihat dan membersihkan sebarang sumber yang sedang digunakan. Berikut adalah contoh:
const task_stream = parameter_stream. debounce(1000). map((parameter) => { getTasks(). retry(3). filter((task) => task.user_id === user_id). filter((task) => task.completed === parameter). map((task) => task.name) }). flatMap(Rx.Observable.from). distinctUntilChanged(). update()
Apakah perbezaan antara objek yang dapat dilihat dengan sederhana dan objek yang dapat dilihat sejuk?
Dalam RXJS, objek yang dapat dilihat boleh menjadi panas atau sejuk. Pemantauan sejuk mula berjalan apabila dilanggan, sementara pemerhatian panas menghasilkan nilai walaupun sebelum melanggan. Dalam erti kata lain, objek yang dapat dilihat sejuk tidak aktif, manakala objek yang boleh dilihat panas tidak.
Bagaimana untuk menggabungkan pelbagai objek yang dapat dilihat dalam RXJS?
RXJS menyediakan beberapa pengendali yang menggabungkan pelbagai objek yang dapat dilihat, seperti gabungan (), concat (), combinelatest (), dan zip (). Setiap pengendali ini menggabungkan aliran data dengan cara yang berbeza, bergantung kepada keperluan khusus anda.
Apakah tujuan tema dalam RXJS?
Topik dalam RXJS adalah jenis objek yang boleh dilihat khas yang membolehkan multicasting nilai kepada pelbagai pemerhati. Tidak seperti objek yang boleh dilihat biasa, topik mengekalkan pendaftaran untuk banyak pendengar.
Bagaimana menggunakan RXJS dengan sudut?
Sudut menyokong RXJS dalam dibina dan menggunakannya secara dalaman untuk pelbagai fungsi. Anda juga boleh menggunakan RXJS dalam kod anda sendiri untuk mengendalikan operasi asynchronous dan melaksanakan fungsi seperti penyelesaian automatik, de-jitter, pendikit, pengundian, dll.
Apakah beberapa kes penggunaan biasa untuk RXJS?
RXJS boleh digunakan dalam pelbagai senario di mana data tak segerak diperlukan. Beberapa kes penggunaan biasa termasuk mengendalikan input pengguna, membuat permintaan HTTP, menggunakan websocket, dan mengendalikan animasi.
Atas ialah kandungan terperinci 10 fungsi RXJS yang perlu diketahui dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Ya, teras enjin JavaScript ditulis dalam C. 1) Bahasa C menyediakan prestasi yang efisien dan kawalan asas, yang sesuai untuk pembangunan enjin JavaScript. 2) Mengambil enjin V8 sebagai contoh, terasnya ditulis dalam C, menggabungkan kecekapan dan ciri-ciri berorientasikan objek C. 3) Prinsip kerja enjin JavaScript termasuk parsing, penyusun dan pelaksanaan, dan bahasa C memainkan peranan penting dalam proses ini.

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini
