1.现在我需要开发通用平台(mac,windows)的桌面程序,但是程序需要涉及到前端大文件(百兆左右)加密功能。我们知道node.js做计算密集型性能是很差的,那nw.js计算性能是否也很差?
迷茫2017-04-17 14:53:41
コンピューティングのパフォーマンスがどの程度なのか正確にはわかりませんし、これほど素晴らしいことはやったことがありません。しかし、nodejs
はコンピューティング集中型のタスクの処理には適していないと言っているので、nw
も同じだと思います。信じられない場合は、以下をご覧ください。< /p>
< /p>
nw.js
はnodejs
を統合します
天蓬老师2017-04-17 14:53:41
最初に atom/vscode を試して 100M ファイルを開くことができます。これらは nw と同じ Electron に基づいています。
悪いニュースは、ノードが一度に 1.4G ファイルしかロードできないことです。良いニュースは、ノード モジュールが C/C++ で記述できることです。
根本的なことはよくわからないので、これだけの情報しか提供できません。
迷茫2017-04-17 14:53:41
各機能が個別に実行されるように設計されている限り、問題はないと思います。
たとえば、単一プロセスの HTTP サーバーをローカルで起動し、システム ブラウザを呼び出してアクセスします。
>php - S 127.0.0.1:8080 -t /www
サーバーとクライアントは別々に開発されており、サーバーが停止した場合でもクライアント内の JS は実行できます。
約 100MB の暗号化ファイル。サーバーとクライアントがスタックしないようにしてください。
現時点では、ローカル サーバーで proc_open を使用してプロセスを非同期に開き、時間のかかる暗号化操作を実行することを検討できます。
ブラウザJS を使用して 10 秒間隔でポーリングし、タスクの進行状況を確認します。
NW.js を使用したことはありませんが、考え方は似ています。
PHP7 の mcrypt_blowfish を使用して、Ubuntu (i5-3230) 上で 10 MB のデータを暗号化および復号化しました。所要時間は 0.2 秒未満で、メモリの占有量は約 40 MB でした。
<?php
header('Content-Type: text/plain;charset=utf-8');
// データを暗号化する mcrypt_generic
// データを復号化する mdecrypt_generic
// http://php.net/manual/zh/function.mdecrypt-generic.php
// 暗号化記述子 $td
//キー $key
// 初期ベクトル $iv
/* データ */
$key = 'a39d0d0e2e8c360205d105f9edcc51fdf5a780ce'; // sha1( uniqid(getmypid().'_'.mt_rand().'_', true) )
$plain_text = file_get_contents('/home/eechen/note/file.txt');
/* 暗号化モジュールを開き、初期ベクトルを作成します */
// アルゴリズムとモードに対応するモジュールを開きます。成功すると暗号化記述子 (リソース タイプ) が返されます。エラーが発生した場合は FALSE が返されます。
//アルゴリズムタイプ MCRYPT_BLOWFISH、モード MCRYPT_MODE_ECB
$td = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_ECB, '');
$key = substr($key, 0, mcrypt_enc_get_key_size($td));
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$starttime = マイクロタイム(true);
/* 暗号化ハンドルを初期化します */
if (mcrypt_generic_init($td, $key, $iv) != -1) {
/* データを暗号化します */
$c_t = mcrypt_generic($td, $plain_text);
mcrypt_generic_deinit($td);
// 暗号文はバイナリデータです
//エコー '暗号文: '.bin2hex($c_t)."\n";
/* 復号化のためにバッファを再初期化します */
mcrypt_generic_init($td, $key, $iv);
$p_t = mdecrypt_generic($td, $c_t);
//データを復号化します。データの完成により、返される文字列の長さが平文の長さと等しくない場合があることに注意してください。
//エコー 'プレーンテキスト: '.$p_t."\n";
/* クリーンアップ作業を実行します */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
echo microtime(true) - $starttime."\n";
if (strncmp($p_t, $plain_text, strlen($plain_text)) == 0) {
「OK\n」をエコーします。
} それ以外 {
エコー「エラー\n」;
}