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

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

ただいまの
回答率

89.63%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 401

salah0615

score 39

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

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

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

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <form>
        <input id="target" type="number" value="1000000">以下:
        <input id="x" type="number" value="7">の倍数の個数=
        <span id="result">-</span>
        <input id="btn" type="button" value="計算">
    </form>
    <script src="workerClient.js"></script>
</html>
document.addEventListener("DOMContentLoaded", function() {
        document.getElementById("btn").addEventListener("click", function() {
                let worker = new Worker("worker.js");

                worker.postMessage({
                        "target": document.getElementById("target").value,
                        "x": document.getElementById("x").value
                });
                document.getElementById("result").textContent = "計算中...";
                worker.addEventListener("message", function(e) { 
                            /*messageを受け取るのはworkerではなくこのスレッドなので、
                              self.addEventListenerに変えてみた*/


                        document.getElementById("result").textContent = e.data;
                }, false);

                worker.addEventListener("error", function(e) {
                        document.getElementById("result").textContent = e.message;
                }, false);
        },false);
}, false);


以下ワーカー。

self.addEventListener("message", function(e) {
        let count = 0;
        for(let i = 1; i < e.data.target; i++) {
            if(i % e.data.x === 0) { count++; }
        }
        postMessage(count);
});
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/03/29 20:52

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

    キャンセル

  • salah0615

    2019/03/29 21:04

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

    キャンセル

  • Y.H.

    2019/03/29 21:11

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

    キャンセル

回答 2

checkベストアンサー

+5

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

EnableMMAP off

EnableSendfile off

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる