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

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

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

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

Q&A

解決済

2回答

1117閲覧

コーディングでのバグについて

salah0615

総合スコア49

JavaScript

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

0グッド

0クリップ

投稿2019/03/29 11:26

今ワーカーについて学んでいるのですが、一度正しいコードで実行して正しい結果が得られたのですが、
ここの記述を変えてみたらどうなるだろう、と思って、javascriptのコードの一部を変えてみたら、正しく動作しました。これでもいいのだな、と思っていたら、記述をどう変えても正しく動作することに気づき、挙句には、全文をコメントアウトしても正しく動作しました。ちなみにちゃんと保存もしています。
このようなことってあり得るんでしょうか笑
ちなみにこのような現象はjavascriptコードだけで、htmlの記述は変えたらきちんとウィンドウにも反映されます。

/試してみたこと/
apache配下にhtml, jsファイル、ワーカーを保存していて、apache配下にjsファイルがあると保存が適用されないと思い、一度ローカル環境に戻してからコードを変えて保存して、またapache配下に戻したが結果は同様でした。

念の為、コードも載せておきます。変えてみた事柄についても記載したのでコメントをお願いしたいです。

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <form> 7 <input id="target" type="number" value="1000000">以下: 8 <input id="x" type="number" value="7">の倍数の個数= 9 <span id="result">-</span> 10 <input id="btn" type="button" value="計算"> 11 </form> 12 <script src="workerClient.js"></script> 13</html> 14

javascript

1document.addEventListener("DOMContentLoaded", function() { 2 document.getElementById("btn").addEventListener("click", function() { 3 let worker = new Worker("worker.js"); 4 5 worker.postMessage({ 6 "target": document.getElementById("target").value, 7 "x": document.getElementById("x").value 8 }); 9 document.getElementById("result").textContent = "計算中..."; 10 worker.addEventListener("message", function(e) { 11 /*messageを受け取るのはworkerではなくこのスレッドなので、 12 self.addEventListenerに変えてみた*/ 13 14 15 document.getElementById("result").textContent = e.data; 16 }, false); 17 18 worker.addEventListener("error", function(e) { 19 document.getElementById("result").textContent = e.message; 20 }, false); 21 },false); 22}, false); 23

以下ワーカー。

javascript

1self.addEventListener("message", function(e) { 2 let count = 0; 3 for(let i = 1; i < e.data.target; i++) { 4 if(i % e.data.x === 0) { count++; } 5 } 6 postMessage(count); 7}); 8

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

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

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

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

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

m.ts10806

2019/03/29 11:52

「正しい動作」はどのような動作なのでしょうか。 コードだけで意図や仕様を全て汲み取るのは不可能です。想定する動作がなんなのかきちんと書いてください。
salah0615

2019/03/29 12:04

失礼しました。 例えば、このコードのまま実行すると、1000000 ÷ 7 で、計算ボタンを押すと、- の部分(spanタグのテキスト)が、142857となります。 例えばこの7を9に変えても同じことで、111111となります。 javascriptのコードをどのような形に変えても、ボタンを押すと同じような結果が得られてしまって困っているのです。 javascriptのコードを全てコメントアウト(全て消)しているのにも関わらずです。 もちろんページは実行のたびに更新しています。
Y.H.

2019/03/29 12:11

多分キャッシュ見てるのでは? ブラウザのキャッシュをクリア後、再度ページにアクセスするとどうなりますか?
guest

回答2

0

ベストアンサー

キャッシュじゃねーっすか?(適当)
キャッシュと言っても一口に色々あります。
多分この2つのどちらかじゃないかなと思うので調査してみてください。

  • ブラウザのキャッシュ
  • Apacheのキャッシュ

ブラウザの場合はスーパーリロードで調べてみて下さい。
Chromeならデベロッパーツールを開いてリロードボタン長押しです。

それとは別にApacheにもキャッシュが存在します。
毎回ファイルアクセスなんてしてたら秒間何百アクセスも捌けませんからね。
こちらは知ってないと結構ハマるので要注意です。

Apacheはファイルのタイムスタンプが変更されたのを認識すると、
キャッシュを捨ててファイルを読み込んでキャッシュを作ります。
ただし、VirtualBox等でLinuxマシンを立ち上げ、VirtualBoxのファイル共有設定を利用している場合、
Apacheがファイルの更新を上手く認識出来ず、CSSやJSファイルのキャッシュを捨てないというハマり方をすることがあります。
他にもDockerのファイル共有でも同じ現象が発生するのを確認していますので注意してください。

静的ファイルがキャッシュされる(ブラウザキャッシュじゃない場合)

投稿2019/03/29 12:14

miyabi-sun

総合スコア21158

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

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

0

#EnableMMAP off
#EnableSendfile off

今apacheのキャッシュについて調べてみたら、httpd.confファイルにこのような記述をしたら、キャッシュしない設定になると書いてありました。
調べたら元々この設定になっていたので、サーバーキャッシュではないと思われます。
なのでスーパーリロード(command + R)をしてみましたが、結局正しく動作してしまいました。
そこでキャッシュを全て削除したら治りました。

相談に乗ってくださったみなさま、おかげで解決しました。大変ありがとうございました。

投稿2019/03/29 13:37

salah0615

総合スコア49

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問