| caching | by xificurk | Cache: callbacks of load(), bulkLoad() and call() are marked as immediately invoked (#87) PHPStan then attributes checked exceptions thrown by the callback to the caller. | | | |
| caching | by dg | added Dependencies, the typed form of the dependency array (BC break) A generator whose parameter is typed Dependencies gets the object, any other keeps the array by reference. load(), save(), bulkSave(), wrap() and OutputHelper::end() accept the object as well. An array is converted to it, so an unknown key, a condition of clean() given as a dependency or a value of a wrong type now throws instead of reaching the storage. Storages still get the array. 540d3379-98ae-4924-88b3-ede8cf5a00f0 | | | |
| caching | by dg | added Psr16Storage: any PSR-16 cache can be used as Nette cache storage | | | |
| caching | by dg | RedisStorage: prevents cache stampede by a lock with a timeout A missing item is generated by one process, the others poll until it appears. The lock expires after $lockTimeout seconds (30 by default), so a crashed process does not block the item, and is released only by the process still holding it. 540d3379-98ae-4924-88b3-ede8cf5a00f0 | | | |
| caching | by dg | added RedisStorage with native support for tags, priorities and namespace cleaning | | | |
| caching | by dg | Storage::lock() replaced by optional LockingReader::readOrGenerate() (BC break) The lock spanned two calls, lock() and the write() or remove() releasing it, so a network storage could not implement it safely. Now the storage runs the generator of Cache::load() under its own lock and releases it in finally. FileStorage reads the item again under the lock, so a process that found it missing while another was generating it no longer generates it a second time. A failed generator or a missing journal leaves no empty file behind, and a generator generating its own item throws instead of waiting forever for the lock of its own process. Cache::save() with a closure is deprecated, it runs the closure without a lock. 540d3379-98ae-4924-88b3-ede8cf5a00f0 | | | |
| caching | by KminekMatej | MemoryStorage: supports Expire, Sliding, Tags and Priority dependencies (#85) | | | |
| caching | by dg | FileStorage: serialization of data can be changed by overriding serializeData() and unserializeData() [Closes #82] | | | |
| caching | by dg | FileStorage: the constructor runs a garbage collector batch limited in time instead of walking the whole cache | | | |
| caching | by dg | MemcachedStorage: a failed write triggers a warning instead of being silently ignored [Closes #71] | | | |
| caching | by dg | storages throw NotSupportedException for unsupported dependencies instead of silently ignoring them (BC break) | | | |
| caching | by Jirka F | SQLiteStorage: added support for cleaning namespace | | | |
| caching | by dg | SQLiteStorage: WAL mode for better concurrency of readers and writers | | | |
| caching | by dg | PsrCacheAdapter: validates cache keys as required by PSR-16 (BC break) | | | |
| caching | by dg | PsrCacheAdapter: getMultiple() takes advantage of bulk reading | | | |
| caching | by dg | requires Latte 3.1 | | | |
| caching | by dg | used #Deprecated | | | |
| caching | by dg | Storage::read() added return typehint (BC break) | | | |
| caching | by dg | removed legacy services names | | | |
| caching | by dg | removed compatibility for old class names | | | |
| caching | by dg | used PHP 8.4 features | | | |
| caching | by dg | requires PHP 8.4 | | | |
| caching | by dg | composer: requires nette/utils 4.1 | | | |
| caching | by dg | opened 4.0-dev | | | |
| caching | by dg | updated docs | | | |
| caching | by dg | MemcachedStorage: extending a sliding expiration stored back an item overwritten in between | | | |
| caching | by dg | cs | | | |
| caching | by dg | composer: suggests ext-memcached and psr/simple-cache 540d3379-98ae-4924-88b3-ede8cf5a00f0 | | | |
| caching | by dg | CI: DressCode checks with the dependencies installed Without vendor/ it knows nothing of the classes of the libraries, so a call of a deprecated method passes unnoticed. | | | |
| forms | by dg | netteForms: removed webalize() (BC break) | | | |
| forms | by dg | Rules: identical rule replaces the existing one (BC break) [Closes #251] | | | |
| forms | by dg | Latte: label or control rendered as a string fails with a clear exception [Closes #308] A paired {label}, a label or input with attributes and n:name need an Html element; a control returning a string from getLabel() or getControl() ended with a fatal error on a string. A plain {label} and {input} still render it. | | | |