SE(しがないエンジニア)のブログ

IT技術ネタ(クラウド・セキュリティ周り)が中心です!他雑記(お馬さん 他いろいろ)もあり。

WebAssemblyのいま

WebAssemblyってなんぞや?

 Webブラウザから機械語を実行するようにできる技術を指します。2年程前に現職に入社した後の社内発表で、Webネタを作成した絡みで少し調べていました。その後、時々は追っていたのですが今年からブログを始めたことも兼ねてまた調べました。

WebAssemblyとは?〜実際にC言語をブラウザで動かす〜【2019年6月版】 - Qiita

上記Qiitaの記事は今年の6月のものなので環境周り含めてかなり新しい情報でとても分かりやすいです。

どんなものに応用されているの?

当時、調べていた際はブラウザ上で動作するゲームをWebAssemblyの技術でサクサク動作させる、みたいな感じでしたが現在も変わらずという感じです。

logmi.jp

勿論、それ以外の利用シーンがあるとは思いますが5Gや敢えてまたブラウザゲームに回帰するという意味でも当技術が応用される日は近いのではないでしょうか。

動作環境を構築して C と PHP で比較してみる

下記のサイトを参考に Windows 10 1903 環境で試してみました。

WebAssembly を試してみた | ラボラジアン

【WSL入門】第1回 Windows 10標準Linux環境WSLを始めよう:ITの教室 - @IT

Windows の機能の有効化または無効化]で WSL(Windows Subsystem for Linux) をインストール。

f:id:btsn:20190831010621j:plain

 再起動後にストアで検索「WSL」と入力し Ubuntu を入手。

f:id:btsn:20190831011411j:plain

起動後は基本的に参考サイトのコマンドで進めば emscripten で C のソースをコンパイルしたものを実行できます。ちなみに、サンプルソースは10億回ループを回してそれにかかった時間を print してるだけのものです。

【Cのサンプルソース wai.c】

#include 

#include      // for clock()



int main(int argc, char ** argv) {
   /* 変数 */
   clock_t start, end;
      long l;

      start = clock();

      for (l=0; l<1000000000; l++);

      end = clock();

      printf("世界の中心でワイと叫ぶのにかかった時間: %f秒
", (double)(end - start) / CLOCKS_PER_SEC);

      return 0;

}

【Cでの実行結果】1.806秒とします

f:id:btsn:20190831015949j:plain

phpサンプルソース wai.php

Ubuntu上でphpを動作させる参考は下記を参考にしてください。PHPのインストールの際におまけで Apache もついてきます。

PHP 7.3 の最新版を Ubuntu 18.04 に apt インストールする - サーバー構築と設定 ~初心者にも分かりやすく解説~

<?php 

set_time_limit(60);

$start = microtime(true);                                                                                                                                                                                                                                               

for ($i = 0; $i &lt; 1000000000; $i++)
{
}                                                                                                                                           

$end = microtime(true);                                                                                                                                                                                                                                                 

echo "世界の中心でワイと叫ぶのにかかった時間: " . ($end - $start) . "秒";

phpでの実行結果】12.14秒とします

f:id:btsn:20190831021304j:plain

 

こんな内容で比較するのも全然参考になっていないと思うのですが、いずれにせよ差は歴然ということで。今回の場合は C が PHP より 6.5倍 速いという結果でした。他にもソースをいじって色々と楽しむのはアリだと思います。まだまだ、WebAssemblyは実用段階、というところまでには来ていない感じですが、より進化を遂げてWebブラウザの枠を超えた表現を楽しめる日を待っております!