にしし ふぁくとりー:西村文宏 個人サイト

Presented by Nishishi via Movable Type. Last Updated: 2022/06/27. 11:08:43.

Sakura Scope (2016年11月)

ちょっと倒錯気味な、ただの日記です。(^^;)
これはやばいと思われた場合は、お早めに閲覧を中止されることをお勧め致します。

読み込みが凄まじく遅い外部スクリプトを、何もかも読み終えた最後に読み込ませる方法

アクセス解析スクリプトやブログパーツ追加スクリプトなど、外部から提供されるスクリプトをウェブページ内で読み込みたい場合があります。
その外部サーバの反応速度が速ければ何も問題はないのですが、混雑していたり非力だったりして数十秒くらい経たないとデータが送られてこないような反応速度の遅いサービスもあります。
そのような読み込み速度の遅いスクリプトを普通にscript要素を使って読み込ませていると、ウェブページの読み込み完了までに時間がかかってしまいます。

HTML末尾に書いたりasync属性を付加しても、ブラウザの「読み込み中」アニメーションは続いてしまう

その手のスクリプトは、たいてい </body> タグの直前あたり(=HTMLの最後の方)に記述していたり、script要素にasync属性を付加して非同期で読み込むよう指定しているでしょうから(下記ソース参照)、実際にウェブページを閲覧しているユーザには何ら影響はないかも知れません。

<script type="text/javascript" src="超遅い外部スクリプトのURL" async></script>

しかし、たとえそれらの方法で読み込むように記述していても、「ウェブページ全体の読み込みがなかなか完了しない」という状況では、ブラウザが「読み込み中」のアニメーション(※)をずっと表示し続けるために「なんか重たいページだな」と思われてしまう可能性もあります。
もしかしたら、検索サイトから「遅いページ」だと認識されてしまって何らかの検索上の不利益もあるかも知れません。

※最近のブラウザであれば、ウェブページ名が表示されるタブの左端で、くるくる回転する円形のアイコンが見えますよね。読み込みが完了した時点で、そのページのファビコン(favion)に変わるアイコンです。あのくるくる回転するアニメーションが見えているうちは「読み込みが完了していない」と認識しますよね? なので、たとえ見える範囲の描画が完了していたとしても「なんか重たいページだな」と思われる可能性がありそうです。

画像などのオブジェクトも含めた全ての読み込みが完了した後で、遅い外部スクリプトの読み込みを開始する

というわけで、そのような凄まじく遅いスクリプトは、ウェブ上の画像なども含めたあらゆるオブジェクトを全て読み込み終えた後で読み込み始めるように記述しておくと良さげな気がします。
例えば、以下のように記述します。(jQueryを使う場合)

<script>
   $(window).load(function () {
      var tooheavy = document.createElement("script");
      tooheavy.setAttribute("src", 'http://超遅い外部スクリプトのURL/');
      tooheavy.setAttribute("type", "text/javascript");
      tooheavy.setAttribute("async", "async");
      document.getElementsByTagName("head")[0].appendChild(tooheavy);
   });
</script>

上記のように、jQueryで $(window).load(function () {; ~~~ }); のように記述すると、この内側に書いたスクリプトはウェブ上の画像などのオブジェクトも含めた全てを読み込み終えてから実行されます。

この方法で読み込ませると、このスクリプトの読み込みが始まるよりも前にブラウザは「読み込み中」のアニメーションを終わらせるので(たぶん)、このスクリプト自体の読み込みが遅くても「重たいページ」には見られないと思います。
もちろん、このスクリプトが生成する何らかの要素が表示されるのは遅いわけですけども。(^_^;) そこはどうしようもないので、せめてブラウザの「読み込み中」アニメーションが終わったあとから読み込ませることで、「なかなか読み込みが完了しないページだな」とは思われないようにすると、気分的に良い気がします。(^_^;)

(補足) jQueryを使わずにJavaScriptだけで書く場合

なお、jQueryを使わずに以下のように記述しても同じです。

<script>
   window.onload = function(){
      var tooheavy = document.createElement("script");
      tooheavy.setAttribute("src", 'http://超遅い外部スクリプトのURL/');
      tooheavy.setAttribute("type", "text/javascript");
      tooheavy.setAttribute("async", "async");
      document.getElementsByTagName("head")[0].appendChild(tooheavy);
   }
</script>

ただ、上記の場合はwindowのloadイベントで実行される内容を上書きすることになるので、同じページで読み込まれている他のスクリプトに同様の記述(window.onload = ~)があった場合には、最後に記述された1つしか実行されない(参考)ので注意が必要です。(jQueryの方なら全部実行してくれます。)

Windows10にも各ソフトがどれくらいのバッテリを消費しているかを一覧表示する機能がある

iPhoneなどのiOS端末や、NexusなどのAndroid端末には、各アプリがどれくらいのバッテリを消費しているかを一覧表示する機能があります。それを見ることで、バッテリ消費量の多いアプリの設定を見直したり起動頻度を減らしたりすることで、バッテリ消費量を抑えることができます(少なくともバッテリ消費量を減らすための検討ができます^^;)。

