Open InviterпїЅ - Import contacts from social networking sites like Livejournal, Friendfeed, Mevio and many more - http://openinviter.com/
A little more than a year has passed since we launched the Carakan project, aimed at drastically improving Opera's ECMAScript execution performance, and it's finally time for the first labs release of Opera with the Carakan ECMAScript engine.
What we set out to implement over a year ago was, as I described in a previous post about the Carakan project, a new cross-platform bytecode interpreter for a new register-based instruction set, a new internal object model with automatic classification and inline property caching, and machine code generation. All this we've done, and then some.
The new bytecode interpreter and new object model are cross-platform, meaning they will work on any hardware platform Opera is ported to. On their own, they already give a significant performance boost compared to Futhark, the engine used in all current versions of Opera. Running on a regular desktop computer, Carakan's bytecode interpreter is around 3.5 times faster than Futhark on the Sunspider benchmark, and on embedded systems running less powerful CPUs early testing shows it to have an even greater advantage over Futhark.
For optimum performance, however, machine code generation, or JIT, is the way to go, and this is where we have focused most of our optimization work. Carakan is equipped with a hot-spot detecting JIT compiler that generates machine code that performs all but the most complex operations directly without calling the bytecode interpreter. It employs a combination of compile-time static analysis of the program and runtime profiling in the bytecode engine to optimize the generated code, focusing in particular on code that does arithmetic calculations. It also performs function inlining, both of simple built-in functions such as Math.sqrt() and String.charCodeAt() and of functions implemented in the script. Currently the JIT compiler only supports generating 32 or 64 bit x86 machine code, but support for other architectures will be added in time, starting with the ARM architecture.
But this is not all we have done in the Carakan project. I'd like to also mention two other interesting improvements that we've implemented compared to Futhark: a divided garbage collected heap, and caching of compiled scripts.
The ECMAScript language assumes the presence of a garbage collector that automatically reclaims memory occupied by objects that are no longer needed. Carakan's garbage collector is very similar to the one used in Futhark, a basic mark-and-sweep design; we've only done some smaller, but rather effective, tweaking of its performance. We have however drastically changed how we use the garbage collector. In Futhark, all memory allocated by the ECMAScript engine for scripts running in any tab was allocated from a single shared heap, and anytime the garbage collector needed to run to free up memory, it would traverse all allocated memory. The more open tabs there were, the more expensive would a garbage collection become.
In Carakan, we instead use many smaller heaps. Each document loaded in a tab, or in a frame or iframe inside another document, gets its own. Since scripts running in different documents can sometimes access each other's objects, we have support for merging two heaps into one, and for detecting when this is necessary. The advantage of this design is clear: with smaller heaps, each garbage collection is cheaper. And since we only need to run the garbage collector on heaps from which memory has been allocated, we automatically only traverse the memory of active heaps, and leave all other heaps alone. The end result is that it doesn't matter if there are 1 or 100 open tabs; when a script triggers a garbage collection, the cost is the same.
An aspect of an ECMAScript engine that performance benchmarks often don't measure is the performance of the compiler. Compared to Futhark, the Carakan compiler is much more focused on analysing the program and generating code that will execute fast, and may therefore be slightly slower in some cases. This is a trade-off we've made willingly.
Instead of the very efficient compiler in Futhark, Carakan brings caching of compiled programs. In practice this means that whenever a script program is about to be compiled, whose source code is identical to that of some other program that was recently compiled, we reuse the previous output from the compiler and skip the compilation step entirely. This cache is quite effective in typical browsing scenarios where one loads page after page from the same site, such as different news articles from a news service, since each page often loads the same, sometimes very large, script library.
Although we're nearing the release of the Carakan engine, we don't plan to stop development of it. We have plenty of ideas on smaller and larger improvements to make, and we will also port the JIT compiler to other CPU architectures.
One area where we believe we can improve greatly is in memory usage, by switching to a much more efficient object representation. Carakan will already today use less memory than Futhark in some cases, by sharing information between similar objects via the automatic object classification system and by sharing literal data using a copy-on-write scheme, but we have plans that would reduce the size of ECMAScript objects to as little as a tenth of their current size.
We will also be looking at improving the performance of machine code generated for non-arithmetic code such as property accesses, where our JIT compiler currently produces significantly less stream-lined code than it does for arithmetic calculations.
Firefox 3.5 is Now the World’s Most Popular Browser - http://thenextweb.com/2009...
конец года выдался урожайным на приятные новости. Несколько модулей CSS3 наконец стали реальными стандартами, выйдя из стадии, где каждый браузер реализует тот предварительный вариант, который ему больше нравится (а их фанаты поплёвывают на оперу, ждущую хоть какой-то определённости).
итак, самый крутой модуль — CSS3 Selectors — теперь является Proposed Recommendation, и ему остался последний шаг до W3C Recommendation.
следующий в списке CSS3 Backgrounds and Borders, который сейчас стал Candidate Recommendation. Это этап, на котором разработчики спеки официально заявляют: «пришло время воплощать идеи в коде».
ну и последний модуль — CSS Multi-column Layout, который теперь тоже Candidate Recommendation.
подозреваю, что кто-то в опере уже включил флажок в мейкфайле, чтобы в Рождественском релизе Оперы оказался давно готовый у них код для реализации обоих этих модулей-кандидатов.
p.s.: если кто не слышал, Еврокомиссия в очередной раз признала Микрософт нарушителями закона и заставила добавить в винду экран выбора браузера. Приятно, что в Евросоюзе такие законы. Приятно, что кто-то может добиться их выполнения. Даже если этот кто-то — скромная норвежская компания.
|Opera||150 000 times/second|
|Safari||127 000 times/second|
|IE||41 000 times/second|
|Firefox||37 500 times/second|
|Safari||71 000 times/second|
|Firefox||61 800 times/second|
|IE||57 000 times/second|
|Opera||55 800 times/second|
@font-face. Вообще говоря, на русском языке достаточно мало информации об опыте и нюансах использования
@font-face, поэтому этим переводом я предлагаю начать генерировать более-менее содержательное информационное поле на эту тему. Heath
@font-face. Плотина открывается. Это рассвет новой эры веб-типографики, и мы обязаны ступать в неё с осторожностью.
Many thanks to all who helped with comments, tests, and implementations! The Selectors specification was just advanced to Proposed Recommendation by the W3C Director. That means that the specification has successfully passed public review and has been sufficiently implemented to no longer need a status as Candidate Recommendation (which is also known as “call for implementations”).
Currently, the W3C members are reviewing the specification one last time. Of course, we think we have done our job well and they won't find anything wrong. They have a little over a month for that task.
However, the specification will not immediately become a W3C Recommendation at the end of the review period. That is because Selectors has normative references in its bibliography to CSS 2.1 and to the CSS Namespaces module, and so it was decided that those have to become Recommendations first. That ensures that W3C Recommendations are as stable as possible, by only depending on other Recommendations.
A bit of history: Selectors became Candidate Recommendation already in 2001, but a couple of proposed features (':contains', '::selection') were never implemented and turned out to be difficult enough that we abandoned them for now. To fix the draft with respect to those problems, a new working draft was made in 2005, which was updated one last time earlier this year.
You can see the last changes we made to the specification in the disposition of comments. Nothing major changed, but a number of descriptions were improved.
The CSS Validator implements the latest Selectors. To check a style sheet, it is enough to choose “CSS level 3” as the profile in the Web interface.
MathJax - http://www.mathjax.org/
Semantic Versioning. Tom Preston-Werner provides a name, specification and URL describing the relatively widely used Major.Minor.Patch versioning system. This is really useful—by giving something a name and a spec, people can say “this project uses semantic versioning” and skip having to explain their backwards compatibility policy in full.
Don't Forget About Email - http://www.avc.com/a_vc...
I would like to see API for capturing screenshots. http://dev.w3.org/2009...
Shared by artyСегодня я решил поглядеть, на что это будет похоже — сделать MacOS-подобный «док» в SVG, используя элементы SMIL
в опере тоже нормально работает
This looks completely terrific: Effect Games lets you create JS-based browser games, like jump’n’runs, by providing a game/ coding framework, level editor, hosting and sharing options and more. Take a look at their demos and the platformer tutorial to get an impression. [Via Andy.]
[By Philipp Lenssen | Origin: Tool to Create Browser-Based Games | Comments]
Fixing Django Management Commands. Zachary Voase proposes dramatically improving Django’s management command API for Django 1.3. I’m in favour—management commands are one of the only APIs in Django that I have to look up every single time I use. My optfunc library was written partially with management commands in mind—Zachary favours the argparse library.
Detexify LaTeX handwritten symbol recognition - http://detexify.kirelabs.org/classif...
Real time online activity monitor example with node.js and WebSocket. A neat exploration of Node.js—first hooking a “tail -f” process up to an HTTP push stream, then combining that with HTML 5 WebSockets to achieve reliable streaming.
One of the purposes of the
alt attribute is to provide alternate text that can be shown when an image cannot be displayed, either because it is missing or broken, or because the user has disabled images in their (graphical) web browser.
Most graphical web browsers do display alt text in place of missing images, but there is one notable exception: Safari and most other WebKit-based browsers (iCab, Shiira, Chrome). In those browsers, all you get when an image is missing is either a small blue icon with a question mark in it or a broken image icon.
Read full post
Posted in Browsers, Usability.
An Engineer's Guide to DNS - http://developer.yahoo.net/blog...
Language Detection: A Witch’s Brew?. The Flickr team make the case for using the Accept-Language header over IP detection to pick a site’s language, with a simple UI for switching languages in case you get it wrong. They’ve been using this for two and a half years without any significant problems.
Mark Pilgrim on IRC in a discussion about RDFa and Microdata:
When people say "I want to extend HTML in arbitrary, private, and probably proprietary ways," the appropriate answer is "fuck you" Made me laugh.
Climategate programmer diary http://broadcast.oreilly.com/2009...
Microsoft, Google and Yahoo! … introduced a competing specification interpreted as being aimed to succeed OAuth, called Web Resource Authorization Protocol, or WRAP
//--------------------------------------------- // Set up the RecvAddr structure with the IP address of // the receiver (in this example case "123.456.789.1") // and the specified port number. RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(Port); RecvAddr.sin_addr.s_addr = inet_addr("123.456.789.1");