• ベストアンサー

グローバルな関数は可能でしょうか。

お世話になります。 いくつものページで、同じメニューを表示するための関数、つまり、メニューを表示するような関数についてです。 いくつものページで同じメニューを使うとき *.jsファイルを読み込むことにより可能ですが、 それぞれのページで毎回読み込むための時間が必要になっているようです。 そこで、最初に開くページ-index.html-で、読み込めば、それから次のページでは、読み込まなくても良いようにできないものでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がるです。 > 私のようなものの発想としては、最初のindex.htmlで、メニューの*.jsを読み込んだとき、キャッシュフォルダへ、DLし、その後は、このキャッシュフォルダから*.jsを読み込む方法はと、考えてしまうのですが、 そういう概念とも違うものでしょうか。 ですねぇ。基本的に、HTTPにせよ、その上に乗っかっているJavaScriptにせよ、「サーバに対して何かをお願いする」ためのものなので。 で、キャッシュデータに対する依頼は「クライアントに対するお願い」なので、かなり毛色が異なってきてしまいます。 なので、運がいいと「JavaScriptがサーバに投げたリクエストに対する回答(レスポンス)が"変化ないから自分のキャッシュみてちょ"」っていう風になる可能性が0ではないのですが…といった程度になります。 JavaScript自体に「自前のキャッシュ覗いてね」っていう命令は、私が覚えているかぎりではなかったかと思います(っていうか0.5歩ほど間違えるとセキュリティホール生むような実装になるので多分存在しにくいです)。 と、こんな感じで回答になりますでしょうか?

rqg2010
質問者

お礼

お早うございます。 >JavaScriptがサーバに投げたリクエストに対する回答(レスポンス)が"変化ないから自分のキャッシュみてちょ"」っていう風になる わかったような気がします。 たくさん調べても、このようなことを実施することについての記載を見つけることができないことからしても無理なことかな。 >0.5歩ほど間違えるとセキュリティホール生むような実装になるので そうですか、こういうことが、セキュリティーホールを生むことにつながるものですか。 わかったような、でも、まだ、イメージ的にぼんやりそんなものかと、いう感じですが。 いろいろとご丁寧にありがとうございました。

その他の回答 (4)

  • NTJ
  • ベストアンサー率44% (46/103)
回答No.5

横槍ですが・・・ > *.jsファイルを読み込むことにより可能ですが、 > それぞれのページで毎回読み込むための時間が必要になっているようです。 スクリプトファイルは非常に小さなもので、また、ほぼ確実にキャッシュされています。(キャッシュさせなくするのに苦労するほどです) 時間が掛かっている部分はスクリプトファイルの読み込みではなく、その実行結果の「メニューを生成する部分」ではないかと思われます。 おそらく、かなり凝ったポップアップするフロートメニューなど作成されているのではないか思います。 見かけ上確かに「カッコイイ」ですが、その「カッコイイ」を生成する為に、クライアントのPCへかなりの負担を掛けていると思われます、 「読み込みが重い」のか「表示の処理が遅い」のかの比較は簡単です。 「自分のPC上に置いている場合は早く、サーバへアップすると遅くなる」のであれば「読み込みが重い」のであり、「何れでも遅い」のならば、スクリプトの作りに問題があります。 恐らく後者であろうと思いますが。 生成のスクリプト内容を見直して、軽量なスクリプトになるよう工夫してみてください。 もし・・・どうしても現在のまま進めたいのであれば・・・ 皆様のご指摘のようにメニュー部分を別フレームへ切り出すか、Ajax の導入が必要になるでしょう。 あたしとしてはメニュー部分+IFRAMEのindex.htmlを作成し、メニューでの遷移結果はIFRAME内へ表示する構造をお勧め致します。 (ってか、個人的な好みに過ぎませんが。)

rqg2010
質問者

お礼

NTJさん、お早うございます。 >Ajax の導入が必要になるでしょう。 このようなことも知りませんでした、この先もっと調べてみます。 >あたしとしてはメニュー部分+IFRAMEのindex.htmlを作成し、 IFRAMEと、いう手もあったのですよね。htmlを勉強し始めたころちょっといじってみてそのままでしたが、また、やってみます。 どうも、ご貴重な意見をありがとうございました。

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.4

メニューの部分だけを別フレームにしてはだめなのでしょうか? 上下または左右2分割フレーム構成で、どちらか片方のフレームをメニューフレームとして*.jsが読み込まれるソースをおくと。 これならメニューフレームを読む一回だけですむと思います。

rqg2010
質問者

お礼

Kuppycatさん、お早うございます。 >メニューの部分だけを別フレームにしてはだめなのでしょうか? 単純なことで、気がつきませんでした。 このようにすればよいわけですよね。 ただ、左右フレーム分割をすると、ページの下方まで分割されたままなので、フレーム分割は、止めてページをレイアウトしてきた経緯があるので。 でも、また、考え直してみます。 どうも、語貴重な意見をありがとうございました。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 拝見しているかぎりでは、グローバルな変数というよりもキャッシュの印象を強く受けるのですが(表示側で「毎回読み込み」をしたくない、ってニュアンスですよね?)。 結論からすると「ブラウザ依存&基本的には難しい」になります。 もともと、HTTPはそういう部分であまり親切に作られていないので&基本的にHTTPは「サーバ側の挙動」基準なので、「クライアント側でキャッシュするかしないか」などは「指示を与える」以上のことが出来ない、って事情もあります。 うまくいけば「JavaScriptでのアクセスでキャッシュを使ってくれる可能性」を否定しないではないのですが。 以上、ちと否定的見解で恐縮ですが。

rqg2010
質問者

お礼

がるさん、レスありがとうございます。 >表示側で「毎回読み込み」をしたくない と、そのとおりです。 >結論からすると「ブラウザ依存&基本的には難しい」になります。 そうですか。 >うまくいけば「JavaScriptでのアクセスでキャッシュを使ってくれる可能性」を否定しないではないのですが。 この辺りのことが、全くわからないものですので、 私のようなものの発想としては、最初のindex.htmlで、メニューの*.jsを読み込んだとき、キャッシュフォルダへ、DLし、その後は、このキャッシュフォルダから*.jsを読み込む方法はと、考えてしまうのですが、 そういう概念とも違うものでしょうか。 できましたら、また、ご教示お願いします。

noname#22259
noname#22259
回答No.1

Frame ---------------------- window─location │ └document─Link Frame─document─Link

rqg2010
質問者

お礼

xepharosさん、早速レスありがとうございます。 しかし、私にとってオブジェクトツリーではないかな と、いうことくらいの理解で、(これも間違っているのではないかと)、具体的にどのようにしたものか、わかりません。 グローバルな関数が可能では、ある。と、いうようには受け止めましたので、なんとか、具体的にもう少しご教示いただけないでしょうか。

関連するQ&A