Astro: Modern Web Geliştirme için Yeni Nesil Framework
• 4 dk okuma
Astro, modern web geliştirme dünyasında performans ve geliştirici deneyimini ön plana çıkaran yeni nesil bir framework'tür. İçerik odaklı web siteleri (bloglar, portfolyolar, dokümantasyon siteleri) için optimize edilmiş olan Astro, zero JavaScript by default yaklaşımıyla dikkat çeker.
Astro'nun Temel Felsefesi
Astro'nun arkasındaki temel fikir basittir: Kullanıcıya mümkün olduğunca az JavaScript gönderin. Geleneksel SPA (Single Page Application) framework'lerinin aksine, Astro varsayılan olarak hiç JavaScript göndermez. JavaScript sadece gerçekten ihtiyaç duyulduğunda ve sadece gerekli bileşenler için yüklenir.
Islands Architecture
Astro'nun en önemli özelliklerinden biri Islands Architecture yaklaşımıdır. Bu mimari, sayfanın çoğunun statik HTML olarak render edilmesini, sadece interaktif bileşenlerin JavaScript ile çalışmasını sağlar.
---
// Statik içerik - JavaScript yok
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
// İnteraktif bileşen - Sadece bu bileşen için JavaScript yüklenir
import Counter from '../components/Counter.vue';
---
<html>
<body>
<Header />
<main>
<h1>Merhaba Dünya</h1>
<p>Bu statik içerik, hiç JavaScript gerektirmez.</p>
<!-- Sadece bu bileşen için JavaScript yüklenir -->
<Counter client:load />
</main>
<Footer />
</body>
</html>
Astro'nun Güçlü Yönleri
1. Framework Agnostic (Çerçeve Bağımsız)
Astro, birden fazla framework'ü aynı projede kullanmanıza izin verir:
---
import ReactComponent from './ReactComponent.jsx';
import VueComponent from './VueComponent.vue';
import SvelteComponent from './SvelteComponent.svelte';
---
<div>
<ReactComponent client:visible />
<VueComponent client:idle />
<SvelteComponent client:media="(max-width: 768px)" />
</div>
2. Performans Odaklı
- Zero JavaScript by Default
- Partial Hydration
- Automatic Image Optimization
- Built-in Asset Optimization
3. SEO Dostu
Astro, server-side rendering (SSR) ve static site generation (SSG) desteği ile güçlü SEO performansı sunar.
---
import { SEO } from 'astro-seo';
const title = 'Astro ile Modern Web Geliştirme';
const description = 'Performans odaklı web siteleri için Astro kullanımı';
---
<SEO
title={title}
description={description}
openGraph={{
basic: {
title: title,
type: 'website',
image: '/og-image.jpg',
},
}}
twitter={{
creator: '@DevrimMehmetp',
}}
/>
Pratik Kullanım Senaryoları
Content Collections ile Tip Güvenli İçerik Yönetimi
// src/content/config.ts
import { defineCollection, z } from 'astro:content';
const blogCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.date(),
author: z.string(),
tags: z.array(z.string()).optional(),
heroImage: z.string().optional(),
}),
});
export const collections = {
blog: blogCollection,
};
Dinamik Routing
---
// src/pages/blog/[slug].astro
import { getCollection } from 'astro:content';
export async function getStaticPaths() {
const blogPosts = await getCollection('blog');
return blogPosts.map((post) => ({
params: { slug: post.slug },
props: { post },
}));
}
const { post } = Astro.props;
const { Content } = await post.render();
---
<article>
<h1>{post.data.title}</h1>
<time>{post.data.pubDate}</time>
<Content />
</article>
Deployment ve Production
Coolify ile Deployment
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Build Optimizasyonu
import { defineConfig } from 'astro/config';
export default defineConfig({
output: 'static',
build: {
inlineStylesheets: 'auto',
},
vite: {
build: {
cssMinify: true,
minify: 'terser',
},
},
});
Astro vs Diğer Framework'ler
| Özellik | Astro | Next.js | Gatsby |
|---|---|---|---|
| Default JS | 0 KB | ~80 KB | ~50 KB |
| Hydration | Partial | Full | Full |
| Framework Support | Multi | React | React |
| Learning Curve | Düşük | Orta | Orta |
| Build Speed | Çok Hızlı | Hızlı | Yavaş |
Sonuç
Astro, özellikle içerik odaklı web siteleri için güçlü bir seçimdir. Performans, SEO ve geliştirici deneyimi açısından modern web geliştirme standartlarını yeniden tanımlamaktadır.
Astro'nun tercih edilmesi gereken durumlar
- Blog ve portfolyo siteleri
- Dokümantasyon siteleri
- Marketing ve landing page'ler
- E-ticaret vitrin sayfaları
- Kurumsal web siteleri
Astro'nun uygun olmadığı durumlar
- Yoğun interaktif uygulamalar (dashboard, admin panel)
- Real-time uygulamalar
- Karmaşık state yönetimi gerektiren SPA uygulamaları
Modern web geliştirme yaklaşımlarını benimseyen, performans odaklı ve SEO dostu projeler için Astro, 2024 ve sonrası için güçlü bir adaydır.