
↑PNG↓SVG
関連:SVGエディタ「Boxy SVG」ショートカットや使い方メモ
SVGを作って遊び始めたらWEBサイトに使いたくなるのは必然の話
WEBサイトでSVGを表示する方法はいっぱいあるみたい
SVGを表示する方法
- HTMLにSVGタグを埋め込む
<svg> … </svg>
<object type="image/svg+xml" data="xxx.svg" width="100" height="100"></object>
<img src="xxx.svg" width="100" height="100">
clip-path: circle(100px at center);とかclip-path: url("xxx.svg");とかbackground-image:url(xxx.svg)とか?
<div style="background-image:url(xxx.svg); width:100px; height:100px;"></div>
<script>//ごにょごにょ</script>
などなど、選択肢がいっぱいなのですねSVG関連のサイトなどをチェック
実際どれを利用するかは別としても、何が一般的なのか調べておきたいところcodepenなどソースを確認できるSVG系のコードの殆どがHTMLにSVGタグを埋め込んでいますね
中にはOBJECTタグで外部SVGファイルを読み込んでいるものやシンプルなものはCSSに記述しているものもあります
codepenなんかは人にもソースを把握出来るようにとか編集も楽ですしね
そういう傾向なだけかも知れないので他も見ないとです
参考:https://blog.codecamp.jp/svg_animation_example
ふむふむ、まちまちですね
簡単なアイコンなんかはHTMLにSVGタグで書かれたものが多いですかね
svg.cssとしてキレイにまとめられたものもありますねー
今次の項目のテスト中ですが
大きなSVGなんかはHTMLにSVGタグで埋め込んだら凄い量のHTMLコードになってしまいますよね今次の項目のテスト中ですが、HTMLファイルが重い!
表示速度とかのユーザビリティより、制作側のそゆ部分も考慮しつつ選択したいですね
SVG表示方法による表示速度の差
SVG埋め込みとOBJECTタグによるSVGファイル呼び出す方法に絞って、表示速度を確認中それを考えると、先にキャッシュはどうなってる?って話になるのですが初回アクセス時と2回目以降のアクセス時でわけて検証しようかと
HTMLにSAGファイルを埋め込んだ場合
そのSVGデータはHTMLとは別でキャッシュされるのか、気になるところです
SVG表示方法による表示速度の差:簡単な検証
検証用に大きめのSVGが欲しかったので富士山の写真をsvgをInkscapeでsvgに変換したものを利用それぞれ別のHTMLファイルに記述して初回アクセスとキャッシュ込みのアスセスのロード時間を検証
数値はGoogle Chromeのデロペッパーツール(F12)のネットワークで取得できるLoad(最下部)です
初回アクセス
<OBJECT> | <svg> | |
---|---|---|
1回目 | 1.47s | 1.65s |
2回目 | 1.74s | 1.57s |
3回目 | 2.51 | 2.19s |
再読込(F5)
<OBJECT> | <svg> | |
---|---|---|
1回目 | 0.22s | 0.24s |
2回目 | 0.24s | 0.24s |
3回目 | 0.23s | 0.23s |
再読込(Ctrl + Shift + F5)
<OBJECT> | <svg> | |
---|---|---|
1回目 | 1.71s | 1.33s |
2回目 | 0.97s | 1.25s |
3回目 | 0.81s | 0.87s |
とりあえずHTMLに<svg>タグで埋め込んでもsvgデータはキャッシュ(memory cache)される事はわかった
これはHTMLファイルのキャッシュ設定に依存するのかな
.htaccessでhtml、svgともにキャッシュを有効にして試してみた
キャッシュ指定はどちらもしていない状態だったので今度は.htaccessで全部許可して試してみました<OBJECT>のResponse Headerには「Cache-Control:max-age=604800」が追加されたけど、速度やら他の挙動は一緒だった
<svg>の方も指定していない時と同じような結果となった
逆に.htaccessでhtml、svgともにキャッシュを拒否して試してみた
再読込(F5)
<OBJECT> | <svg> | |
---|---|---|
1回目 | 2.22s | .25s |
2回目 | 1.75s | 0.76s |
3回目 | 1.32s | 1.15s |
影響が出た制限がhtmlなのかsvgなのかみなくちゃいけなくなった
htaccessでhtmlのキャッシュを拒否して試してみた(svgは有効)
再読込(F5)
<OBJECT> | <svg> | |
---|---|---|
1回目 | 0.27s | 1.16s |
2回目 | 0.31s | 0.55s |
3回目 | 0.25s | 0.48s |
htaccessでsvgのキャッシュを拒否して試してみた(htmlは有効)
再読込(F5)
<OBJECT> | <svg> | |
---|---|---|
1回目 | 1.05s | 1.22s |
2回目 | 1.11s | 0.23s |
3回目 | 0.82s | 0.23s |
今のところの結論
読み込み対象として表示されるアイテムは<OBJECT>が
<svg>が

となにやらjpegの文字列のあるので念の為、jpegの拒否許可も試したけど影響はなさそうだった
いまのところ
- <OBJECT>等で外部svgファイルを指定して書いた場合はsvgのキャッシュ設定に依存
- <svg>で書いた場合はhtmlのキャッシュ設定に依存
- 拒否指定がない場合はどちらも有効にしているのと一緒
これで合ってるのかな
htmlファイルが静的なものでキャッシュ有効でもOKなら<svg>で書いてもキャッシュは有効でいられるのかな
jsで動的にしている部分はhtmlのキャッシュ有効でも問題はずないです
phpなんかでページ情報を読み込んでいるページはキャッシュ有効にできない可能性もありますね
初回の読み込み時間も大差ないのなら<OBJECT>などでsvgファイルを読み込んだほうが何かと便利かもですね
ただ、何度もやってる感じだと初回アクセス時は<svg>より<OBJECT>の方が読み込み若干遅いかな思います
結論は、よくわからんです
テストに使ったsvg画像を<OBJECT><svg>両方貼ったページを置いておきます
左が<OBJECT> 右が<svg>です
svg表示速度テスト用
0 件のコメント :
コメントを投稿