Apa kelebihan arsitektur klien / server dalam aplikasi web sebagai lawan dari aplikasi frontend server yang dihasilkan

13

Di perusahaan kami, kami perlu membangun antarmuka web ke platform Linux yang tertanam. Saya agak melihat 2 opsi: Anda menggunakan teknologi di mana HTML dan JavaScript dihasilkan di sisi server (Pikirkan JSP, Grails, tetapi merupakan sesuatu yang menggunakan C ++ dan menghasilkan HTML / JavaScript) atau Anda membuat 'klien' HTML5 aplikasi yang berbicara ke backend menghasilkan JSON atau XML.

Saya merasa bahwa aplikasi web saat ini cenderung mengikuti yang terakhir, tetapi apa keuntungan melakukannya (Para pengembang proyek memilih yang pertama, terutama berdasarkan fakta bahwa mereka tahu C ++ jauh lebih baik daripada HTML dan Javascript)

Wim Deblauwe
sumber
Jika pengembang lebih akrab dengan C ++ daripada mereka dengan HTML + JS, mengapa mereka pergi dengan solusi sebelumnya? Yang terakhir akan memberi mereka lebih sedikit kerumitan, terutama jika mereka mengganti "Klien HTML 5" dengan klien kaya seperti aplikasi desktop C ++, atau aplikasi desktop yang dikerahkan Java Applet atau JNLP ...?
Shivan Dragon

Jawaban:

4

AJAX

Saya pikir pertanyaan Anda bermuara pada, "Haruskah aplikasi web saya menghasilkan HTML di sisi klien atau di sisi server?" Generasi sisi klien berkomunikasi ke server menggunakan AJAX, meskipun X (XML) umumnya telah diganti dengan JSON, tetapi kebanyakan orang masih menyebutnya AJAX karena kedengarannya lebih baik. Sisi server, server hanya membuat HTML di server.

Saya memiliki banyak pengalaman dengan XML dan hampir tidak ada dengan JSON. Semua yang saya tahu tentang XML membuat saya menyarankan agar Anda menggunakan JSON jika memungkinkan.

Pro AJAX:

  • Kirim lebih sedikit data melalui HTTP (S) sehingga mereka dapat berjalan lebih cepat.
  • Server pada dasarnya adalah layanan web sehingga orang lain (atau Anda) dapat menulis klien mereka sendiri. Ini dapat membantu saat membuat versi seluler situs Anda. Juga, banyak penemuan menjadi populer karena alasan pencipta mereka tidak pernah bermaksud. Layanan lebih ramah kepada orang yang menemukan penggunaan baru untuk kode Anda.
  • Sepertinya aplikasi yang lebih baru

AJAX Cons:

  • JavaScript debugging
  • Kompleksitas?
  • Hal-hal yang dapat Anda lakukan dengan JavaScript seringkali sama sekali tidak mungkin digunakan oleh orang yang buta atau cacat.
  • Mungkin memerlukan lebih banyak kode total (penyimpanan keseluruhan yang lebih besar pada perangkat tertanam Anda)

Server klien

Semua aplikasi web menggunakan arsitektur client-server. Protokol HTTP memaksa aplikasi web untuk berperilaku seperti itu. AJAX menggunakan penyelesaian untuk keterbatasan desain itu, tetapi model dasar HTTP yang mendasar masih client-server. Saya tidak akan terpaku pada semua hal tentang cara terbaik untuk menerapkan MVC ke aplikasi web. Jika Anda harus melakukan MVC karena alasan politik, lihat bagaimana Ruby / Rails melakukannya. Sebenarnya, Rails adalah arsitektur yang bagus untuk disalin (atau digunakan).

Layanan vs. Aplikasi.

Layanan yang baik hampir selalu lebih baik daripada aplikasi. Tetapi membuat layanan yang baik itu sulit! Anda mungkin perlu membuat aplikasi sebelum dapat menulis spesifikasi yang dirancang dengan cukup baik untuk suatu layanan. Jangan membuat pekerjaan Anda lebih sulit dari yang seharusnya. Untuk versi 1, fokuslah untuk membuat aplikasi yang hebat. Sampai aplikasi Anda relatif stabil dan Anda yakin itu memenuhi persyaratan pengguna Anda, memiliki layanan mungkin tidak akan ada gunanya bagimu. Merancang layanan yang salah terlalu dini adalah buang-buang waktu yang terus memboroskan saat Anda mencoba untuk memperbaiki antarmuka layanan Anda, dan berurusan dengan refactoring besar-besaran dari kedua kode server dan klien yang akan mengikuti.

C / Web

Wow. Saya bekerja di C dan Assembly selama 3 tahun sebelum saya beralih ke pengembangan web. Saya tidak bisa memikirkan bahasa yang lebih buruk untuk menulis aplikasi web - terutama dari sudut pandang keamanan. Validasi input dan output yang keluar sangat penting ... SANS merilis daftar kesalahan paling umum setiap tahun. Buffer overflow, suntikan, masalah lintas situs (pengodean output yang tidak benar) ... Semua kesalahan ini sangat mudah dilakukan di C atau perakitan. Setidaknya bahasa seperti Java memiliki String yang kebal terhadap luapan dan mekanisme penanganan pengecualian yang umumnya mencegah kesalahan satu per satu dari memungkinkan kode berbahaya mengakses memori sistem. Belum lagi menangani set karakter internasional (gunakan UTF-8 bila memungkinkan).

Jika Anda perlu menggunakan C untuk alasan memori atau firmware, maka itulah yang harus Anda lakukan. Hati-hati!

Dukungan Browser

Langkah pertama untuk membuat aplikasi web adalah menemukan browser mana yang akan digunakan oleh klien Anda ? W3Schools dan Wikipedia keduanya sumber statistik umum yang baik, tetapi YMMV.

Di mana saya bekerja sekarang, kami saat ini memvalidasi bahwa aplikasi kami hanya membuat HTML transisi XHTML 1.0 yang valid. Kami juga menggunakan DOCTYPE spesifik dan format yang diperlukan untuk menghindari Mode Quirks di IE, yang membuat HTML lintas-browser lebih mudah untuk ditulis (lihat tips di blog saya ). Kami menguji pada 3 versi terbaru IE, ditambah Firefox dan Chrome di Windows dan Linux (Safari menggunakan mesin rendering yang sama seperti Chrome). Dengan validasi dan pengujian itu, aplikasi kami cukup berfungsi di mana-mana (Windows, Mac, Linux, iPhone, Android, dll.) Kecuali BlackBerry.

BlackBerry belum pernah memiliki browser nyata dengan JavaScript, jadi kami tidak mendukungnya. Pengguna BlackBerry terbiasa tidak memiliki browser web asli, sehingga mereka tidak mengeluh. Mungkin itu berubah? Saya akan mencoba bertanya kepada beberapa klien browser apa yang mereka gunakan dan pastikan untuk menguji dengan browser tersebut.

Ringkasan

Semua situs web dibangun di atas HTML dan HTTP. Punya referensi yang baik untuk teknologi ini saat Anda membuat aplikasi. Dalam proses membuat aplikasi, bahkan dengan toolkit, Anda akan menghadapi masalah yang membutuhkan pemahaman dasar teknologi ini untuk menyelesaikannya.

Anda mungkin juga perlu merasa nyaman dengan CSS, dan kompresi gambar untuk membuat sesuatu yang terlihat baik dan merespons dengan cepat. JavaScript, server web, dan browser adalah bidang pengetahuan tambahan yang pada akhirnya Anda perlukan.

Jika Anda membuat HTML di sisi server, basis kode Anda mungkin akan lebih kecil dan Anda mungkin tidak perlu belajar JavaScript. Model sisi server berarti pemrogram Anda akan menulis kode (C?) Yang menghasilkan HTML yang dapat mereka lihat langsung sebelum dikirim ke klien. Model AJAX berarti pemrogram Anda akan menulis JavaScript yang menghasilkan HTML. Saya tidak mengetahui banyak alat untuk memvalidasi atau bahkan melihat kode HTML yang dihasilkan oleh JavaScript dalam browser, membuatnya lebih sulit untuk diprogram dengan benar.

