I wanted to compare the performance improvements of two promising patches:
Justin Heesemann's (on list: 2008.04.29)
http://detached.gigo.com/rc/gb/cCronKdx/performance-jh1.diff
and
A.L.E.C.'s r1363 sorting optimization (on list: 2008.05.08)
http://trac.roundcube.net/changeset/1363?format=diff&new=1363
<http://trac.roundcube.net/changeset/1363?format=diff&new=1363>
Our IMAP server (Courier) basically supports sorting, so I thought I
just disable the feature to simulatine a Non-Sorting IMAP server.
I did so, by removing 'SORT' from the config.
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES */SORT/* QUOTA IDLE"
But after that, on RC's interface I can't click the list headers to
trigger sorting.
If I understand well RC should be able to sort anyway, if the IMAP
server can't
then on the PHP way.
I dig deeper, and found that in /program/steps/mail/func.inc (line 137)
in the *rcmail_message_list* function
there's something illogical for me:
if ($IMAP->get_capability('sort') && in_array($col, $a_sort_cols))
This way if the IMAP server doesn't support sorting RC does no sorting,
but it's not intended to be that way, right?
After removing the first condition everything worked OK with and without
IMAP sort.
So?
--
*Horváth Balázs* *Balázs Horváth*
Fejlesztési vezető Development Manager
WG Informatika Kft. WG Informatics Ltd.
H-1123 Budapest, Alkotás utca 53. (MOM Park, "D torony" II.em)
Mobil: +36/20-971-2904
E-mail: horvath.balazs(a)wgi.hu <mailto:horvath.balazs@wgi.hu>
Web: http://wgi.hu <http://wgi.hu?adid=145>
--- 8< --- detachments --- 8< ---
The following attachments have been detached and are available for viewing.
http://detached.gigo.com/rc/k7/eWr4B3jU/horvath_balazs.vcf
Only click these links if you trust the sender, as well as this message.
--- 8< --- detachments --- 8< ---
_______________________________________________
List info: http://lists.roundcube.net/dev/
Hello,
When working with RC under IE, I've noticed that displaying messages
obtained through HttpRequest (for example when doing sort by column),
It takes quite long time in comparison to other browsers to generate
the output. It's also pretty hard on resources.
After doing some investigation, I've found out that most resource
consuming operation is appendChild to tbody of message list in
message_list.insert_row.
When I looked up the issue and asked here and there, It came out
that appending elements to other element first and then doing
single append of that element to document DOM gives quite
a performance advantage under IE (not so noticeable in other
browsers). Here's a test that somebody pointed me to:
http://m8y.org/tmp/table.xhtml
I did a few alterations to message list generation code
and It actually gave positive results.
Unfortunately when doing row appends off DOM, there are
problems with accessing certain nodes (IE stops parsing
js on these attempts). So I had to use getElementsByTagName
in a certain situation which is visible in patch below.
The patch below is only for purpose of showing the problem and
possible solution and it surely requires more work.
First part in php code contains also profiling code to show
the difference.
The same method could be applied to other lists (contact list
for example).
You can comment out contents of prepare_message_list and
flush_message_list to see how long it takes in case of
former code.
In my case it came from above 7 seconds down to 1.2 second.
I'm interested in Your opinions on this.
There are still other significant performance problems under IE,
like hangups when unloading page. I will try to investigate that issue
too...
diff -ur roundcube/program/include/rcube_json_output.php roundcube_test/program/include/rcube_json_output.php
--- roundcube/program/include/rcube_json_output.php 2008-05-19 13:19:16.000000000 +0200
+++ roundcube_test/program/include/rcube_json_output.php 2008-05-20 17:53:28.427890048 +0200
@@ -213,14 +213,18 @@
private function get_js_commands()
{
$out = '';
+ $out .= "timeslist = new Array();";
+ $out .= "time1 = new Date();\n";
if (sizeof($this->env))
$out .= 'this.set_env('.json_serialize($this->env).");\n";
-
+ $out .= "time2 = new Date();\ntimeslist[timeslist.length] = (time2 - time1);\n";
+ $out .= "time1 = new Date();\n";
foreach($this->texts as $name => $text) {
$out .= sprintf("this.add_label('%s', '%s');\n", $name, JQ($text));
}
-
+ $out .= "time2 = new Date();\ntimeslist[timeslist.length] = (time2 - time1);\n";
+ $out .= "time1 = new Date();\n";
foreach ($this->commands as $i => $args) {
$method = array_shift($args);
foreach ($args as $i => $arg) {
@@ -232,8 +236,11 @@
preg_replace('/^parent\./', '', $method),
implode(',', $args)
);
- }
+ }
+ $out .= "time2 = new Date();\ntimeslist[timeslist.length] = (time2 - time1);\n";
+
+ $out .= "times = '';\nfor (i=0; i < timeslist.length; i++) times = times+', '+timeslist[i];\nalert(times);\n";
return $out;
}
}
diff -ur roundcube/program/js/app.js roundcube_test/program/js/app.js
--- roundcube/program/js/app.js 2008-05-19 13:19:53.000000000 +0200
+++ roundcube_test/program/js/app.js 2008-05-20 18:05:14.679523480 +0200
@@ -373,7 +373,7 @@
}
// set eventhandler to message icon
- if ((row.icon = row.obj.cells[0].childNodes[0]) && row.icon.nodeName=='IMG')
+ if ((row.icon = row.obj.getElementsByTagName('TD')[0].getElementsByTagName('IMG')[0]))
{
var p = this;
row.icon.id = 'msgicn_'+row.uid;
@@ -3227,13 +3227,31 @@
}
};
+ this.prepare_message_list = function()
+ {
+ this.message_list.init_off_list();
+ };
+
+ this.flush_message_list = function()
+ {
+ this.message_list.flush_off_list();
+ };
+
// create a table row in the message list
this.add_message_row = function(uid, cols, flags, attachment, attop)
{
if (!this.gui_objects.messagelist || !this.message_list)
return false;
- var tbody = this.gui_objects.messagelist.tBodies[0];
+ if (this.message_list.off_list)
+ {
+ var tbody = this.message_list.off_list;
+ }
+ else
+ {
+ var tbody = this.gui_objects.messagelist.tBodies[0];
+ }
+
var rowcount = tbody.rows.length;
var even = rowcount%2;
diff -ur roundcube/program/js/list.js roundcube_test/program/js/list.js
--- roundcube/program/js/list.js 2008-05-19 13:19:53.000000000 +0200
+++ roundcube_test/program/js/list.js 2008-05-20 17:02:33.975237432 +0200
@@ -28,6 +28,7 @@
this.DELETE_KEY = 46;
this.list = list ? list : null;
+ this.off_list = null
this.frame = null;
this.rows = [];
this.selection = [];
@@ -145,13 +146,30 @@
this.rows[uid] = null;
},
+init_off_list: function()
+{
+ this.off_list = document.createElement('TBODY');
+},
+
+flush_off_list: function()
+{
+ this.list.replaceChild(this.off_list, this.list.tBodies[0]);
+ this.off_list = null;
+},
/**
*
*/
insert_row: function(row, attop)
{
- var tbody = this.list.tBodies[0];
+ if (this.off_list)
+ {
+ var tbody = this.off_list;
+ }
+ else
+ {
+ var tbody = this.list.tBodies[0];
+ }
if (attop && tbody.rows.length)
tbody.insertBefore(row, tbody.firstChild);
diff -ur roundcube/program/steps/mail/func.inc roundcube_test/program/steps/mail/func.inc
--- roundcube/program/steps/mail/func.inc 2008-05-19 13:19:56.000000000 +0200
+++ roundcube_test/program/steps/mail/func.inc 2008-05-20 16:46:58.855397256 +0200
@@ -310,6 +310,8 @@
$OUTPUT->command('set_message_coltypes', $a_show_cols);
+ $OUTPUT->command('prepare_message_list');
+
// loop through message headers
foreach ($a_headers as $n => $header)
{
@@ -355,6 +357,8 @@
preg_match("/multipart\/m/i", $header->ctype),
$insert_top);
}
+
+ $OUTPUT->command('flush_message_list');
}
_______________________________________________
List info: http://lists.roundcube.net/dev/
sorry i not know if I sent you the last small fix, but in case dispatch again, thank you
Change Log
Spell in: $labels['longjul'] = 'Julho';
--- 8< --- detachments --- 8< ---
The following attachments have been detached and are available for viewing.
http://detached.gigo.com/rc/Mw/MWMVEMOp/labels.inc
Only click these links if you trust the sender, as well as this message.
--- 8< --- detachments --- 8< ---
_______________________________________________
List info: http://lists.roundcube.net/dev/
Hi dev
sorry smoll fix
and added Author Nuno Costa
Best regards
_______________________________________________
List info: http://lists.roundcube.net/dev/
Nuno Costa
nuno(a)criacaoweb.net
Best Regards
--- 8< --- detachments --- 8< ---
The following attachments have been detached and are available for viewing.
http://detached.gigo.com/rc/rH/UrdMN25D/labels.inc
Only click these links if you trust the sender, as well as this message.
--- 8< --- detachments --- 8< ---
_______________________________________________
List info: http://lists.roundcube.net/dev/
Hello, Im new to Roundcube.
Is there any solution to limit the number of recipients?
I even cant find where to get it limited, i tried to edit
rcube_smtp.inc and wrote:
if (count($recipients) > 10) {
smtp_reset();
$response[] .= "Too many recipients";
return FALSE;
}
Just before the line: (around line 170)
//set recipients
foreach($recipients as $recipient)
Thank you!
Janeszka
-------------------------
Ingyen 2GB tárhely, csak a Levelem.net -nél.
Spam- és virusszűrés!
Egyedi inteligens webmail.
Gyere és próbáld ki te is!
www.levelem.net [1]
Links:
------
[1] http://www.levelem.net
_______________________________________________
List info: http://lists.roundcube.net/dev/
Greetings,
I've just noticed that the portupgrade roundcube's port overwrites the
existing db.inc.php and mail.inc.php, resetting everything to the default.
No checks were made and I had to reconfigure everything from the scratch.
Thought this might be unintentional, as the default behavior for FreeBSD
port upgrade scripts is to keep existing configs.
Best regards,
Vahan
_______________________________________________
List info: http://lists.roundcube.net/dev/
Hi,
Where is RoundCube headed as far as spell check in the HTML editor is
concerned?
There are two tickets in trac that seem to be somewhat at cross
purposes:
http://trac.roundcube.net/ticket/1484196
Suggests having TinyMCE's spell check button obey the spell check URI
from RC's config file. Also, Thomas suggests that the RC spell check
button might be able to invoke TinyMCE's spell check.
http://trac.roundcube.net/ticket/1484747
Reduced the number of buttons available in TinyMCE, including
removing the spell check button. It was suggested that Firefox and
Safari both do spell checking so it wasn't needed.
Unfortunately, IE does not do spell checking like Firefox and Safari,
so without TinyMCE's spell checking, those users don't have a way to
spell check their HTML messages.
Since Firefox and Safari's built in spell checking applies equally to
the plain text editor and the HTML editor, it seems to me that if
spell checking is worth having in one, it's worth having in the other.
But during the upgrade to TinyMCE 3.0.6 in r1308 in SVN, a number of
files used by TinyMCE's spell check are now gone. If RoundCube is to
use TinyMCE's spell check, we would have to start by making sure the
spell check plugin is present in SVN.
Thanks,
James E. Blair
Principal Email Systems Administrator
UC Berkeley - IST
_______________________________________________
List info: http://lists.roundcube.net/dev/
Hi!
One Debian user reported [0] that index.php contains the BSD license at
the top of the file while citing GPL license. Could you please correct
this in SVN?
Thanks.
[0] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477119
--
Choose variable names that won't be confused.
- The Elements of Programming Style (Kernighan & Plauger)
_______________________________________________
List info: http://lists.roundcube.net/dev/