[Seaside] i10n or speed?

Bert Freudenberg bert at freudenbergs.de
Mon Mar 19 12:44:35 UTC 2007


On Mar 19, 2007, at 13:34 , Philippe Marschall wrote:

> 2007/3/19, Bert Freudenberg <bert at freudenbergs.de>:
>>
>> On Mar 19, 2007, at 12:58 , Philippe Marschall wrote:
>>
>> > 2007/3/19, Bert Freudenberg <bert at freudenbergs.de>:
>> >>
>> >> On Mar 19, 2007, at 11:58 , Philippe Marschall wrote:
>> >>
>> >> > encodeForHTTP.
>> >> >
>> >> > So what do you find more important, that Seaside is fast or  
>> that is
>> >> > supports non-ascii urls?
>> >>
>> >> I'm pretty sure you could have your cake and eat it, too, if you
>> >> rewrite that method
>> >
>> > We don't do overrides anymore.
>> >
>> >> using #indexOfAnyOf: and CharacterSets, which are
>> >> very fast.
>> >
>> > You would do this as a replacement for #isSafeForHTTP? Why not  
>> just a
>> > boolean Array and lookup by #charCode?
>>
>> Because it's much faster?
>
> A lookup in a boolean Array would be
> - a bit and for #charCode
> - an small integer comparison for <
> - #at: on an array
> how much faster can you get?

A single primitive invocation for the whole string.

>> > Do you see any optimization potential in
>> > #encodeForHTTPWithTextEncoding:conditionBlock: ?
>>
>> If I'd see the code, probably.
>
> encodeForHTTPWithTextEncoding: encodingName conditionBlock:  
> conditionBlock
> 	"change dangerous characters to their %XX form, for use in HTTP  
> transactions"
>
> 	| httpSafeStream encodedStream cont |
> 	httpSafeStream _ WriteStream on: (String new).
> 	encodedStream _ MultiByteBinaryOrTextStream on: (String new: 6).
> 	encodedStream converter: (TextConverter newForEncoding:  
> encodingName).
> 	self do: [:c |
> 		(conditionBlock value: c)
> 			ifTrue: [httpSafeStream nextPut: (Character value: c charCode)]
> 			ifFalse: [
> 				encodedStream text; reset.
> 				encodedStream nextPut: c.
> 				encodedStream position: 0.
> 				encodedStream binary.
> 				cont _ encodedStream contents.
> 				cont do: [:byte |
> 					httpSafeStream nextPut: $%.
> 					httpSafeStream nextPut: (byte // 16) asHexDigit.
> 					httpSafeStream nextPut: (byte \\ 16) asHexDigit.
> 				].
> 			].
> 	].
> 	^ httpSafeStream contents.

Yep. The whole thing could be avoided for ASCII strings with a single  
#indexOfAnyOf: test. This would solve your original question, because  
as long as you do not use non-ASCII characters it would be fast.

- Bert -




More information about the seaside mailing list