システム開発

Performance Optimization_WEBのページ表示速度改善方法

WEBページにおいてパフォーマンスの表示速度を上げることはとても重要です。

Googleの調査したデータによると、ページの表示が3秒以上掛かったサイトに対して待たずに離脱してしまうユーザーの割合は53%以上とのこと。

この記事ではそんな重要な要素であるページ表示速度について、改善するためのいくつかの方法ををご紹介したいと思います。

  • WEBページをお持ちの方
  • パフォーマンスを向上させる方法を知りたい方

これらに当てはまる方におすすめの記事となっています。これを読めばあなたのサイトの離脱率を下げる方法が分かりますよ。

改善方法①DBの抽出を最適化

パフォーマンスを最適化する時、クエリの最適化が頭に浮かぶものです。

なぜかというと、本当に動いているウェブには、データベース量がかなり大きくて、数百MBからGBまでにかかっているからです。

つまり、クエリ文は数十万のレコードがあるテーブルで抽出を実施しています。DBの抽出を実現する時、以下の方法がいくつか適用しています。

①Database index (indexing)

まず、「Indexとは?」を説明したいと思います。 Indexとはデーター型の1つ種類であり、データ表にある一定のフィールドの値を含め、該当する行目(ロー)を指します。

では、Indexを貼ってからページ表示速度がどのように改善されるのでしょうか?

例:SELECT * FROM users where name = ‘Lempi Veum’;

56.000レコードがある「users」テーブルで「name」にIndexを貼らない場合とIndexを貼っている場合で抽出して、比較しましょう。

Indexを貼っている場合の速度はあきらかに早いですね。

そしてページ表示の速度を考慮する時、DB内のフィールドでIndexを貼るべきです(できれば、DBを構築する段階から)。またIndexを貼る時は、以下の段階に優先順位をつけて対応してください。

  1. Pキー(PHP言語でLaravelは$table->increments()を使かたらPキーは自動的にIndexが貼られます。)
  2. 各テーブルの外キー
  3. 「where」文でよく使う (上述した例の通りです)

② Query cache(クエリキャッシュ)

「The query cache stores the text of a SELECT statement together with the corresponding result that was sent to the client. If an identical statement is received later, the server retrieves the results from the query cache rather than parsing and executing the statement again. The query cache is shared among sessions, so a result set generated by one client can be sent in response to the same query issued by another client.」

上記の文章がMySqlのホームページで「query cache」を定義しているものです。

複数のユーザーが同じいページにアクセスする時、抽出結果が既にcacheに保持されておきました。

そのため、他のユーザーはそのページにアクセスすると、cacheからクエリした結果を出してページの表示速度が速くなっていきます。

詳細な方法はこちらでご参考ください。

しかし MySql 5.7.20バージョンからは、query cacheが使えなくなります。 MySql 8.0バージョンから完全に除外されることになります。

その他の方法はLaravel等のフレームワークを使ってください。 cache queryを保存する為に、既にサポートしているので、とても便利です。

123$posts = Cache::remember(‘index.posts’, 30, function() {return Post::with(‘comments’, ‘tags’, ‘author’, ‘seo’)->whereHidden(0)->get();});

改善方法②課題の処理ロジックを変更する

DB内の抽出を最適化にしても、ページ表示速度があまり改善されない場合、どうすれば良いでしょうか。

今の課題で対応した方法(ロジック)を変更する方向で検討してみてください。

例えば、あるシステムの集計機能を実装しています。日間や年間をかけて膨大なデーター量で抽出しないといけません。

その時、リアルタイムにてデーター集計は大変ですよね。

一方、Cronjなら毎日・毎年等の集計が何かの作業で定期に実行され、結果を保存することができるのです。

これで、実行に時間がかかる作業は裏で実施されると思います。つまり、ユーザーが短時間で集計の結果を見ることができるということです。

このように、時間がかかるのにリアルタイムで不要になる作業は裏(underground)で実施した方が良いと思います。

cronjobを導入する前にDBのCPUの消耗


cronjobを導入した後DBのCPUの消耗

改善方法③フレームワークのサポートを活用

現在、ウェブサイトのほとんどがフレームワーク(Laravel, WordPress, CakePhp, …)で開発されています。

フレームワークなら既に最適化されているので、このメリットを活躍すれば工数が非常に削減できると思います。

Laravelで利用する場合、以下のいくつかポイントをオススメします。

Config cacheを使う

Laravel の既存コマンドを使ってキャッシュをコンフィグする:

php artisan config:cache

php artisan route:cache

php artisan view:cache


lazy loadingと eager loadingを利用する

LaravelはDBを対応する時、素晴らしいORMを提供しています。

EloquentのようにDBの各テーブルからabstracts modelを作られます。

Eloquentはeager loadingを利用する時、連携されているobject modelを全て抽出し、最初のクエリにレスポンスする為です。これはアプリケーションのレスポンスを追加されます。 

Lazy loadingは次のようにクエリします。

1234$books = App\Book::all();foreach ($books as $book) {echo $book->author->name;}

同様に、 eager loadingは次のようにクエリします。

