システム開発

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

Microsoft PowerAppsを活用してローコードで業務アプリを簡単に開発

現代のビジネス環境では、迅速な意思決定と効率的な業務運営が求められます。その中で、企業の業務プロセスをデジタル化するために、カスタムアプリの開発が重要な役割を果たしています。 しかし、従来のアプリ開発は多くの時間とリソースを必要とし、専門的なプログラミングスキルを持つエンジニアが必要です。 この課題を解決する手段として注目されているのが、「ローコード」開発です。 この記事ではそんなローコード開発に関して、代表的なツールMicrosoft PowerAppsについて解説していきたいと思います。 Microsoft PowerAppsが気になっている方 ローコード開発を行いたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばローコード開発で人気のMicrosoft PowerAppsについてその特徴が丸わかりですよ。 (more…)

3 days ago

オフショア開発におけるAI開発の実績まとめ

近年、AI技術の進展とともに、企業のデジタルトランスフォーメーション(DX)推進が急務とされ、多くの企業がAIソリューションの開発を進めています。 オフショア開発におけるAIプロジェクトは、技術的な知見と効率的な体制が求められます。 この記事では、DEHAソリューションズでのAI開発事例について紹介し、それぞれのプロジェクトで実現されたユニークな機能や開発体制についてまとめます。 オフショア開発に興味がある方 AI開発を行いたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばAI開発での具体的な事例が丸わかりですよ。 (more…)

4 days ago

ベトナム進出の日系製造業がDX化の今と今後|自動化による生産性向上

2024年現在、米中摩擦や新型コロナウイルスによるサプライチェーン混乱の影響を受け、製造業の生産拠点としてASEAN地域の需要が急速に増加しています。 その中でも特に注目されるのが、安価な労働力と豊富な人材を持つベトナムです。日系企業はこうした環境を活用し、積極的にベトナムへの進出を進めています。 しかし同時に、ASEAN域内では人件費上昇や人材確保の難しさといった課題も浮上しており、それに対応するために製造現場の自動化やDX化への関心が高まっています。 そこでここではそんなベトナムのDX化について、現状をお伝えしていきたいと思います。 ベトナム進出をお考えの方 ベトナムのDX化に興味がある方 これらに当てはまる方におすすめの記事となっています。これを読めばベトナム進出の日系企業のDX化の現状がわかるのはもちろん、今後の予測も分かりますよ。 (more…)

2 weeks ago

.NETでマイグレーション開発ならオフショアで

近年、企業のデジタルトランスフォーメーション(DX)が進む中で、ITインフラの老朽化問題も無視できなくなってきました。 レガシーシステムから新しいプラットフォームへの移行、特に.NETなどの最新フレームワークを用いたマイグレーションは、ビジネスの成長に不可欠です。 しかし、こうしたマイグレーションにはコストやリソースの確保が難しいという課題も付きまといます。ここで注目されるのがオフショア開発の活用です。 この記事では、そんな.NETによるマイグレーション開発をオフショアで実施するメリットについて詳しく解説します。 オフショア開発に興味がある方 .NETでマイグレーション開発を行いたいとお考えの方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば.NETでのマイグレーション開発をオフショア開発で行うメリットはもちろん、注意点なども丸わかりですよ。 (more…)

2 weeks ago

BIZASKとは?特徴と料金プランを徹底解説

近年、企業における生成AIの導入が進んでいますが、その中でも注目を集めるのがAIアシスタントです。 弊社のBIZASKは、OpenAIの技術を基盤にした法人向け生成AIチャットボットサービスで、企業の業務効率化を強力に支援します。 この記事では、BIZASKの特徴や料金プランについて詳しく解説します。 生成AIアシスタントサービスが気になる方 業務効率を上げたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばBIZASKの特徴が丸わかりですよ。 (more…)

3 weeks ago

クラウド型販売管理システム|導入メリットを徹底解説

クラウド型販売管理システムは、企業の販売プロセスを効率的に管理・最適化するためのソリューションで、クラウド上で提供されるのが特徴です。 従来のオンプレミス型システムとは異なり、初期投資を抑え、運用コストを削減しながらも、常に最新の機能とセキュリティ対策を利用できる点が魅力です。 この記事では、クラウド型販売管理システムのメリットと導入のポイントについて詳しく解説します。 クラウド型販売管理システムに興味がある方 販売業務を行なっている方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばクラウド型販売管理システムに関して、そのメリットなども丸わかりですよ。 (more…)

4 weeks ago