Как я разыскиваю mod_perl утечку памяти?

Вы можете добавить делегирование события на каждом уровне строки внутри обработчика. Передайте ссылку «выбранный» метод в качестве параметра обработчику и вызовите его при делегировании.

ko.bindingHandlers.dataTable = {
  init: function(element, valueAccessor, allBindingsAccessor) {
    var value = valueAccessor(),
      rows = ko.toJS(value);

    allBindings = ko.utils.unwrapObservable(allBindingsAccessor()),
      options = allBindings.dataTableOptions || {},
      $element = $(element);
    $($element).children( "tbody").on( 'click', 'tr', function () {
    		allBindings.selectCallback(this)
        if ( $(this).hasClass('selected') ) {
            $(this).removeClass('selected');
        }
    } );
    
    $element.dataTable(options);

    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
      $element.dataTable().fnDestroy();
    });


  },
  update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    var value = valueAccessor(),
      rows = ko.toJS(value);
    console.log(rows);
    $(element).find("tbody tr").remove();
    var table = $(element).DataTable();
    table.clear().draw();
    $.each(rows, function(index, row) {
      var myArray = [];
      $.each(row, function(key, value) {
        myArray.push(value)
      });
      table.row.add(myArray).draw().node()
    });
  }
}



function employee(id, firstName, lastName, phone, dept) {
  var self = this;
  this.id = ko.observable(id);
  this.firstName = ko.observable(firstName);
  this.lastName = ko.observable(lastName);
  this.phone = ko.observable(phone);
  this.dept = ko.observable(dept);
}

function model() {
  var self = this;
  this.employees = ko.observableArray('')
  this.id = ko.observable('');
  this.firstName = ko.observable('');
  this.lastName = ko.observable('');
  this.phone = ko.observable('');
  this.dept = ko.observable('');
  
 
  this.selected = function(item){
  	console.log(item);
  };
	  
  this.add = function() {
    self.employees.push(new employee(
      this.id(), this.firstName(), this.lastName(), this.phone(), this.dept()
    ));
    // console.log(ko.toJSON(self.employees))
  }
}

var mymodel = new model();

$(document).ready(function() {
  ko.applyBindings(mymodel);
  mymodel.employees.push(new employee('1', 'Joe', 'Smith', '333-657-4366', 'IT'));
  
  
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://cdn.datatables.net/1.10.4/js/jquery.dataTables.min.js"></script>
 <link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.4/css/jquery.dataTables.min.css">

<table data-bind="dataTable: employees, selectCallback:selected">
  <thead>
    <tr>
      <th>Id</th>
      <th>First</th>
      <th>Last</th>
      <th>Phone</th>
      <th>Dept</th>
    </tr>
  </thead>

  <tbody>
  </tbody>
</table>

<p style="padding-top: 20px;">
  Id:
  <input data-bind="textInput: id" />
</p>
<p>
  First:
  <input data-bind="textInput: firstName" />
</p>
<p>
  Last:
  <input data-bind="textInput: lastName" />
</p>
<p>
  phone:
  <input data-bind="textInput: phone" />
</p>
<p>
  dept:
  <input data-bind="textInput: dept" />
</p>
<p>
  <input type="button" value="add employee" data-bind="click: add" />
</p>

6
задан brian d foy 22 January 2009 в 23:13
поделиться

4 ответа

Вы смотрели на превосходный Practial mod_perl и его главу по утечкам памяти?

4
ответ дан 16 December 2019 в 21:47
поделиться

Так как Вы до оператора печати, действительно ли Вы уверены, что не загружаете никакие другие модули? Могла бы быть утечка в чужом коде, который Вы загружаете.

Что делает Вы добираетесь при выполнении этого:

package My::Handler;

use strict;
use warnings 'all';
use Data::Dumper;

sub handler : method {
  my ($class, $r) = @_;

  print "content-type: text/html\n\n<plaintext>";
  print Dumper( \%INC );
}

1;# return true:
3
ответ дан 16 December 2019 в 21:47
поделиться

Если возможно, выполняет Ваш код с Devel:: Цикл. Возможности - Вы, имеют утечку памяти где-нибудь в Вашем коде, не в mod_perl конкретно.

После того как Вы определили местоположение утечки (утечек) памяти - может быть, несколько - фиксируют их.

1
ответ дан 16 December 2019 в 21:47
поделиться
$VAR1 = {
    'XSLoader.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/XSLoader.pm',
    'mod_perl.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/mod_perl.pm', 
    'warnings/register.pm' => '/usr/local/lib/perl5/5.8.6/warnings/register.pm',
    'Apache/DBI.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/Apache/DBI.pm',
    'List/Util.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/List/Util.pm',
    'Test.pm' => '/home/jodonnell/fashion_2009//Test.pm', 
    'Apache/Server.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/Apache/Server.pm', 
    'warnings.pm' => '/usr/local/lib/perl5/5.8.6/warnings.pm',
    'DBI.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/DBI.pm',
    'Config.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/Config.pm',
    'bytes.pm' => '/usr/local/lib/perl5/5.8.6/bytes.pm',
    'Carp.pm' => '/usr/local/lib/perl5/5.8.6/Carp.pm',
    'Exporter/Heavy.pm' => '/usr/local/lib/perl5/5.8.6/Exporter/Heavy.pm',
    'Scalar/Util.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/Scalar/Util.pm',
    'vars.pm' => '/usr/local/lib/perl5/5.8.6/vars.pm',
    'Exporter.pm' => '/usr/local/lib/perl5/5.8.6/Exporter.pm',
    'strict.pm' => '/usr/local/lib/perl5/5.8.6/strict.pm',
    'Apache.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/Apache.pm',
    'constant.pm' => '/usr/local/lib/perl5/5.8.6/constant.pm',
    'overload.pm' => '/usr/local/lib/perl5/5.8.6/overload.pm',
    'AutoLoader.pm' => '/usr/local/lib/perl5/5.8.6/AutoLoader.pm',
    'Apache/Constants.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/Apache/Constants.pm',
    'Apache/Constants/Exports.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/Apache/Constants/Exports.pm',
    'Apache/Connection.pm' => '/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/Apache/Connection.pm',
    'DynaLoader.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/DynaLoader.pm', 
    'Data/Dumper.pm' => '/usr/local/lib/perl5/5.8.6/i686-linux/Data/Dumper.pm'
}; 

Похож мне, эти вещи все загружаются апачем.

0
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: