Rumah hujung hadapan web tutorial js Tanggapan pertama Astro: apa yang saya suka dan tidak suka

Tanggapan pertama Astro: apa yang saya suka dan tidak suka

Dec 29, 2024 am 10:34 AM

First impressions of Astro: what I liked and disliked

Baru-baru ini saya mula menggunakan Astro untuk membina semula projek sampingan yang asalnya dibina dengan WordPress, Go, Rails dan Hugo. Saya memilih Astro kerana ia mempunyai DX seperti React dengan sokongan pelayan bahasa yang baik, dan kerana ia serasi dengan platform pengehosan tanpa pelayan yang mempunyai peringkat percuma yang besar (Cloudflare, AWS Lambda, dll).

Saya tidak tahu banyak tentang Astro apabila saya mula menggunakannya. Memandangkan saya telah memindahkan berbilang tapak, saya ingin berkongsi perkara yang saya suka dan tidak suka tentang rangka kerja untuk sesiapa sahaja yang mempertimbangkan untuk menggunakannya.

Astro: apa yang saya suka

Pada terasnya, Astro ialah penjana tapak statik dengan keupayaan untuk menghasilkan halaman yang diberikan pelayan dinamik apabila diperlukan. Astro sangat sesuai untuk blog atau tapak pemasaran kecil dengan interaktiviti terhad. Rangka kerja menyediakan kebanyakan DX daripada Next.js tanpa overhed React.js.

IntelliSense dan pemformatan kod yang baik dalam bahasa templat yang diberikan pelayan

Sejujurnya: sokongan pelayan bahasa yang baik dan pemformatan kod sangat kurang dalam bahasa templat yang diberikan pelayan tradisional. Templat Go, Jinja, ERB dan EJS sangat tertinggal dengan alatan jika dibandingkan dengan rakan sejawat React/Vue/Svelte mereka. Kebanyakan bahasa templat yang diberikan pelayan tidak mempunyai cara untuk mengetahui pembolehubah yang terdapat dalam skop atau jenisnya.

Dengan Astro, semua ciri ini hanya satu sambungan Kod VS.

Di dalam templat Astro, anda menetapkan data anda di bahagian atas templat di dalam "pagar kod" yang sama ada berjalan pada masa binaan atau apabila membalas permintaan pada pelayan. Begini rupanya dalam amalan:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

---

import Layout from "../layouts/Layout.astro";

import { getPosts } from "../data/posts";

 

const posts: { id, title }[] = await getPosts();

---

<Layout pageTitle="Posts">

  <h1>Posts</h1>

 

  {post.length > 0 ? (

    <ul>

      {posts.map((post) => (

        <li>

          <a href={`/posts/${post.id}`}>

            {post.title}

          </a>

        </li>

      )}

    </ul>

  ) : null}

</Layout>

Salin selepas log masuk
Salin selepas log masuk

Oleh kerana semua data untuk templat dimuatkan dalam "pagar kod" di atas templat, pelayan bahasa boleh menyediakan pelengkapan automatik untuk sifat mana-mana objek yang ditakrifkan dalam skop. Ia juga akan menunjukkan apabila anda cuba menggunakan pembolehubah yang tidak wujud.

Fail Astro boleh menjadi "komponen"

Salah satu masalah terbesar saya dengan bahasa templat tradisional seperti templat Go, Jinja dan EJS ialah mereka tidak mempunyai "komponen" yang boleh menerima kanak-kanak. Kebanyakan tapak web saya mempunyai beberapa jenis elemen UI "bekas" lebar terhad, yang memastikan kandungan tidak terbang ke penghujung skrin pada monitor ultra lebar. Jika anda mempunyai kelas .container yang anda tambahkan secara manual pada

elemen, maka ini biasanya berfungsi dengan baik. Walau bagaimanapun, jika anda menggunakan rangka kerja CSS utiliti seperti Tailwind maka anda mungkin mendapati diri anda menambah kod berikut pada setiap templat halaman tunggal:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<div

 >

 

 

 

<p>When you eventually need to change these classes, it's an error-prone pain to update each file manually. But if your templating language doesn't have components that can accept children, it's almost inevitable. </p>

 

<p>Unlike those traditional templating languages, Astro templates can be used as components that accept children using a <slot /> tag. A long string of utility classes could be extracted into a reusable Astro component:<br>

 

 

<pre class="brush:php;toolbar:false"><div

 >

 

 

 

<p>The Astro component could then be consumed from another Astro file.<br>

</p>

 

<pre class="brush:php;toolbar:false">---

import Container from "../components/Container.astro";

---

<Container>

  <h1>Hello, world!</h1>

</Container>

Salin selepas log masuk
Salin selepas log masuk

Fail Astro tidak terhad kepada satu slot: ia boleh mempunyai berbilang.

Ciri kegemaran saya bagi komponen Astro ialah mereka boleh menerima prop dalam pagar kod. Berikut ialah contoh:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

---

import Layout from "../layouts/Layout.astro";

import { getPosts } from "../data/posts";

 

const posts: { id, title }[] = await getPosts();

---

<Layout pageTitle="Posts">

  <h1>Posts</h1>

 

  {post.length > 0 ? (

    <ul>

      {posts.map((post) => (

        <li>

          <a href={`/posts/${post.id}`}>

            {post.title}

          </a>

        </li>

      )}

    </ul>

  ) : null}

</Layout>

Salin selepas log masuk
Salin selepas log masuk

Komponen kemudiannya boleh menerima prop apabila digunakan dalam fail lain.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<div

 >

 

 

 

<p>When you eventually need to change these classes, it's an error-prone pain to update each file manually. But if your templating language doesn't have components that can accept children, it's almost inevitable. </p>

 

<p>Unlike those traditional templating languages, Astro templates can be used as components that accept children using a <slot /> tag. A long string of utility classes could be extracted into a reusable Astro component:<br>

 

 

<pre class="brush:php;toolbar:false"><div

 >

 

 

 

<p>The Astro component could then be consumed from another Astro file.<br>

</p>

 

<pre class="brush:php;toolbar:false">---

import Container from "../components/Container.astro";

---

<Container>

  <h1>Hello, world!</h1>

</Container>

Salin selepas log masuk
Salin selepas log masuk

Saluran paip aset bahagian hadapan dengan tambah nilai langsung terbina dalam

Saya telah membina integrasi sisi pelayan saya sendiri dengan Vite sebelum ini. Jika anda cuba mendapatkan sesuatu dalam talian dengan cepat, ini ialah jenis ciri komoditi yang anda mahu elakkan daripada membina sendiri. Dengan Astro, ia terbina dalam.

Jika anda ingin menambah skrip tersuai pada halaman atau komponen Astro, anda hanya perlu melepaskan teg skrip pada halaman tersebut.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

---

type Props = { pageTitle: string; pageDescription: string };

 

const { pageTitle, pageDescription } = Astro.props;

---

 

<!doctype html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>{pageTitle}</title>

    <meta name="description" content={pageDescription} />

  </head>

  <body>

    <slot />

  </body>

</html>

Salin selepas log masuk

Astro akan menyusun fail TS dan JS secara automatik sebagai sebahagian daripada proses pembinaan tapak. Anda juga boleh menulis skrip yang menggunakan import daripada node_modules di dalam teg skrip dalam komponen Astro, dan Astro akan menyusunnya semasa masa binaan dan mengekstraknya ke failnya sendiri.

1

2

3

4

5

6

7

8

9

10

---

import Layout from "../layouts/Layout.astro";

---

<Layout

  pageTitle="Tyler's Blog"

  pageDescription="I don't really post on here."

>

  <h1>Tyler's blog</h1>

  <p>Sorry, there's no content yet...</p>

</Layout>

Salin selepas log masuk

Anda boleh memasukkan gaya CSS atau Scss dalam fail Astro dengan mengimportnya dalam pagar kod.

1

2

3

4

<div>

  <h1>This is my page</h1>

  <script src="../assets/script.ts"></script>

</div>

Salin selepas log masuk

Astro juga menyediakan keupayaan untuk melakukan gaya berskop dengan menggunakan tag gaya dalam fail Astro. Ciri ini mungkin biasa kepada pengguna Vue.

Memandangkan fail Astro berikut:

1

2

3

4

5

6

7

8

9

10

<script>

  // This will also compile down to a JavaScript file at build time.

 

  import axios, { type AxiosRequestConfig, type AxiosResponse } from "axios";

 

  const response = await axios

    .get<AxiosRequestConfig, AxiosResponse<{foo: string}>>("/some-endpoint");

 

  console.log(response.data.foo);

</script>

Salin selepas log masuk

Mudah, bukan?

Tindakan

Tindakan menyediakan cara selamat jenis untuk menjalankan fungsi hujung belakang. Mereka menyediakan pengesahan dan boleh mengendalikan data JSON dan borang. Ia merupakan salah satu ciri pembunuh Astro dengan mudah: semua ini perlu disambungkan dengan tangan dalam apl Next.js dengan cara yang dipesan lebih dahulu. Mereka memerlukan lebih sedikit kod daripada yang boleh dimuatkan dengan kemas ke dalam contoh, tetapi ia agak elegan untuk digunakan. Saya syorkan membaca halaman dokumen tindakan.

Tiada kos JS masa jalan

Terdapat sebilangan besar pembangun Twitter yang mengatakan React adalah "cukup pantas." Untuk banyak perkara tidak.

Saya menggunakan Rasbperry Pi 4s untuk projek kecil, dan anda boleh rasa kos masa jalan React. Saya pasti ia adalah sama untuk telefon Android yang murah, kecuali dalam kes itu, overhed JS juga akan menghabiskan bateri.

Jika satu-satunya interaktiviti yang diperlukan oleh tapak saya ialah menogol menu navigasi, saya lebih suka menyambungkannya sendiri. Saya dengan senang hati akan mencapai React apabila saya memerlukannya, tetapi untuk banyak projek saya sebenarnya tidak memerlukannya.

Astro: apa yang saya tidak suka

Perkara yang saya tidak suka tentang Astro bukan unik pada rangka kerja: ia adalah idea yang dipinjam daripada alatan lain dalam ekosistem JavaScript.

Penghalaan berasaskan fail

Oleh kerana Astro menggunakan penghalaan berasaskan fail, separuh daripada fail dalam projek Astro akhirnya dinamakan index.(astro|js|ts) atau [id].(astro|js|ts). Penghalaan berasaskan fail ialah corak menjengkelkan yang melanda dunia bahagian hadapan selepas Next.js melaksanakannya dan ia datang dengan banyak kelemahan:

  • Anda selalunya akan membuka 5 tab dalam editor anda dengan nama fail yang sama. Ia akan mengambil sekurang-kurangnya 3 tekaan untuk mencari tab yang anda cari.
  • Pencari kabur fail editor jauh kurang berguna kerana begitu banyak fail mempunyai nama yang sama.
  • Penghalaan berasaskan fail menyerakkan salah satu kebimbangan teras aplikasi merentas banyak fail dan folder, menjadikannya sukar untuk melihat semua laluan sepintas lalu dalam editor. Sebaliknya, anda mesti menelusuri beberapa folder untuk memahami halaman yang tersedia.

Saya akui: penghalaan berasaskan fail terasa hebat apabila anda membuat tapak dengan di bawah 10 halaman. Tetapi apabila tapak berkembang ia menambahkan geseran dan anda melawan ciri itu lebih daripada anda mendapat manfaat daripadanya.

Dalam ekosistem JavaScript, Remix menonjol dengan menawarkan versi penghalaan berasaskan fail yang meratakan semua laluan ke dalam satu direktori dan membenarkan pengguna untuk memilih keluar daripada penghalaan berasaskan fail sepenuhnya dengan konfigurasi laluan manual.

Penghalaan berasaskan fail ialah aduan terbesar saya tentang Astro, tetapi ia adalah ciri yang sukar untuk dilepaskan. Ia dilaksanakan dalam Next.js, Nuxt.js, SvelteKit dan lain-lain. Apa yang lebih aneh ialah rangka kerja ini sebahagian besarnya tidak mempunyai pendapat tentang nama fail untuk bahagian lain aplikasi. Berbeza dengan Ruby on Rails, kebanyakan rangka kerja JavaScript memberikan anda kebebasan yang tinggi dalam nama fail dan struktur projek–kecuali untuk penghalaan. Ia adalah kes khas dan kes khas menambah kerumitan pada perisian.

Satu komponen setiap fail (jenis)

Ciri bahasa JavaScript yang sangat saya sukai ialah keupayaan untuk mentakrifkan berbilang pembolehubah, fungsi dan kelas dalam satu fail. Ini memudahkan untuk menyusun fungsi yang berkaitan tanpa perlu mengekstraknya ke fail lain sebelum masanya kerana kekangan peringkat bahasa.

Sama seperti komponen fail tunggal Vue, fail Astro membenarkan penentuan satu komponen bagi setiap fail. Ini terasa membosankan bagi saya, tetapi Astro menyediakan penyelesaian.

Astro boleh membenamkan komponen React, Vue, Svelte, Solid dan Preact yang telah dipraperlihatkan terus ke dalam templatnya tanpa memuatkan sebarang JavaScript sisi pelanggan. Komponen Preact berpasangan secara munasabah dengan Astro kerana Preact JSX lebih dekat dengan HTML berbanding React JSX. Memang menjadi janggal menguruskan kedua-dua komponen Astro dan Preact dalam projek yang sama, dan sebaik sahaja saya mula menggunakan komponen Preact, saya mendapati diri saya mengalihkan sebahagian besar UI daripada fail Astro dan ke Preact.

Pemikiran akhir tentang Astro

Jika anda seorang pengguna tegar Next.js, Nuxt atau SvelteKit dan anda berpuas hati dengan rangka kerja anda, anda mungkin tidak mendapat banyak manfaat daripada Astro. Walau bagaimanapun, jika anda ingin menghantar lebih sedikit agihan JavaScript kepada pengguna anda sambil mengekalkan DX sesuatu seperti Next.js, maka Astro mungkin sesuai untuk anda.

Astro menjurus ke arah tapak web dipacu kandungan, dan menyediakan sokongan penurunan harga di luar kotak. Kerana tumpuannya pada kandungan, ia merupakan platform pemblogan pembangun yang ideal untuk menggantikan tapak WordPress atau Hugo. Walau bagaimanapun, ia mampu lebih daripada sekadar tapak kandungan melalui ciri seperti Actions.

Walaupun saya tidak menyukai penghalaan berasaskan fail, kebimbangan terbesar saya dengan menggunakan Astro ialah potensi untuk memecahkan perubahan yang akan memaksa saya membina semula tapak saya. Alat JavaScript jauh lebih agresif dengan memecahkan perubahan daripada alatan yang anda temui dalam ekosistem bahasa lain. Oleh kerana saya sangat baru dengan Astro, saya tidak tahu berapa banyak perubahan dari satu versi utama ke versi seterusnya. Walaupun dengan kebimbangan ini, saya bercadang untuk memindahkan 5-ke-6 tapak saya dari platform lain ke Astro supaya saya boleh memanfaatkan DXnya yang terkemuka dan mengehoskan tapak tersebut dengan murah.

Atas ialah kandungan terperinci Tanggapan pertama Astro: apa yang saya suka dan tidak suka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1255
24
Enjin JavaScript: Membandingkan Pelaksanaan Enjin JavaScript: Membandingkan Pelaksanaan Apr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

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.

See all articles