Node.js AMP Optimizer Kılavuzu
Important: this documentation is not applicable to your currently selected format email!
Bu kılavuz, AMP Optimizer'ın Node.js sürümünün nasıl kurulacağını ve kullanılacağını açıklıyor.
Yükleme
Aşağıdaki komutla NPM aracılığıyla yükleyin:
npm install @ampproject/toolbox-optimizer
Kullanım
AMP Optimizer API'si, girdi olarak bir HTML dizesi alır ve HTML dizesinin optimize edilmiş bir sürümünü döndürür. Temel kullanımı şuna benzer:
const AmpOptimizer = require('@ampproject/toolbox-optimizer');
// create the AMP Optimizer instance
const ampOptimizer = AmpOptimizer.create();
const html = '<h1>Hello World!</h1>';
const optimizedHtml = await ampOptimizer.transformHtml(html);
Derleme Zamanında optimize edilmiş AMP oluşturma
Statik siteler için, sitenizi oluştururken derleme sırasında AMP sayfalarını optimize etmek en iyisidir. Bunu Gulp.js temelli bir derlemeyle nasıl entegre edeceğinize dair bir örnek aşağıda verilmiştir. Bu örnek, src klasöründeki tüm HTML dosyalarını optimize eden özel bir dönüşüm ekler:
const {src, dest} = require('gulp');
const through2 = require('through2');
const AmpOptimizer = require('@ampproject/toolbox-optimizer');
const ampOptimizer = AmpOptimizer.create();
function build(cb) {
return src('src/*.html')
.pipe(
through2.obj(async (file, _, cb) => {
if (file.isBuffer()) {
const optimizedHtml = await ampOptimizer.transformHtml(
file.contents.toString()
);
file.contents = Buffer.from(optimizedHtml);
}
cb(null, file);
})
)
.pipe(dest('dist/'));
}
exports.default = build;
İşleme zamanı
Dinamik sayfalar için, sayfaları genellikle sunucuda işlemek gerekir. Bu durumda, sayfalarınızı oluşturduktan sonra AMP Optimizer'ı çalıştırabilirsiniz. Aşağıda, bir Express.js sunucusuna örnek bir entegrasyon verilmiştir. AMP Optimizasyonunu bir Express yönlendiriciye entegre etmenin bir yolu, onu şablonlar oluşturulduktan sonra bir geri aramada çalıştırmaktır:
const express = require('express');
const router = express.Router();
const AmpOptimizer = require('@ampproject/toolbox-optimizer');
const ampOptimizer = AmpOptimizer.create();
router.get('/', (req, res) => {
const locals = {title: 'Express with AMP Optimizer'};
res.render('index', locals, async (err, html) => {
const optimizedHtml = await ampOptimizer.transformHtml(html);
res.send(optimizedHtml);
});
});
module.exports = router;
Önemli: İşleme gecikmelerini önlemek için sunucuda AMP Optimizer'ı kullanırken bir CDN veya önbelleğe alma ayarladığınızdan emin olun.
Yapılandırma
AMP Optimizer, çoğu durumda iyi çalışan makul bir varsayılan yapılandırma sağlar. Ancak, dönüşümler belirli kullanım durumları için özelleştirilebilir. Mevcut tüm seçeneklerin bir listesini burada bulabilirsiniz.
Birkaç önemli seçenek aşağıda verilmiştir:
- AMP çalışma zamanı ve bileşenleri için uzun dönemli kararlı URL'ler etkinleştirmek için
lts: true
- Detaylı hata ayıklama çıkışları için
verbose: true
. AMP standart metninin neden kaldırılamadığını belirlemek için özellikle iyi. imageOptimizer
: belirli bir görüntü kaynağı adına srcset URL'lerini hesaplamak için bir fonksiyon sağlayarak otomatik görüntü srcset oluşturmayı etkinleştirir. Fonksiyon,src
görüntüsünün verilen genişliğe sahip bir sürümüne işaret eden bir URL döndürmelidir. Görüntü yoksa, yanlış bir değer döndürür. Sonraki bölümde bununla ilgili daha fazla bilgi bulabilirsiniz.
Görüntü Optimizasyonu
AMP Optimizer, yerleşim
tanımına göre belirli bir amp-img
için srcset
değerleri oluşturabilir. Bunun çalışması için, görüntünün src
değerini ve bir width
değerini yeniden boyutlandırılmış bir srcset
kaynak değeriyle eşleyen bir fonksiyon sağlamanız gerekir. Görüntü yeniden boyutlandırma, AMP Optimizer tarafından gerçekleştirilmez ve ya derleme sırasında (ör. Statik siteler için) ya da thumbor gibi bir görüntü barındırma hizmeti aracılığıyla gerçekleştirilmesi gerekir.
Görüntü genişliğini src
değerine ekleyen bir örnek uygulamayı burada görebilirsiniz:
const ampOptimizer = AmpOptimizer.create({
// parameters are the amp-img `src` and the `width` of the to be generated srcset source value
imageOptimizer: (src, width) => {
// we cannot rename if the image does not have a file extension
const index = src.lastIndexOf('.');
if (index === -1) {
// return null means we won't generate a srcset source value for this width
return null;
}
const prefix = src.substring(0, index);
const postfix = src.substring(index, src.length);
return `${prefix}.${width}w${postfix}`;
};
})
AMP Optimizer, bu uygulamayı kullanarak aşağıdaki amp-img
bildirimlerini dönüştürecektir:
<!-- Injects srcset for responsive layout -->
<amp-img
src="image1.png"
width="400"
height="800"
layout="responsive"
></amp-img>
<!-- Ignores existing srcset -->
<amp-img
layout="fill"
srcset="image-1x.png 1x,
image-2x.png 2x"
></amp-img>
değer, yukarıdaki şekilden aşağıdakine dönüşecektir:
<!-- Injects srcset for responsive layout -->
<amp-img
src="image1.png"
width="400"
height="800"
layout="responsive"
srcset="image1.470w.png 470w, image1.820w.png 820w, image1.1440w.png 1440w"
></amp-img>
<!-- Ignores existing srcset -->
<amp-img
layout="fill"
srcset="image-1x.png 1x,
image-2x.png 2x"
></amp-img>
İpucu: layout=responsive
kullanırken minimum görüntü boyutlarını belirtmek için width
ve height
özniteliğini kullanın. Örneğin, mobil cihazdaki tam çerçeve ana görüntü için genişliği width=320
olarak belirtin.
-
Written by @sebastianbenz