Skip to content

Commit 37d36e3

Browse files
authored
Translate aliases.md, autoloading.md, data.md, glosarry.md, and overview.md (#243)
1 parent 4965f50 commit 37d36e3

File tree

5 files changed

+450
-0
lines changed

5 files changed

+450
-0
lines changed

guide/id/caching/data.md

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# Caching data
2+
3+
Caching data adalah tentang menyimpan beberapa variabel PHP ke dalam cache dan mengambilnya kembali dari cache.
4+
Ini juga menjadi fondasi untuk fitur caching yang lebih lanjut, seperti [caching halaman](page.md).
5+
6+
Untuk menggunakan cache, pasang paket [yiisoft/cache](https://github.com/yiisoft/cache):
7+
8+
```shell
9+
composer require yiisoft/cache
10+
```
11+
12+
Kode berikut adalah pola penggunaan umum caching data, di mana `$cache` merujuk ke
13+
instance `Cache` dari paket tersebut:
14+
15+
```php
16+
public function getTopProducts(\Yiisoft\Cache\CacheInterface $cache): array
17+
{
18+
$key = ['top-products', $count = 10];
19+
20+
// Try retrieving $data from cache.
21+
$data = $cache->getOrSet($key, function (\Psr\SimpleCache\CacheInterface $cache) use ($count) {
22+
// Can't find $data in cache, calculate it from scratch.
23+
return getTopProductsFromDatabase($count);
24+
}, 3600);
25+
26+
return $data;
27+
}
28+
```
29+
30+
Ketika cache memiliki data yang terkait dengan `$key`, ia akan mengembalikan nilai yang di-cache.
31+
Jika tidak, ia akan mengeksekusi fungsi anonim yang diberikan untuk menghitung nilai yang akan di-cache dan dikembalikan.
32+
33+
Jika fungsi anonim membutuhkan beberapa data dari scope luar, Anda dapat meneruskannya menggunakan pernyataan `use`.
34+
35+
## Cache handlers
36+
37+
Layanan cache menggunakan handler cache yang kompatibel dengan [PSR-16](https://www.php-fig.org/psr/psr-16/) yang merepresentasikan berbagai
38+
penyimpanan cache, seperti memori, berkas, dan basis data.
39+
40+
Yii menyediakan handler berikut:
41+
42+
- `NullCache` — placeholder cache yang tidak melakukan caching nyata. Tujuan handler ini adalah menyederhanakan
43+
kode yang perlu memeriksa ketersediaan cache. Misalnya, selama pengembangan atau jika server tidak memiliki
44+
dukungan cache, Anda dapat mengonfigurasi layanan cache untuk menggunakan handler ini.
45+
Saat Anda mengaktifkan dukungan cache nyata, Anda dapat beralih menggunakan handler cache yang sesuai.
46+
Pada kedua kasus, Anda dapat menggunakan kode yang sama tanpa pemeriksaan tambahan.
47+
- `ArrayCache` — menyediakan caching hanya untuk permintaan saat ini dengan menyimpan nilai dalam sebuah array.
48+
- [APCu](https://github.com/yiisoft/cache-apcu) — menggunakan ekstensi PHP [APC](https://secure.php.net/manual/en/book.apc.php).
49+
Ini bisa dianggap sebagai opsi tercepat saat berurusan dengan cache untuk aplikasi terpusat (mis., satu
50+
server, tanpa load balancer khusus, dll.).
51+
- [Database](https://github.com/yiisoft/cache-db) — menggunakan tabel basis data untuk menyimpan data yang di-cache.
52+
- [File](https://github.com/yiisoft/cache-file) — menggunakan berkas standar untuk menyimpan data yang di-cache. Ini sangat cocok
53+
untuk menyimpan potongan data besar, seperti konten halaman.
54+
- [Memcached](https://github.com/yiisoft/cache-memcached) — menggunakan ekstensi PHP [memcached](https://secure.php.net/manual/en/book.memcached.php).
55+
Ini bisa dianggap sebagai opsi tercepat saat berurusan dengan cache di aplikasi terdistribusi
56+
(mis., beberapa server, load balancer, dll.)
57+
- [Wincache](https://github.com/yiisoft/cache-wincache) — menggunakan ekstensi PHP [WinCache](https://iis.net/downloads/microsoft/wincache-extension)
58+
([lihat juga](https://secure.php.net/manual/en/book.wincache.php)).
59+
60+
[Anda dapat menemukan lebih banyak handler di packagist.org](https://packagist.org/providers/psr/simple-cache-implementation).
61+
62+
> [!TIP]
63+
> Anda dapat menggunakan penyimpanan cache yang berbeda dalam aplikasi yang sama. Strategi umum adalah:
64+
> - Gunakan penyimpanan cache berbasis memori untuk menyimpan data kecil tetapi sering digunakan (mis., statistik)
65+
> - Gunakan penyimpanan cache berbasis berkas atau basis data untuk menyimpan data besar dan jarang digunakan (mis., konten halaman)
66+
67+
Handler cache biasanya disetel dalam [dependency injection container](../concept/di-container.md) sehingga dapat
68+
dikonfigurasi dan diakses secara global.
69+
70+
Karena semua handler cache mendukung kumpulan API yang sama, Anda dapat menukar handler cache yang digunakan
71+
dengan yang lain. Anda dapat melakukannya dengan mengonfigurasi ulang aplikasi tanpa mengubah kode yang menggunakan cache.
72+
73+
### Cache keys
74+
75+
Sebuah kunci mengidentifikasi secara unik setiap item data yang disimpan di cache. Saat Anda menyimpan sebuah item data,
76+
Anda harus menentukan kunci untuknya. Nantinya, ketika Anda mengambil item data tersebut, Anda perlu memberikan
77+
kunci yang sesuai.
78+
79+
Anda dapat menggunakan string atau nilai arbitrer sebagai kunci cache. Ketika kunci bukan string, ia akan
80+
diserialisasi menjadi string secara otomatis.
81+
82+
Strategi umum dalam mendefinisikan kunci cache adalah menyertakan semua faktor penentu dalam bentuk array.
83+
84+
Ketika aplikasi yang berbeda menggunakan penyimpanan cache yang sama, Anda harus menentukan prefiks kunci cache yang unik
85+
untuk setiap aplikasi guna menghindari konflik kunci cache.
86+
Anda dapat melakukannya dengan menggunakan dekorator `\Yiisoft\Cache\PrefixedCache`:
87+
88+
```php
89+
$arrayCacheWithPrefix = new \Yiisoft\Cache\PrefixedCache(new \Yiisoft\Cache\ArrayCache(), 'myapp_');
90+
$cache = new \Yiisoft\Cache\Cache($arrayCacheWithPrefix);
91+
```
92+
93+
### Cache expiration
94+
95+
Item data yang disimpan di cache akan tetap di sana selamanya kecuali dihapus karena beberapa kebijakan
96+
caching. Misalnya, ruang cache penuh dan penyimpanan cache menghapus data tertua.
97+
Untuk mengubah perilaku ini, Anda dapat menyetel parameter TTL saat memanggil metode untuk menyimpan item data:
98+
99+
```php
100+
$ttl = 3600;
101+
$data = $cache->getOrSet($key, function (\Psr\SimpleCache\CacheInterface $cache) use ($count) {
102+
return getTopProductsFromDatabase($count);
103+
}, $ttl);
104+
```
105+
106+
Parameter `$ttl` menunjukkan berapa detik item data dapat tetap valid di cache. Ketika Anda mengambil
107+
item data tersebut, jika waktu kedaluwarsanya telah lewat, metode akan mengeksekusi fungsi dan menyetel nilai yang dihasilkan
108+
ke dalam cache.
109+
110+
Anda dapat menyetel TTL bawaan untuk cache:
111+
112+
```php
113+
$cache = new \Yiisoft\Cache\Cache($arrayCache, 60 * 60); // 1 hour
114+
```
115+
116+
Selain itu, Anda dapat menginvalidasi kunci cache secara eksplisit:
117+
118+
```php
119+
$cache->remove($key);
120+
```
121+
122+
### Invalidation dependencies
123+
124+
Selain pengaturan kedaluwarsa, perubahan pada yang disebut sebagai **ketergantungan invalidasi** juga dapat menginvalidasi item data yang di-cache.
125+
Misalnya, `\Yiisoft\Cache\Dependency\FileDependency` merepresentasikan ketergantungan pada waktu modifikasi sebuah berkas.
126+
Ketika ketergantungan ini berubah, itu berarti ada sesuatu yang memodifikasi berkas terkait.
127+
Akibatnya, konten berkas yang usang yang ditemukan di cache harus diinvalidasi.
128+
129+
Ketergantungan cache adalah objek dari kelas turunan `\Yiisoft\Cache\Dependency\Dependency`. Ketika Anda
130+
menyimpan sebuah item data ke cache, Anda dapat menyertakan objek ketergantungan cache terkait. Contohnya,
131+
132+
```php
133+
/**
134+
* @var callable $callable
135+
* @var \Yiisoft\Cache\CacheInterface $cache
136+
*/
137+
138+
use Yiisoft\Cache\Dependency\TagDependency;
139+
140+
// Set many cache values marking both with a tag.
141+
$cache->getOrSet('item_42_price', $callable, null, new TagDependency('item_42'));
142+
$cache->getOrSet('item_42_total', $callable, 3600, new TagDependency('item_42'));
143+
144+
// Trigger invalidation by tag.
145+
TagDependency::invalidate($cache, 'item_42');
146+
```
147+
148+
Berikut ringkasan ketergantungan cache yang tersedia:
149+
150+
- `\Yiisoft\Cache\Dependency\ValueDependency`: menginvalidasi cache ketika nilai yang ditentukan berubah.
151+
- `\Yiisoft\Cache\Dependency\CallbackDependency`: menginvalidasi cache ketika hasil dari callback PHP yang ditentukan
152+
berbeda.
153+
- `\Yiisoft\Cache\Dependency\FileDependency`: menginvalidasi cache ketika waktu modifikasi terakhir berkas berbeda.
154+
- `\Yiisoft\Cache\Dependency\TagDependency`: mengaitkan item data yang di-cache dengan satu atau banyak tag. Anda dapat menginvalidasi
155+
item data yang di-cache dengan tag tertentu dengan memanggil `TagDependency::invalidate()`.
156+
157+
Anda dapat mengombinasikan banyak ketergantungan menggunakan `\Yiisoft\Cache\Dependency\AnyDependency` atau `\Yiisoft\Cache\Dependency\AllDependencies`.
158+
159+
Untuk mengimplementasikan ketergantungan Anda sendiri, turunkan dari `\Yiisoft\Cache\Dependency\Dependency`.
160+
161+
### Cache stampede prevention
162+
163+
[Cache stampede](https://en.wikipedia.org/wiki/Cache_stampede) adalah jenis kegagalan berantai yang dapat terjadi ketika sistem komputasi paralel masif
164+
dengan mekanisme cache berada di bawah beban tinggi.
165+
Perilaku ini terkadang juga disebut dog-piling.
166+
167+
`\Yiisoft\Cache\Cache` menggunakan algoritma bawaan "Probably early expiration" yang mencegah cache stampede.
168+
Algoritma ini secara acak memalsukan cache miss untuk satu pengguna sementara yang lain masih dilayani nilai dari cache.
169+
Anda dapat mengontrol perilakunya dengan parameter opsional kelima dari `getOrSet()`, yaitu nilai float bernama `$beta`.
170+
Secara bawaan, beta adalah `1.0`, yang biasanya sudah cukup.
171+
Semakin tinggi nilainya, semakin awal cache akan dibuat ulang.
172+
173+
```php
174+
/**
175+
* @var mixed $key
176+
* @var callable $callable
177+
* @var \DateInterval $ttl
178+
* @var \Yiisoft\Cache\CacheInterface $cache
179+
* @var \Yiisoft\Cache\Dependency\Dependency $dependency
180+
*/
181+
182+
$beta = 2.0;
183+
$cache->getOrSet($key, $callable, $ttl, $dependency, $beta);
184+
```

guide/id/caching/overview.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Caching
2+
3+
Caching adalah cara yang murah dan efektif untuk meningkatkan performa aplikasi.
4+
Dengan menyimpan data yang relatif statis di cache dan menyajikannya dari cache saat diminta,
5+
aplikasi menghemat waktu yang sebaliknya diperlukan untuk menghasilkan data dari awal setiap kali.
6+
7+
Caching dapat terjadi pada berbagai level dan lokasi dalam sebuah aplikasi. Di sisi server, pada level rendah,
8+
cache dapat digunakan untuk menyimpan data dasar, seperti daftar artikel terbaru yang diambil dari basis data;
9+
dan pada level yang lebih tinggi, cache dapat digunakan untuk menyimpan fragmen atau seluruh halaman web, seperti hasil rendering
10+
artikel terbaru. Di sisi klien, Anda dapat menggunakan HTTP caching untuk menyimpan konten halaman yang terakhir dikunjungi
11+
di cache browser.
12+
13+
Yii mendukung semua mekanisme caching berikut:
14+
15+
* [Data caching](data.md)
16+
* [Fragment caching](fragment.md)
17+
* [Page caching](page.md)
18+
* [HTTP caching](http.md)

guide/id/concept/aliases.md

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# Aliases
2+
3+
Anda dapat menggunakan alias untuk merepresentasikan path file atau URL sehingga Anda tidak perlu menulis path absolut atau URL secara hard-code di
4+
proyek Anda. Sebuah alias harus diawali karakter `@` agar dapat dibedakan dari path file dan URL biasa. Alias yang
5+
didefinisikan tanpa `@` di awal akan diprefiks otomatis dengan karakter `@`.
6+
7+
Aplikasi Yii bawaan memiliki beberapa alias yang sudah didefinisikan di `config/params.php`. Misalnya, alias `@public` merepresentasikan
8+
path web root; `@baseUrl` merepresentasikan URL dasar untuk aplikasi Web yang sedang berjalan.
9+
10+
## Defining aliases <span id="defining-aliases"></span>
11+
12+
Anda dapat mendefinisikan sebuah alias melalui `config/params.php` aplikasi:
13+
14+
```php
15+
return [
16+
// ...
17+
18+
'yiisoft/aliases' => [
19+
'aliases' => [
20+
// ...
21+
22+
// an alias of a file path
23+
'@foo' => '/path/to/foo',
24+
25+
// an alias of a URL
26+
'@bar' => 'https://www.example.com',
27+
28+
// an alias of a concrete file that contains a \foo\Bar class
29+
'@foo/Bar.php' => '/definitely/not/foo/Bar.php',
30+
],
31+
],
32+
];
33+
```
34+
35+
> [!NOTE]
36+
> Path file atau URL yang dialias tidak harus selalu merujuk pada file atau sumber daya yang benar-benar ada.
37+
38+
Dengan alias yang telah didefinisikan, Anda dapat menurunkan alias baru dengan menambahkan garis miring `/` diikuti satu atau beberapa segmen path.
39+
Sebagai contoh, `@foo` adalah alias akar (root), sedangkan `@foo/bar/file.php` adalah alias turunan.
40+
41+
Anda dapat mendefinisikan sebuah alias menggunakan alias lain (baik alias akar maupun turunan):
42+
43+
44+
```php
45+
'@foobar' => '@foo/bar',
46+
```
47+
48+
Parameter `yiisoft/aliases` menginisialisasi layanan `Aliases` dari [paket `yiisoft/aliases`](https://github.com/yiisoft/aliases).
49+
Anda dapat menyetel alias tambahan saat runtime menggunakan layanan tersebut:
50+
51+
```php
52+
use \Yiisoft\Aliases\Aliases;
53+
54+
public function actionIndex(Aliases $aliases)
55+
{
56+
$aliases->set('@uploads', '@root/uploads');
57+
}
58+
```
59+
60+
## Menggunakan aliases di konfigurasi <span id="using-aliases-in-configuration"></span>
61+
62+
Disarankan untuk me-resolve alias pada level konfigurasi, sehingga service menerima URL dan path sebagai string siap pakai:
63+
64+
```php
65+
<?php
66+
67+
declare(strict_types=1);
68+
69+
use Yiisoft\Aliases\Aliases;
70+
use Yiisoft\Cache\File\FileCache;
71+
72+
/* @var $params array */
73+
74+
return [
75+
FileCache::class => static fn (Aliases $aliases) => new FileCache(
76+
$aliases->get($params['yiisoft/cache-file']['fileCache']['path'])
77+
),
78+
];
79+
```
80+
81+
## Me-resolve alias <span id="resolving-aliases"></span>
82+
83+
Anda dapat menggunakan layanan `Aliases`
84+
85+
```php
86+
use \Yiisoft\Aliases\Aliases;
87+
88+
public function actionIndex(Aliases $aliases)
89+
{
90+
$foo = $aliases->get('@foo'); // /path/to/foo
91+
$bar = $aliases->get('@bar'); // https://www.example.com
92+
$file = $aliases->get('@foo/bar/file.php'); // /path/to/foo/bar/file.php
93+
}
94+
```
95+
96+
Path/URL yang direpresentasikan oleh alias turunan ditentukan dengan mengganti bagian alias akar dengan path/URL yang sesuai
97+
pada alias turunan tersebut.
98+
99+
> [!NOTE]
100+
> Metode `get()` tidak memeriksa apakah path/URL hasilnya merujuk pada file atau sumber daya yang ada.
101+
102+
103+
Alias akar juga dapat berisi karakter garis miring `/`. Metode `get()` cukup cerdas untuk menentukan bagian mana
104+
dari sebuah alias yang merupakan alias akar, sehingga dapat menentukan path file atau URL yang sesuai dengan benar:
105+
106+
```php
107+
use \Yiisoft\Aliases\Aliases;
108+
109+
public function actionIndex(Aliases $aliases)
110+
{
111+
$aliases->set('@foo', '/path/to/foo');
112+
$aliases->set('@foo/bar', '/path2/bar');
113+
114+
$aliases->get('@foo/test/file.php'); // /path/to/foo/test/file.php
115+
$aliases->get('@foo/bar/file.php'); // /path2/bar/file.php
116+
}
117+
```
118+
119+
If `@foo/bar` isn't defined as a root alias, the last statement would display `/path/to/foo/bar/file.php`.
120+
121+
122+
Jika `@foo/bar` tidak didefinisikan sebagai alias akar, pernyataan terakhir akan menghasilkan `/path/to/foo/bar/file.php`.
123+
124+
125+
## Alias bawaan <span id="predefined-aliases"></span>
126+
127+
[Aplikasi Yii](https://github.com/yiisoft/app) mendefinisikan serangkaian alias untuk mereferensikan path file dan URL yang umum digunakan:
128+
129+
- `@root` - direktori dasar dari aplikasi yang sedang berjalan.
130+
- `@assets` - direktori publik aplikasi tempat aset dipublikasikan.
131+
- `@assetsUrl` - URL direktori dasar tempat aset dipublikasikan.
132+
- `@baseUrl` - URL dasar aplikasi Web yang sedang berjalan. Bawaannya `/`.
133+
- `@npm` - direktori paket Node.
134+
- `@bower` - direktori paket bower.
135+
- `@vendor` - direktori `vendor` milik Composer.
136+
- `@public` - direktori publik aplikasi yang berisi `index.php`.
137+
- `@runtime` - path runtime aplikasi yang sedang berjalan. Bawaannya `@root/runtime`.
138+
- `@layout` - direktori berkas layout.
139+
- `@resources` - direktori yang berisi view, sumber aset, dan sumber daya lainnya.
140+
- `@views` - direktori dasar template view aplikasi.
141+

guide/id/concept/autoloading.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Class autoloading
2+
3+
Karena Yii menggunakan [Composer](https://getcomposer.org) untuk mengelola paket, Yii secara otomatis memuat kelas dari paket-paket tersebut
4+
tanpa perlu melakukan `require` file-nya secara eksplisit.
5+
Saat Composer memasang paket, ia menghasilkan sebuah [autoloader yang kompatibel PSR-4](https://www.php-fig.org/psr/psr-4/).
6+
Untuk menggunakannya, lakukan `require_once` terhadap autoloader `/vendor/autoload.php` di file entry point `index.php` Anda.
7+
8+
Anda dapat menggunakan autoloader tidak hanya untuk paket yang diinstal, tetapi juga untuk aplikasi Anda sendiri karena aplikasi Anda juga merupakan sebuah paket.
9+
Untuk memuat kelas-kelas dari namespace tertentu, tambahkan berikut ini ke `composer.json`:
10+
11+
```json
12+
{
13+
"autoload": {
14+
"psr-4": {
15+
"App\\": "src/"
16+
}
17+
}
18+
}
19+
```
20+
21+
Di mana `App\\` adalah namespace akar dan `src/` adalah direktori tempat kelas-kelas Anda berada. Anda dapat menambahkan lebih banyak sumber (source roots) jika
22+
diperlukan. Setelah selesai, jalankan `composer dump-autoload` atau cukup `composer du` dan kelas-kelas dari namespace terkait
23+
akan mulai dimuat secara otomatis.
24+
25+
Jika Anda membutuhkan autoloading khusus lingkungan pengembangan yang tidak digunakan saat menjalankan Composer dengan flag `--no-dev`,
26+
tambahkan ke bagian `autoload-dev` alih-alih `autoload`.
27+
28+
## Referensi
29+
30+
- [PSR-4: Autoloader](https://www.php-fig.org/psr/psr-4/).
31+
- [Panduan Composer tentang autoloading](https://getcomposer.org/doc/01-basic-usage.md#autoloading).

0 commit comments

Comments
 (0)