このような、「過去に動作していたソフトウェア(アプリ)がどれくらいの電力を消費しているのか」は、Windows10にも表示する機能があったんですね。(下図参照)

Windows10で「アプリによるバッテリーの使用」機能を使えば、各ソフトウエアのバッテリ消費量が一覧で分かる

上図は、私の仕事用Win10 PCで、過去一週間のアプリ別バッテリ消費量を出したところです。
この手の機能は「どうせストアアプリに限定されているんだろう」と思っていたのですが、見てみるとそうでもありませんでした。昔のWin32ソフトもちゃんとリストに挙がっていました。ストアアプリに限定せずに全部を含めて表示可能なんですねえ。
(しかし、Firefoxが62%とは……。^^; まあ、ブラウザは頻繁に使いますからね……。^^;)

Windows10で各アプリのバッテリ消費量一覧を出す方法

このWindows10上でのソフトウェアのバッテリ消費量一覧を出す方法はとても簡単で、下記の4ステップの通りです。

  1. Windows10スタートメニューから[設定]を出す
  2. 設定メニューで[システム]項目を押す
  3. システムメニューで[バッテリー]項目を押す
  4. バッテリー画面内で[アプリによるバッテリーの使用]リンクを押す

以下に、画面イメージ付きで操作手順を記しておきます。

1. スタートメニューの「設定」

まず、スタートメニュー内にある「設定」ボタンを押します。
「設定」は、たいてい「電源」の上にあります。
(以前のWindows10では「設定」というラベルも付加されていましたが、Anniversary Update以後は歯車のアイコンだけになりました。)

2. 「システム」項目

設定ウインドウが開いたら、次に「システム」項目を押しします。

Windows10の「設定」で「システム」を選択

3. 「バッテリー」項目

設定のシステムページが開くと下図のようになります。左側にメニューがあるので「バッテリー」という項目名を探して、そこを押します。

Windows10の「設定」で「バッテリー」を選択

4. [アプリによるバッテリーの使用]リンク

バッテリーページが開くと下図のようになります。バッテリ残量などが表示されています。ここに、[アプリによるバッテリーの使用]というリンクがありますから、そこを押します。

Windows10の「設定」で「アプリによるバッテリーの使用」を選択

各ソフトウェアのバッテリ消費量一覧が表示される

すると、冒頭でも紹介した、各ソフトウェアがどれくらいのバッテリ(電力)を消費しているのかを示す『アプリによるバッテリーの使用』ページが表示されます。
黄色矢印の部分をクリックすれば、計測期間を選択できます。下図の場合は「1週間」になっています。

Windows10の「アプリによるバッテリーの使用」機能

なかなか面白いです。
もし、起動した記憶のないソフトウェアがバッテリを消費しているようなら、そのソフトの常駐を解除するなどの操作をすると良いでしょう。
バックグラウンドで動作するソフトウェアは何もWinodws10の機能だけではありませんから。何らかのソフトをインストールしたときや、周辺機器のドライバをセットアップした際に、常駐するツールが勝手にインストールされているケースも多々あると思います。バッテリの消費が早いと思うなら特に、確認しておくと良さそうです。

関連日記:
Windows10で外出モバイル通信時にUpdateのダウンロードが自動実行されるのを防ぐ「従量制課金ネットワーク」の設定方法(2016年03月27日)
Windows10で強制再起動を回避できるアクティブ時間の設定方法(2016年10月20日)
Windows10に付属のTwitterアプリの背後機能が便利(2016年01月15日)
Windows10のスタートメニューは面積を縦横に大きく広げてアプリを一望できるようにすると便利(2016年01月22日)
Windows10のスタートメニューの実体がある場所と追加方法(2016年02月05日)

Excelで常に絶対参照されたいセルには固有の名前を付けておくと便利かも知れない

Excelでセル番号を含む計算式をコピーした場合、セルの参照方法はデフォルトでは相対参照になります。
しかし、セルに固有の名称を付加しておき、その名称を使って計算式を書けば、デフォルトの参照方法は絶対参照になります。
つまり、常に絶対参照で参照されたいセルには固有の名称を付けておけば、その後の操作が楽になります。Excelファイルを複数人で共有する場合にも操作ミスがなくて便利かもしれません。

Excelで、特定のセルに固有の名前を付与する方法

Excelのワークシートで特定のセルを選択しているとき、画面左上にはセルの番号が表示されています。下図左側では「B1」というセル名が表示されています。
この部分をクリックして任意の文字列を入力すれば、そのセルに固有の名前を付与できます。
下図右側では「桜」という名称を入力しています。

Excelで特定のセルに固有の名前を付与する

これで、これ以降はこの「B1」セルを「桜」という名前で参照できます。この固有の名前は計算式にも使えるので、「=桜+B2」みたいな計算式にもできます。
税率とかのセルに「税率」という名称を付けておくと、計算式が分かりやすくなるメリットもあると思います。
このようにセルに固有の名前を付けた場合、参照方法が絶対参照になる副作用(?)があります。

セルに固有の名称を付加しておくとデフォルトで絶対参照になる例

