Fastify: Express'ten Farklılıkları ve Kullanımı

Fastify: Express'ten Farklılıkları ve Kullanımı

Fastify, Node.js için modern, hızlı ve minimalist bir web framework'üdür. Bu framework, özellikle yüksek performanslı uygulamalar için tasarlanmıştır ve Express.js ile karşılaştırıldığında önemli farklılıklar gösterir.

Fastify ve ExpressJS

İlk olarak, Fastify, HTTP sunucusu olarak hızlı ve verimli bir C++ kütüphanesi olan libuv'yi kullanır. Bu, daha az ram kullanımı, daha az CPU kullanımı ve daha hızlı yanıt süreleri sağlar. Ayrıca, Fastify, Node.js'in asenkron programlama modelini kullanır ve async/await gibi modern JavaScript özelliklerini tam olarak destekler.

İkincisi, Fastify, prettifying ve routing dahil olmak üzere bazı özellikleri Express'ten daha iyi bir şekilde yönetir. Örneğin, Fastify, dahili bir belgeleme sistemi olan ve API belgeleri oluşturmak için kullanılabilen Swagger ile entegre bir şekilde gelir. Ayrıca, Fastify, route özelliklerinde joker karakterler, kapsamlı querystring desteği ve HTTP hatalarını özelleştirme yeteneği gibi birçok özelliğe sahiptir.

Fastify için kullanım örneği:

const fastify = require('fastify')()

fastify.get('/', async (request, reply) => {
  return { message: 'Merhaba Dünya!' }
})

fastify.listen(3000, (err, address) => {
  if (err) throw err
  console.log(`Server listening on ${address}`)
});

Fastify ve Express Performans Karşılaştırması:

Test ortamı:
CPU: Intel Core i3-6006U, 2 çekirdek, 4 iş parçacığı.
RAM: 16 GB
OS: Ubuntu 18.04 WSL
Node Sürümü: 14.17.2
Express Sürüm: 4.17.2
Fastify Sürüm: 3.25.3
ApacheBench Sürümü: 2.3

ApacheBench kullanılarak 10K GET isteği atılmış. Veritabanı "mysql" ve paket olarak "mysql2" kullanılmış. Fastify Express'ten 2-3 saniye daha hızlı ve bu fark sürekli olarak devam ediyor. Ortalama olarak, Fastify'nin 6.27 saniyeye ihtiyacı varken, Express'in 8.6 saniyeye ihtiyacı var. Fastify, %27,3 daha hızlı olduğu için Fastify önde gelmiş.

Test için geçen süre.

Fastify Express'ten 1 saniyede daha fazla istek gerçekleştiriyor. Fastify, 1597.84 istek/saniye yapabilirken, Express 1166.55 istek/saniye yapabiliyor. Bu, %27 daha hızlıdır ve önde gelen yine Fastify.

Saniye başı istek test sonucu.

Kaynak: facsiaginsa.com/nodejs/comparing-fastify-vs..

Fastify, modern JavaScript özelliklerini tam olarak destekler ve hızlı bir HTTP sunucusu kullanırken, Express daha geleneksel bir yapıya sahiptir ve Node.js'in dahili HTTP modülünü kullanır. Ancak, Express, daha yaygın kullanıldığından ve daha geniş bir topluluğa sahip olduğundan, daha fazla kaynak ve örnek bulunabilir.

Son olarak, Fastify, Express'ten daha modüler bir yapıya sahiptir. Fastify, birçok özellik için ayrı eklentiler sunar ve bu eklentileri kullanarak projenizi özelleştirmeniz kolaylaşır. Bu modüler yapısı, uygulamanızın daha hızlı olmasına ve gereksiz modüllerin kullanılmamasına yardımcı olur.

Kısacası, Fastify, modern, hızlı ve minimalist bir web frameworküdür ve yüksek performanslı uygulamalar için idealdir. Express.js'ten farklı olarak, daha hızlı bir HTTP sunucusu kullanır, modern JavaScript özelliklerini tam olarak destekler, dahili swagger sistemine sahiptir, daha kapsamlı route özellikleri sunar ve daha modüler bir yapıya sahiptir.

Fastify swagger kullanım ile örneği:

const fastify = require('fastify')()

fastify.get('/', {
  schema: {
    response: {
      200: {
        type: 'object',
        properties: {
          message: { type: 'string' }
        }
      }
    }
  }
}, async (request, reply) => {
  return { message: 'Merhaba Dünya!' }
})

fastify.register(require('fastify-swagger'), {
  exposeRoute: true,
  routePrefix: '/docs',
  swagger: {
    info: {
      title: 'My API',
      description: 'API belgeleri',
      version: '1.0.0'
    },
    externalDocs: {
      url: 'https://swagger.io',
      description: 'Daha fazla bilgi için Swagger\'a göz atın'
    },
    host: 'localhost:3000',
    schemes: ['http'],
    consumes: ['application/json'],
    produces: ['application/json'],
    tags: [
      { name: 'merhaba', description: 'Merhaba rotası' }
    ]
  }
})

fastify.listen(3000, (err, address) => {
  if (err) throw err
  console.log(`Server listening on ${address}`)
})

Makalemi buraya kadar okuduğunuz için teşekkür ederim bir sonraki konuda görüşmek dileğiyle kendinize iyi bakın!