Firefoxの再起動の遅延:インタラクティブで自動的な方法

Firefoxを長時間放置する必要がある場合があります(たとえば、重要なニュースを収集する拡張機能、組み込みのトレントクライアント、さらにはミニサーバーを実行するなど)。 時間の経過とともに、ブラウザのメモリ消費量が増加することは周知の事実です。 遅かれ早かれ、システムは不快に感じるかもしれません。 したがって、再起動タスクを保留しているブラウザに問い合わせることができると便利です。 少なくとも3種類のこのようなタスクが可能です。






1.ユーザーの要求に応じた単一の再起動



最初に、 カスタムボタン拡張機能をインストールします 。 これにより、ツールバーにボタンを作成して任意のコードを実行できます(さらに、コードには拡張権限が付与されます)。 本質的に、これはミニ拡張機能をすばやく作成するためのフレームワークです。



インストール後、ボタンを作成し、このボタンの最初の設定タブに次のコードを入力します。



  var timeout = prompt(「再起動するまでの分数を入力してください:」、「1440」);
 if(timeout){
	 window.setTimeout( "Application.restart();"、タイムアウト* 60 * 1000);
 } 


ボタンを押して呼び出されるダイアログで、再起動までの時間を分単位で入力できます。 デフォルトでは、日が設定されています。






2.ユーザーの介入なしの無条件の定期的な再起動



ブラウザが特に長期間にわたって放置されると、定期的な再起動を繰り返し行うことになります。 これを行うには、新しく作成したボタンの設定の2番目のタブ(「初期化」タブ)に次のコードを入力します。



  var timeout = 1440;  //分
 window.setTimeout( "Application.restart();"、タイムアウト* 60 * 1000); 


ブラウザーを起動するたびに、 timeout



パラメーターで指定された時間が開始されます。 繰り返しになりますが、1日に1回の再起動が定義されていますが、ユーザーは1440を他のものに置き換えることができます(誤って小さすぎる間隔(分数)を入力しないでください。そうしないと、セーフモードで結果に対処する必要があります)。



指定した期間の後ではなく、指定した時間に再起動する必要がある場合は、適切な解決策があります。






3.ユーザーの介入なしの条件付き定期再起動



前の方法に、適切な条件の1つのチェックを追加できます。 ブラウザのダウンタイムとメモリ使用量の2つを検討してください。



A.ユーザーの非アクティブ時間を確認する


この関数は1分ごとに非idleLimit



時間をチェックし、 idleLimit



パラメーター(分単位で指定)を超えると、ブラウザーが再起動します。



  var idleLimit = 60;  //分
 var idleService =
	  Components.classes ["@ mozilla.org/widget/idleservice;1"]
	 .getService(Components.interfaces.nsIIdleService);
 window.setInterval(
	関数(){
		 if(idleService.idleTime / 60000> idleLimit){
			 Application.restart();
		 }
	 }、
	 60,000
 ); 


B.メモリの量を確認する


ここではすべてが少し複雑です。 MDC検索では、このような情報を取得するための文書化されたインターフェイスは提供されませんでした。 しかし、Firefox 3.6では、 about:memory



ページが表示されました。 そのコードを分析すると、 chrome://global/content/aboutMemory.js



ファイルにchrome://global/content/aboutMemory.js



ます。このファイルは、ドキュメント化されていないいくつかのインターフェースを使用しています。 彼らの助けを借りて、あなたはそのようなコードでチャンスを取ることができます(関数は利用可能なメモリタイプを反復し、それらの少なくとも1つが設定された制限(メガバイトで指定された)を超えると、ブラウザが再起動します):



  var memoryLimit = 200;  //メガバイト
 var enumeratedReporters =
	  Components.classes ["@ mozilla.org/memory-reporter-manager;1"]
	 .getService(Components.interfaces.nsIMemoryReporterManager)
	 .enumerateReporters();
 while(enumeratedReporters.hasMoreElements()){
	 if(
		  enumeratedReporters.getNext()
		 .QueryInterface(Components.interfaces.nsIMemoryReporter)
		 .memoryUsed / 1000000
			 > memoryLimit
	 ){
		 Application.restart();
	 }
 } 


ただし、使用されるインターフェイスがオペレーティングシステムにどのように依存するかは不明です(ネットワーク上にはLinuxでabout:memory



が機能しないという参照があります)。 また、これらのインターフェースが登場したFirefoxのバージョンも不明です。 したがって、読者が以下のコードをテストし、異なるOCおよびFirefoxの異なるバージョンでそれが与えることについてコメントを書くことができたら、読者に感謝します(すでに書いた構成を繰り返さないでください):



  {
	
	 var enumeratedReporters =
		  Components.classes ["@ mozilla.org/memory-reporter-manager;1"]
		 .getService(Components.interfaces.nsIMemoryReporterManager)
		 .enumerateReporters();
	
	 var report = "";
	
	 while(enumeratedReporters.hasMoreElements()){
		 var memoryReporter =
			 enumeratedReporters.getNext()
			 .QueryInterface(Components.interfaces.nsIMemoryReporter);
			
		レポート+ =
			 memoryReporter.path + ":\ t" +
			 memoryReporter.memoryUsed / 1000000 + "\ n";
	 }
	
	アラート(レポート||「メモリ情報が利用できません。」);
	
 } catch(エラー){alert(エラー)} 


B.両方のチェックを組み合わせる


この関数は、毎分ダウンタイムをチェックします。 制限を超えると、関数は毎分メモリサイズのチェックを開始します。 この制限を超えると、ブラウザーが再起動します。



  var idleLimit = 60;  //分
 var memoryLimit = 200;  //メガバイト

 var idleService =
	  Components.classes ["@ mozilla.org/widget/idleservice;1"]
	 .getService(Components.interfaces.nsIIdleService);
 var reporterManager = 
	  Components.classes ["@ mozilla.org/memory-reporter-manager;1"]
	 .getService(Components.interfaces.nsIMemoryReporterManager);

 window.setInterval(
	関数(){
		 if(idleService.idleTime / 60000> idleLimit){
			 var enumeratedReporters = reporterManager.enumerateReporters();
			 while(enumeratedReporters.hasMoreElements()){
				 if(
				    enumeratedReporters.getNext()
				   .QueryInterface(Components.interfaces.nsIMemoryReporter)
				   .memoryUsed / 1000000
					 > memoryLimit
				 ){
					 Application.restart();
				 }
			 }		
		 }
	 }、
	 60,000
 ); 





再起動を設定する前に、ブラウザーの更新と拡張機能のチェックを無効にする(または少なくとも更新を自動化する)必要があります。追加しないと、次の再起動後に更新ダイアログがFirefoxをブロックする可能性があります。



All Articles