1234$books = App\Book::with(‘author’)->get();foreach ($books as $book) {echo $book->author->name;}

適切なCacheと Sessionを利用する

Laravelではパフォマンスを最適化する時、RAMの中にCacheとsessionを保存するのが一番良い方法です。

その他に、「Redis」 や「MemcachedCache」を利用すると、sessionの抽出する速度も改善できます。

Asset bundlingを使う

Laravelでは、Laravel Mixを提供して、複数のcss/jsを同一のcss/jsにコンパイルするツールです。

そして、css/jsファイルを読み込む時、時間を短縮することができます。

まとめ

いかがでしょうか。WEBのページ表示速度を改善する方法について紹介していきました。

勿論、本日紹介紹介した方法以外にもパフォーマンスを最適化する方法が様々あります。

実用に応じて、相応しい方法を簡単に探して利用していくようにしましょう。

パフォーマンスの最適化は大切な作業でウェブサイト開発から稼働にかけてずっと対応し続ける必要があります。今回紹介した方法を参考にぜひWEBのページ表示速度を改善してみてはいかがでしょうか。

dehaでは、5年ほど前から、ベトナムオフショア開発を行っています。

ベトナムでオフショア開発を行う際の費用や、エンジニアの質を知りたい方は、無料で見積もりいたしますので、お気軽にお問い合わせください。

お問い合わせはこちらから

参考サイト

  1. 12 Tips for Laravel Performance Optimization in 2020
  2. 8.10.3.3 Query Cache Configuration

Mai Tran

Recent Posts

オフショア開発におけるテスターの役割?QAとQCの違い

オフショア開発では異なる国や地域のチームと開発を行うため、コニュニケーションロスによる品質力の低下が問題視されがちです。 そこでテスターという存在が質を確保する上で重要な役割を果たします。この記事ではそんなオフショア開発におけるテスターの役割について解説していきます。 オフショア開発に興味がある方 開発効率を上げたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばオフショア開発におけるテスターがどんなメリットをもたらすのかや、QAとQCの違いについても丸わかりですよ。 (more…)

4 days ago

生成AI活用で社内業務システム効率化のメリットや注意点

企業が競争力を維持し、業務効率を高めるために、AI(人工知能)の導入はますます重要になっています。 特に、生成AIを活用した社内業務システムの効率化は、企業の成長を促進する大きな要因となり得ます。 この記事では、生成AIを導入することによるメリットや、導入時に注意すべき点について詳しく解説します。 生成AIを活用して業務効率化を図りたい方 社内のIT人材が不足している方 生成AIの使い方を知りたい方 これらに当てはまる方におすすめの記事となっています。これを読めば生成AI活用を活用するメリットや気をつけるべきことが丸わかりですよ。 (more…)

1 week ago

【2024年版】ベトナムでERPシステム市場の現在・展望

ベトナムにおけるERP(エンタープライズ・リソース・プランニング)システム市場は、近年急速な成長を遂げています。 この急速な市場拡大は、デジタルトランスフォーメーションの推進、クラウドERPの普及、中小企業のニーズの高まりなど、さまざまな要因によって支えられています。 この記事では、ベトナムでのERP市場の現状と今後の展望について詳しく見ていきます。 ベトナムでのERP市場の現状について知りたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばERPシステム市場 の今後の展望が丸わかりですよ。 (more…)

2 weeks ago

AI技術を活用してデータドリブン経営を支援

データドリブン経営が成功するためには、膨大なデータを効果的に分析し、価値あるインサイトを引き出すことが重要です。 AI技術は、これを実現する強力なツールとして注目されています。 この記事では、AIがデータドリブン経営を支援する具体的な方法を紹介します。 データドリブン経営に興味がある方 データドリブン経営×AIの方法を知りたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばAIを活用したデータドリブン経営の方法が丸わかりですよ。 (more…)

2 weeks ago

データドリブン経営とは?DX推進でメリット、成功ポイントや注意点

デジタル変革(DX)が進む現代、企業経営において「データドリブン経営」の重要性がますます高まっています。 データドリブン経営とは、企業の意思決定や戦略立案をデータに基づいて行う経営手法です。 この記事では、データドリブン経営の概要、DX推進におけるメリット、成功のためのポイント、そして注意すべき点について解説します。 データドリブン経営に興味がある方 DX化をすすめている企業の方々 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばデータドリブン経営がどういうものなのかや、データドリブン経営を成功させるためのポイントが丸わかりですよ。 (more…)

2 weeks ago

【2024年版】ベトナムのDX市場の状況と動向

デジタルトランスフォーメーション(DX)は、企業や国の競争力を左右する重要な要素となっています。 特にベトナムは、急速な経済成長とテクノロジーの革新により、東南アジアの中で注目される存在です。 この記事では、そんなベトナムのDX市場の現状と今後の動向について、具体的なデータとトレンドを基に詳しく探っていきます。 ベトナムDX市場に興味がある方 社内のIT人材が不足している方 オフショア開発に興味がある方 これらに当てはまる方におすすめの記事となっています。これを読めばベトナムのDX市場の状況やトレンドについて丸わかりですよ。 (more…)

3 weeks ago