Valentino Volonghi aka Dialtone ha scritto:
Non e` mai una buona idea questa ed e` colma di vari pericoli
concernenti la sicurezza.
usato male anche JSON è pericoloso, tanto quanto qualunque chiamata via
HTTP ...
Una soluzione a questo tipo di lavoro e` definire bene un protocollo
per lo scambio di oggetti dove sia da python che da javascript vengono
scritti serializer/unserializer per ogni nuovo oggetto che ha la
necessita` di essere trasportato.
già definito dal PHP, formato serialize / unserialize di php
A conti fatti questo e` abbastanza inutile perche` nessuno ha davvero
bisogno di scambiare oggetti python con javascript vista sia l'enorme
differenza di capacita` (javascript essendo sandboxed non puo` fare un
milione di cose tipo aprire file sul filesystem, pertanto non ha senso
serializzare una classe che ha un fd aperto ad esempio).
bisogna avere un Q.I. molto basso per pensare di trasportare un oggetto
che lavora su filesystem in javascript.
Detto questo, dite di apprezzare tanto l'astrazione e vi castrate con
questa possibilità ?
Inviare un oggetto User, manipolarlo su ogni client, aggiornarlo e
salvarlo sul db o su un cookie, ad esempio, credi sia così inutile sul web ?
Non parlo di new User().name e basta, parlo anche di metodi ben definiti
anche sul client come un me.login() che se da un true autentica
l'utente, programmazione ad oggetti client tanto quanto sul server,
facile, sicuro, cos'altro dire ?
Che JSON poi non sia il massimo e` anche vero ma scambiando oggetti
semplici comprensibili da javascript funziona benissimo e ci puoi
scrivere applicazioni enormemente complesse con poca difficolta`.
no, non puoi, se vuoi avere anche la possibilità di manipolare oggetti a
polimorfismo variabile client / server (non so cosa abbia appena detto
ma è l'unica cosa che mi veniva da dire).
Le classi e la OOP la conoscete molto bene e non capisco questo
accanimento contro il trasporto di oggetti.
Che significa numeri veri senza encoding diverso?
utf8 ... in php serializzare 'à' può produrre, in charset non UTF-8,
s:1:"à"; .... in un charset UTF8 o con dati salvati in UTF8 produce
invece s:2:"à"; .... il 2 non è la length della stringa, è il numero di
bytes usati per essa. Questa caratteristica rallenta la riconversione in
UTF8 ma solo col PHP, se JS è usato con Python o C# questa "features"
non è necessaria, quindi nessun rallentamento.
Il server non serializza e sinceramente la vedo dura trasmettere dei
dati su socket senza serializzare in qualche modo.
facciamo a capirci ... la classe Pear per "serializzare" e
"deserializzare" JSON, per quanto ottimizzata, è un mostro di lentezza
perchè deve fare un char by char con non so quante regexp per ogni
stringa che incontra. La versione compilata non è quasi mai presente
negli hosts e quindi usare quella classe è un suicidio per prestazioni e
risorse.
serialize() ed unserialize() sono funzioni in-core, sempre presente,
scritte in C, rapidissime .... ergo il server lavora 1/20 ed usa 1/20
delle risorse ed è molto più veloce.
Stando a questo, usare serialize invece di JSON premette veramente di
creare applicativi enormenente complessi capaci di gestire una "enorme"
utenza.
Quando il client trasmette serializza e il server deserializza e vice
versa.
JSON comunque ha il vantaggio di avere il parser piu` veloce del mondo
lato client... Il browser che fa eval().
si, lo so, ma la PHP_Serializer ha tutti i tricks possibili per far si
che non si noti la differenza tra le due versioni e delega comunque il
compito al client, nel caso di PHP.
Che hanno le struct della versione 2.5? E come le parsi lato
javascript? Puoi fare packing/unpacking di binari in javascript con
piu` facilita` che un eval?
non ho approfondito ma pare pseudo compilino e mettano in cache e siano
più veloci di almeno un 20% rispetto le precedenti.
La facilità di un eval non mi interessa affatto quando il problema dei
siti è sempre il server e raramente i calcoli sul client.
Non mi e` chiaro cosa abbia a che fare Pyrex con questo.
Un modulo in C sicuramente più veloce del solo Python per fare una
PHP_Serializer per quest ultimo che non sprechi troppe risorse .... cosa
che ho già scritto, ma che non va per via di un.NET framework ...
Non esistono stringhe unicode che possano essere trasmesse su un
socket. Il socket e` byte oriented e unicode no (non si possono
trasmettere stringhe senza che vengano codificate in qualche modo).
Parlavo di UTF-8, errore mio.
Andrea Giammarchi
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python