下図では「B1」セルに固有の名前「さくら」を付加してあります。
そして、そのセルと複数のセルとでかけ算を実行しています。

Excelで特定のセルに付与した固有の名前を計算式に使うと絶対参照になる

このとき、「C3」セルには計算式として「=さくら*B3」と入力してあります。
これを下方向にコピーすると、「さくら」セルだけは絶対参照で、「B3」セルは相対参照としてコピーされるため、

  • 手動入力したC3セルの内容: =さくら*B3
  • C3をコピーしたC4セルの内容: =さくら*B4
  • C3をコピーしたC5セルの内容: =さくら*B5

……というように、計算式内の「さくら」部分だけは変わらずにコピーされます。
このようにしておけば、複数人でセルを編集するような場合や、Excel初心者にファイルを渡す場合などで、他人がセルB1(さくら)を含む計算式を新たに加えるようなとき、このセルだけは常に絶対参照で参照できるようにできます。
なかなか便利な気がします。

セルに固有の名称を付けなかった場合に計算式をコピーするとどうなるか

Excelでは、デフォルトのセルの番号(名称)を計算式に書いた場合、そのままでは相対参照になります。
例えば「=A1*100」と書いたセルを下方向にコピーすれば、「=A2*100」、「=A3*100」、「=A4*100」などのように参照するセルが下方向に(行番号が)相対的に変化します。
同様に、右方向にコピーすれば、「=B1*100」、「=C1*100」、「=D1*100」のように参照するセルが横方向に(列番号が)相対的に変化します。

計算式でセルを相対参照のままにしたために、おかしくなった例

計算式の中で常に固定的に参照したいセルがあるにも関わらず、デフォルトの相対参照のままにしたために、計算結果がおかしく(意図しないものに)なった例が下図です。

Excelでセル番号を含む計算式をコピーするとデフォルトでは相対参照になる

C3セルには、「=B1*B3」を入力しているので、100×1が実行されて、結果100が表示されています。
これを下方向に単純にコピーすると……、

  • 手動入力したC3セルの内容: =B1*B3 (※「100」×「1」になるので計算結果は100)
  • C3をコピーしたC4セルの内容: =B2*B4 (※「かけ算↓」×「2」になるので計算結果はエラー)
  • C3をコピーしたC5セルの内容: =B3*B5 (※「1」×「3」になるので計算結果は3)

……のように、かけ算の計算式で使われているすべてのセルが相対的に移動するため、意図しない計算結果になります。
このようなことを防ぐには、セル「B1」を絶対参照にするよう計算式を書いておきます。

計算式でセルを絶対参照にすることで、コピーしても参照セルを変化させなくする方法がある

で、Excelでは「$」記号を使うことで、セルを絶対参照させることができます。下図だと意図通りの計算結果になっています。

Excelでセル番号を含む計算式をコピーする際に絶対参照にするにはセル番号に「$」記号を加える

C3セルには、「=$B$1*B3」と入力しているので「B1」セルだけは絶対参照になっています。
これを下方向にコピーすると……、

  • 手動入力したC3セルの内容: =$B$1*B3
  • C3をコピーしたC4セルの内容: =$B$1*B4
  • C3をコピーしたC5セルの内容: =$B$1*B5

……このように、計算式をコピーしてもセル「B1」だけは絶対参照として固定したままコピーされます。これなら意図した結果になります。

※ここでは下方向にしかコピーしないので、「$B$1」ではなく「B$1」とだけ書いても可。(その場合、横方向にコピーした場合は相対参照になります。)

問題は、このような絶対参照にするためには、計算式を書くたびにセル番号に「$」記号を加えなければならない点です。
その事実を知らない初心者がワークシートを引き継いで編集する場合には、ちょっと困るかも知れません。

セルの固有名称を計算式に使えば、デフォルトで絶対参照になる

そこで便利なのが、冒頭で紹介した「セルに固有の名前を付けておく方法」です。
セルに固有の名称を付けておいて、計算式内でもその固有の名前を使えば常に絶対参照になりますから。

もっとも、セルに固有の名前が付与されていても、計算式内でセル番号を使えば(デフォルトでは)相対参照になるわけですけども。(^_^;)
計算式を書くときに、参照セルをマウスで選択したときには、セル番号ではなくセルに付与されている固有の名前が使われます。

Excelでセルに固有名称を付与していても、セル番号を使って計算式を書けばデフォルトの参照方法になる
▲セルに固有の名前が付与されているとき、セル固有の名前を計算式に使えば絶対参照になる。ただし、セル番号でセルを参照できなくなるわけではないので、セル番号を使えばデフォルトの参照方法(=$記号なしなら相対参照で、$記号があれば絶対参照)になる。

というわけで、セルに固有の名前を付与すれば、その名前を計算式に使ったときにはデフォルトで絶対参照になるよ、という話でした。

◇(参考記事)『Excel:セルに「名前」をつけると作業が超ラクに! 意外と知らない数式入力の便利ワザ』(GetNavi)

2016年11月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

他の月

--- 当サイト内を検索 ---