Artikel ini adalah sebahagian daripada siri Web Dev Tech dari Microsoft. Terima kasih kerana menyokong rakan kongsi yang membuat SitePoint mungkin.
Semasa merancang Babylon.js v2.0 (perpustakaan untuk membina 3D di web), saya baru -baru ini mendapati diri saya berharap bahawa lebih banyak API fasih - iaitu, saya berharap masyarakat dapat lebih mudah membaca, memahami, dan membina Kerja sambil menghabiskan lebih sedikit masa dalam dokumen teknologi. Dalam tutorial ini, saya akan berjalan melalui API yang fasih-apa yang perlu dipertimbangkan, bagaimana menulisnya, dan implikasi prestasi silang pelayar.
<span>$('<div></div>') </span> <span>.html("Fluent API are cool!") </span> <span>.addClass("header") </span> <span>.appendTo("body");</span>
kita boleh membuat API yang fasih seperti ini:
<span>var <span>MyClass</span> = function(a) { </span> <span>this.a = a; </span><span>} </span> <span>MyClass.prototype.foo = function(b) { </span> <span>// Do some complex work </span> <span>this.a += Math.cos(b); </span> <span>return this; </span><span>}</span>
kita boleh berantai panggilan:
<span>var obj = new MyClass(5); </span>obj<span>.foo(1).foo(2).foo(3);</span>
jadi saya membuat penanda aras!
<span>var count = 10000000; </span> <span>var <span>MyClass</span> = function(a) { </span> <span>this.a = a; </span><span>} </span> <span>MyClass.prototype.foo = function(b) { </span> <span>// Do some complex work </span> <span>this.a += Math.cos(b); </span> <span>return this; </span><span>} </span> <span>MyClass.prototype.foo2 = function (b) { </span> <span>// Do some complex work </span> <span>this.a += Math.cos(b); </span><span>} </span> <span>var start = new Date().getTime(); </span><span>var obj = new MyClass(5); </span>obj<span>.foo(1).foo(2).foo(3); </span><span>for (var index = 0; index < count; index++) { </span> obj<span>.foo(1).foo(2).foo(3); </span><span>} </span><span>var end = new Date().getTime(); </span> <span>var start2 = new Date().getTime(); </span><span>var obj2 = new MyClass(5); </span><span>for (var index = 0; index < count; index++) { </span> obj2<span>.foo2(1); </span> obj2<span>.foo2(2); </span> obj2<span>.foo2(3); </span><span>} </span><span>var end2 = new Date().getTime(); </span> <span>var div = document.getElementById("results"); </span> div<span>.innerHTML += obj.a + ": With return this: " + (end - start) + "ms<BR>"; </span>div<span>.innerHTML += obj2.a + ": Without return this: " + (end2 - start2) + "ms";</span>
Jelas rantai panggilan berbeza antara:
obj<span>.foo(1).foo(2).foo(3);</span>
obj2<span>.foo2(1); </span>obj2<span>.foo2(2); </span>obj2<span>.foo2(3);</span>
dan inilah hasil yang saya dapat:
Saya menambah operasi ke dalam fungsi (math.cos) untuk mensimulasikan beberapa jenis pemprosesan yang dilakukan oleh fungsi.
Jika saya mengeluarkan segala -galanya dan simpan pernyataan kembali, pada semua pelayar tidak ada perbezaan (sebenarnya hanya satu atau dua milisaat untuk 10,000,000 percubaan). Anda boleh menguji ini untuk diri sendiri di seluruh pelayar. Dan jika anda tidak mempunyai peranti yang berguna, terdapat banyak alat percuma di Modern.ie. Hanya jangan menguji mesin maya terhadap peranti sebenar.
jadi kesimpulan saya adalah: ia pergi!
API yang fasih hebat, mereka menghasilkan lebih banyak kod yang boleh dibaca dan anda boleh menggunakannya tanpa sebarang masalah atau kerugian prestasi!
Ia mungkin mengejutkan anda sedikit, tetapi Microsoft mempunyai banyak pembelajaran percuma di banyak topik JavaScript sumber terbuka dan kami berada dalam misi untuk membuat lebih banyak lagi dengan Projek Spartan yang akan datang. Lihat saya sendiri:
atau siri pembelajaran pasukan kami:
dan beberapa alat percuma: Komuniti Visual Studio, Percubaan Azure, dan Alat Ujian Cross-Browser untuk Mac, Linux, atau Windows.
Artikel ini adalah sebahagian daripada siri Web Dev Tech dari Microsoft. Kami teruja untuk berkongsi Projek Spartan dan enjin rendering baru dengan anda. Dapatkan mesin maya percuma atau ujian dari jauh pada peranti Mac, iOS, Android, atau Windows anda di Modern.ie.
Mewujudkan API yang fasih dalam JavaScript melibatkan merancang kaedah anda untuk mengembalikan objek yang mereka miliki. Ini membolehkan anda untuk mengikat kaedah bersama. Sebagai contoh, pertimbangkan objek 'kereta' dengan kaedah 'startengine', 'mempercepatkan', dan 'berhenti'. Jika setiap kaedah ini mengembalikan 'ini' (objek kereta), anda boleh mengikat mereka bersama -sama seperti: car.startengine (). Mempercepatkan (). API API? Dengan kaedah chaining bersama -sama, anda boleh mengekspresikan operasi yang kompleks dengan cara yang berbunyi seperti ayat. Ini boleh menjadikan kod anda lebih mudah difahami dan debug. API yang fasih juga boleh menjadikan kod anda lebih ekspresif dan fleksibel, membolehkan anda membuat abstraksi yang lebih kuat. , mereka juga boleh menjadikannya lebih sukar untuk debug jika tidak digunakan dengan betul. Kerana panggilan kaedah dirantai bersama -sama, masalah dengan satu kaedah boleh menjejaskan semua kaedah berikutnya dalam rantai. Selain itu, API yang fasih kadang -kadang kurang intuitif bagi orang yang tidak biasa dengan corak. , tetapi ia boleh menjadi lebih kompleks. Anda perlu memastikan bahawa setiap kaedah dalam rantaian mengembalikan janji, membolehkan anda menggunakan '.then ()' untuk kaedah rantai bersama -sama. Sebagai alternatif, anda boleh menggunakan sintaks async/menunggu untuk menulis kod asynchronous yang kelihatan segerak, yang boleh menjadikan API fasih anda lebih mudah dibaca dan difahami.
API fasih adalah corak reka bentuk yang memberi tumpuan kepada kebolehbacaan dan ekspresi. Ia boleh dibandingkan dengan corak reka bentuk lain seperti corak pembina, yang juga bertujuan untuk menjadikan kod lebih mudah dibaca dan lebih mudah untuk bekerja. Walau bagaimanapun, sementara corak Builder memberi tumpuan kepada membina objek kompleks langkah demi langkah, API fasih memberi tumpuan kepada membuat kaedah panggilan boleh dihubungkan untuk aliran operasi yang lebih mudah dibaca. >Atas ialah kandungan terperinci JavaScript seperti bos: memahami API yang fasih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!