Di mana saya bekerja sekarang, kami menggunakan pendekatan hybrid yang kadang-kadang melibatkan kode Java yang menghasilkan JavaScript yang menghasilkan HTML. Jika Anda baru mengenal pengembangan web, itu bukan tempat untuk memulai. Saya kira saya harus mengatakan bahwa kecuali Anda memiliki alasan kuat untuk menggunakan model AJAX, saya akan mulai dengan model generasi server-side-HTML-generasi yang lebih lama dan melihat sejauh mana hal itu dapat menjangkau Anda.

GlenPeterson
sumber
"Saya tidak mengetahui banyak alat untuk memvalidasi atau bahkan melihat kode HTML yang dihasilkan oleh JavaScript dalam peramban" Itulah tujuan FireBug (atau ekstensi peramban pengembang web lainnya, seperti alat pengembang web Chrome).
sleske
13

Yang terakhir memiliki keunggulan yang menjadikan "back end" Anda sebagai "layanan data" generik (apa pun artinya dalam konteks Anda).

Klien HTML Anda kemudian hanyalah salah satu dari banyak konsumen yang mungkin dari data itu. Pikirkan aplikasi iOS, aplikasi Android, aplikasi Windows 8, API, dll. - sebagai konsumen lain.

treecoder
sumber
Selain itu, ini bisa menjadi pedang bermata dua (lebih banyak hal bergantung pada API, yang membuatnya lebih sulit untuk memperbarui), itu juga membantu menyatukan kode sisi server, daripada harus mempertahankan satu set "web" dan "API" "pengontrol dan tampilan. Pemisahan kekhawatiran FTW.
Shauna
6

Cara umum yang berkembang dari aplikasi web adalah campuran keduanya, cenderung satu atau sisi lainnya.

The pertama pendekatan yang lebih tradisional, telah ada selama bertahun-tahun dan yang didokumentasikan dengan baik, (meskipun c ++ umumnya tidak bahasa populer untuk itu).

The kedua opsi yang lebih modern, dan hadir dalam blog pengembangan dan forum saat ini. Salah satu alasan untuk itu, adalah meningkatnya kebutuhan untuk melayani aplikasi yang sama untuk antarmuka, seluler, dan layanan API lainnya. Pendekatan kedua cenderung ke arah klien yang lebih kaya dan lebih responsif.

Secara keseluruhan, itu tergantung dari kendala lain, seperti keakraban tim, dan kasus bisnis.

Beberapa pertanyaan yang dapat membantu Anda menilai opsi Anda:

  1. Apakah tim memiliki pengalaman dalam bahasa dan platform?
  2. Apakah tim mau mempelajari pendekatan dan teknologi baru?
  3. Apakah aplikasi mengambil keuntungan karena lebih mudah diprogram untuk perangkat lain (iPhone, android, windows 8, dll)
  4. Apakah aplikasi lain, internal atau eksternal terintegrasi dengan layanan atau data tersedia untuk aplikasi?
RMalke
sumber
5

Untuk aplikasi "intranet" seperti itu saya menggunakan pendekatan klien lemak (JavaScript / HTML5-app + JSON) dengan ExtJS4.

Untuk situs web "internet" yang normal, saya akan menggunakan pendekatan yang lebih "klasik".

Klien harus merender situs itu, jadi mengapa tidak mengisi mereka dengan seluruh proses dan hanya memberi mereka data untuk diisi. Itu hanya mem-fies kode server untuk menghasilkan respons (sekadar JSON atau XML), yang menghemat kinerja. Juga karena selalu ada lebih banyak klien daripada server, seluruh sistem berskala jauh lebih baik jika lebih banyak pekerjaan dilakukan oleh klien.

Kode klien dikirimkan dengan HTTP, Anda masih dapat dengan mudah mengirim versi baru ke pengguna tanpa mekanisme pembaruan yang tidak jelas. (Cukup ganti HMTL / JS / CSS)

Satu-satunya alasan saya lebih suka pendekatan klasik di situs web normal, adalah mesin pencari.

K ..
sumber