krissell / laravel-translation-json-cache
缓存翻译JSON文件以加快访问速度。
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.3
This package is auto-updated.
Last update: 2024-09-23 23:47:32 UTC
README
当使用翻译的.json选项时,每次请求都会读取并解析json文件。本包提供了一个 artisan 命令来将解析的数据缓存为php文件,几乎与路由和配置的缓存方式相同。这提高了性能,因为无需进行JSON解析,并且可以使用opcache。实际的性能提升取决于翻译文件的大小和磁盘速度,请见下文。
安装
composer require krisell/laravel-translation-json-cache
该包会自动注册。
用法
要缓存所有翻译JSON文件(在resources/lang中),运行以下 artisan 命令
php artisan translation-json:cache
如果您的json文件发生变化,您需要再次运行此命令以使更改生效。
您还可以使用以下命令清除缓存文件
php artisan translation-json:clear
部署时运行translation-json:cache,就像运行route:cache和config:cache一样。
缓存文件存储在bootstrap/cache目录中,命名为translation-{$locale}.php。
性能提升
在2018年Macbook Pro(2.6 GHz i7)上,使用Laravel Valet,并有一个包含1500个字符串的JSON翻译文件(长度不同的真实字符串),请求期间第一次调用__("A")大约需要1.2 ms。启用此包后,相同的调用需要0.08 ms,即实际性能提升约为1 ms,考虑到简单的完整请求可能只需10 ms,这是一个很大的提升。
我已经在生产环境中使用这个解决方案了一段时间(每种语言的1500个字符串),我必须说,性能提升在那里并不明显(比较CPU图表,这当然也取决于许多其他变化)。由于我们的服务器配置使用docker和全内存磁盘,差异可能更小。请随时在其他人或不同大小的JSON文件下提供额外的测量结果。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。
未来工作
我意识到JSON选项可能不是首选的,大多数人已经使用php文件以分层方式存储其翻译数据。在这种情况下,类似的策略仍然可能在解析和遍历上节省时间,但这超出了此包的范围。您可以自由地在新的包中进一步研究这个想法!