質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

1396閲覧

ローカルにあるHTMLファイルから、ローカルにあるZIP化したjavascriptをロードすることはできるでしょうか?

teratail_sone

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/12/26 12:10

###前提・実現したいこと
HTMLファイルとjavascriptファイルを使用して、ブラウザで表示できるHTMLレポートを生成するアプリを作成しています。
この生成したファイルサイズが大きくなりすぎる(主にjavascriptファイル)ため、ファイルサイズを小さくする目的でjavascriptファイルをzip化し、それをロードしたいと考えているのですが、zipファイルをロードする方法として、ファイル選択してもらうという方法(下記[試したこと]にコード記載しています)しかわかりませんでした。

可能であれば、ファイル選択を行う事無く、zip化していないjavascriptファイルと同じ様に自動でロードしたいのですが、そのようなことは可能でしょうか?

###該当のソースコード

html

1<html> 2 <script src="./test.js"></script> 3</html>

js

1// test.jsファイル例。このファイルサイズが大きくなりすぎるため、zip化してロードできればと考えています 2console.log('load test');

###試したこと
zip化したjavascriptファイルをロードするという目的で、下記の例が一番近いのですが、この例では「HTMLをブラウザで開く」→「zipファイルを選択する」という必要があるため、可能であれば「zipファイルを選択する」という手間をなくしたいです。

html

1<html> 2 <body> 3 <input type="file" id="file" name="file" multiple /><br /> 4 </body> 5 6 <script 7 src="https://code.jquery.com/jquery-3.2.1.min.js" 8 integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 9 crossorigin="anonymous"></script> 10 <script type="text/javascript" src="./jszip.min.js"></script> 11 12 <script type="text/javascript"> 13 $("#file").on("change", function(evt) { 14 console.log('change file'); 15 function handleFile(f) { 16 console.log('handleFile call'); 17 var jszip = new JSZip(); 18 jszip.loadAsync(f) 19 .then(function(zip) { 20 console.log(zip); 21 zip.forEach(function (relPath, zipEntry) { 22 jszip.file(zipEntry.name).async("string") 23 .then(function(content) { 24 console.log("eval run") 25 eval(content); 26 }); 27 }) 28 }); 29 } 30 var files = evt.target.files; 31 for (var i = 0; i < files.length; i++) { 32 handleFile(files[i]); 33 } 34 }); 35 </script> 36</html>

###補足情報(言語/FW/ツール等のバージョンなど)

  • サーバーを立てることはできません。
  • 目的はファイルサイズの縮小のため、zipである必要はありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2017/12/27 11:00

「zip化する必要があるほど巨大な動的JavaScriptファイル」についてのイメージがわきません. (もしかして何らかのログが格納されたJSONファイル?)
teratail_sone

2017/12/27 11:06

はい。ご指摘の通りログが格納された情報のファイルで、そのログでは数値データの文字列が単純に多いというものです。
think49

2018/01/09 05:10

HTMLファイルもローカルに存在するのでしょうか。ローカルファイルとするなら、ローカルファイルへのアクセス手段はfile:///, http://127.0.0.1/ のどちらでしょうか。
teratail_sone

2018/01/09 06:29

はい。HTMLファイルもローカルに存在し、アクセス手段は「file:///」です。
guest

回答4

0

ベストアンサー

PNGにjsを埋め込むという手法はいかがでしょうか。

ググれば(js png 圧縮)実装方法がいくつか出てきます。
これならFile Apiの制約である「ユーザーによるファイル指定」が不要となり、
画像読み込み時に自己解凍、実行が可能となるでしょう。
zipと同じdeflate圧縮となるので、そこそこの圧縮になると思います。

問題は1GBクラスのPNGデータ処理だとおもうのですが、
単体ファイルでの運用が厳しい場合は、
PNGを細かく分割してメモリ管理を行う必要がありそうです。

投稿2018/01/10 10:01

so87

総合スコア764

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail_sone

2018/01/15 08:23

ご回答ありがとうございます。 理想的です。この方法を用いたいと思います。
guest

0

出来る出来ないで言えば理論上「可能」です. 但し, zipファイルを展開する機能はWEBブラウザは備えていないので, 別途何らかのライブラリを導入する必要があります.

しかし, お求めの「1GB」もの(ログ)データを扱う事自体が既にWEBブラウザで動作させるスクリプトの範疇を超えていると言ってよく, たとえ正しく実装できたとしても実用に耐えうるか甚だ疑問です.

むしろ, テキスト処理を得意としている他の言語でJSON(JavaScript)データを読み込み, それをHTMLファイルに変換する方針を取ったほうが建設的でしょう.

投稿2017/12/27 11:31

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail_sone

2018/01/09 04:37

ご回答ありがとうございます。 zipファイルを展開する機能自体は「JSZip」を使用しています(「試したこと」のコード内でも使用しています。ただし、ご指摘にある実用に耐えうるかは試していません。本件の解決後に調査/対策とりたいと思います)。 現状ではご指摘の「HTMLファイルに変換」という方針を取っています(質問時の文面がわかりにくくて申し訳ないです)。しかし、その結果、HTMLファイルのサイズ1GBを超えてしまう場合がでてきており、ファイルの移動やHDDの容量の面から、ファイルサイズを圧縮した方法がとれないかと検討しているところです。 現状では、ローカルにある圧縮したファイルを読み取るのに、「ファイル指定を明示的に行う」という手間をかければ可能だったのですが、非圧縮時には必要なかった手間がかかってしまうため、この手間がかからない方法があれば知りたいです(もしくはセキュリティ上の理由等でそんなことはできないという結果でも知りたいです)。
defghi1977

2018/01/09 05:27

個人的意見ですが, 「JavaScriptによる解決」にこだわるのではなく, 「圧縮された巨大ログファイルのリーダブル化」といった質題とし, 実際に**運用に際して**直面している問題を提示した上で広範な識者の意見を求めたほうが現実的な解決策が得られると思います. (文字列処理に長けた言語やツールが見つかるかもしれません) ※内容からしていかにもありそうな要件ですが, 現状ではタグ付けや質題が適切でないことで「経験者」の目に留まりにくい質問となっている気がします.
guest

0

ローカルでの動作ですよね?
であれば、ZIPにする意味はないと思いますよ。そのままでも一瞬で読めるので。

投稿2017/12/26 13:08

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail_sone

2017/12/27 10:01

早速のご回答ありがとうございました。 はい。ローカルの動作です。 ただ、ZIP化の目的はファイルサイズが大きくなりすぎる(1G以上)ことによるファイルサイズの圧縮です。 ロードについては多少時間がかかっても問題ないと考えています(zip化でロード時に解凍の時間がプラスされてでも、ファイルサイズを小さくしたいです)。
otn

2017/12/27 11:25

ディスクの残り容量が少ないと言うことですかね。そういうことならしょうが無いですが、根本的にはディスク容量拡大でしょうか。 時間については、HDDであれば圧縮した方が速いんじゃないかなと思います。 ディスク読みとり時間>>解凍時間 なので、高速化目的で圧縮したいのかと思っていました。
guest

0

手間を省いて機械化したいのであれば、ローカルにApacheを立て、gzip圧縮したファイルを用意する方法が良いと思います。

Re: teratail_sone さん

投稿2018/01/10 13:56

編集2018/01/10 13:57
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail_sone

2018/01/15 08:17

ご回答ありがとうございます。 ご指摘の通りサーバーを立てることが一番ではあるかと思うのですが、ローカルであってもサーバーを立てることが(本件に関しては)できないため、この方法を用いることはできないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問