Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

プラグインの config.ymlパースのキャッシュ生成 #1812

Closed
nanasess opened this issue Oct 5, 2016 · 2 comments
Closed

プラグインの config.ymlパースのキャッシュ生成 #1812

nanasess opened this issue Oct 5, 2016 · 2 comments
Labels
enhancement 機能追加
Milestone

Comments

@nanasess
Copy link
Contributor

nanasess commented Oct 5, 2016

プラグインの config.yml をリクエストごとに探索、パースしており、プラグインをインストール数が増加するごとにパフォーマンスが劣化してしまう

PluginServiceTest を実行し、 config.yml のみのダミープラグインを生成。処理にかかる時間を計測した。
(Windows7, SSD256GB, Corei5, メモリ8G)

以下のような修正をしています。
https://gist.github.com/nanasess/ece7de62298dea3a9924cd13da8519eb

プラグイン無し

./vendor/bin/phpunit tests/Eccube/Tests/Service/PluginServiceTest.php
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.

Configuration read from C:\Users\user\git-repos\ec-cube\phpunit.xml.dist

.initLocale: 0.11902379989624
initSession: 0.0045011043548584
initRendering: 0.0070009231567383
initProvider: 0.035006999969482
initMailer: 0.0040009021759033
initDoctrine: 0.46609306335449
initSecurity: 0.32506513595581
initServiceProvider: 0.057511806488037

...snip
Time: 7.72 seconds, Memory: 12.00MB

プラグイン30個インストール時

./vendor/bin/phpunit tests/Eccube/Tests/Service/PluginServiceTest.php
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.

Configuration read from C:\Users\user\git-repos\ec-cube\phpunit.xml.dist

.initLocale: 0.12052416801453
initSession: 0.0050008296966553
initRendering: 0.0085010528564453
initProvider: 0.03850793838501
initMailer: 0.0050010681152344
initDoctrine: 0.74164891242981
initSecurity: 0.32206416130066
initServiceProvider: 0.056010961532593
initialize: 1.3077611923218
finder: 0.0045008659362793
handler: 0.50360107421875
load: 0.45759201049805

...snip
Time: 10.37 seconds, Memory: 12.00MB

解決案

プラグインのパス、 config.yml 及び event.yml を PHP ファイルでキャッシュすることで解消できると思われる。
キャッシュの更新は、プラグインの install/enable/disable/uninstall のタイミングで行う

@Yangsin Yangsin added the enhancement 機能追加 label Oct 13, 2016
@Yangsin Yangsin added this to the 3.0.12 milestone Oct 13, 2016
@nanasess
Copy link
Contributor Author

PHP でキャッシュするよう試験実装してみたところ Yaml::parse() をコールしていた Application::initDoctrine() で 3.6倍程度の性能向上が見られました
(プラグイン30個インストール時, Windows7, SSD256GB, Corei5, メモリ8G)

キャッシュ無し キャッシュ有り
1回目 0.282557011 0.072000027 3.92倍
2回目 0.263552904 0.098999977 2.66倍
3回目 0.352070808 0.076499939 4.60倍
平均 0.299393574 0.082499981 3.63倍

nanasess added a commit to nanasess/ec-cube that referenced this issue Oct 18, 2016
- EC-CUBE#1812
- debug モードではキャッシュを使用しません
- キャッシュが存在しない場合は自動的に生成します
- キャッシュの更新は、プラグインの install/enable/disable/uninstall/update のタイミングで行います
nanasess added a commit to nanasess/ec-cube that referenced this issue Oct 18, 2016
- EC-CUBE#1812
- debug モードではキャッシュを使用しません
- キャッシュが存在しない場合は自動的に生成します
- キャッシュの更新は、プラグインの install/enable/disable/uninstall/update のタイミングで行います
@Yangsin Yangsin changed the title プラグインの Yaml パースが遅い プラグインの Yamlパースのキャッシュ生成 Oct 27, 2016
@Yangsin
Copy link

Yangsin commented Oct 27, 2016

関連とみられる不具合が一部発生しており確認中です。
#1888 #1890

@Yangsin Yangsin closed this as completed Oct 27, 2016
@Yangsin Yangsin changed the title プラグインの Yamlパースのキャッシュ生成 プラグインの config.ymlパースのキャッシュ生成 Oct 28, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 機能追加
Projects
None yet
Development

No branches or pull requests

2 participants