• Home
  • Quick Start
    • Configurator
    • Download YUI 3
  • Documentation
    • User Guides
    • Examples
    • Tutorials
    • API Docs
  • Community
    • Gallery
    • Blog
    • Forums
    • YUI Theater
    • Calendar
  • Contribute
    • YUI on GitHub »
    • File a Ticket
    • View Tickets
    • Dashboard
  • Other Projects
    • YUI 2
    • YUI Compressor
    • YUI Doc »
    • YUI Builder
    • YUI PHP Loader
    • YUI Test
    • YUI Website
  • YUI
  • Blog
  • Releases

Blog: Category ‘Releases’

« Older Entries

YUI 3.10.1 Released to Fix SWF Vulnerability

Details

Due to a recently discovered SWF vulnerability, we are releasing YUI 3.10.1. Any project which is self-hosting YUI 3 .swf files should read the security bulletin and take action to resolve potential vulnerabilities on your servers.

YUI 3.10.1 is identical to 3.10.0, with the vulnerable .swf files replaced with patched files. YUI 3.10.1 also reflects fixes in our build system that prevented some files from being included in the release. No other code changes have been included with this release.

You can find YUI 3.10.1 on the CDN, as a download, and on npm.

Special thanks to Aleksandr Dobkin and Sebastian Roschke of the Google Security Team for reporting the issue.

Development continues against our current Development Schedule. Please check out the Change History Rollup for this release.

Deprecated Modules

In accordance with our Deprecation Policy, we are taking this opportunity to announce the deprecation of Simple YUI, and our intention to deprecate all .swf-related features in a future release. Stay tuned to the Contributor Mailing List for ongoing discussion on these topics.

By Andrew WooldridgeMay 14th, 2013

Yeti 0.2.22 Released

Today’s release of Yeti v0.2.22 includes improvements for testing slower browsers. In particular, we focused on the slow and sometimes flaky Android emulators hosted by Sauce Labs.

We continue to rely on Yeti in CI and we’ve fixed a few bugs along the way. Today, we run 17,202 tests in browsers on every YUI library commit using Yeti. An additional 45,665 tests run about once a day. We can easily reach 100,000 tests running daily with our setup (assuming 4 commits per day) and we still have more browsers and devices yet to come.

Changes

  • Automatically restart stalled browsers when using WebDriver.
  • Avoid Selenium proxy in Sauce Labs to support IE 6-9.
  • Maximum duration for sessions in Sauce Labs is now 2 hours.
  • Support for HTTP_PROXY and HTTPS_PROXY environment variables when installing Yeti dependencies. Thanks, @ryanvanoss!
  • Crash fix: prevent calling _launch twice when starting a browser.
  • Crash fix: properly close duplicate connection.
  • Bugfix: Yeti exits with code 1 when tests fail using the JUnit XML reporter.
  • Bugfix: Fix bug in Batch.disallowAgentId.
  • Bugfix: Uncaught exceptions are now reported in JUnit XML results.
  • Bugfix: Improve handling of browser-sent events on load.
  • Upgrade glob and request dependencies.

Get Yeti

You can upgrade now by running npm install -g yeti. Learn more about Yeti at yeti.cx.

Release Links

  • Compare v0.2.21 source code to v0.2.22
  • v0.2.22 documentation
  • Unit code coverage
  • Functional code coverage
By Reid BurkeMay 8th, 2013

YUI 3.10.0 Released

We are pleased to announce the release of YUI 3.10.0! You can find it on the Yahoo CDN, via direct download, or npm. The YUI Library website has also been updated with the latest documentation.

This release has a number of new features and fixes since YUI 3.9.1. Some of these are listed below.

4x Attribute and Base Performance Improvements

As detailed in our PR1 blog post, we made significant performance improvements to Attribute and Base, starting at the AttributeCore and BaseCore layers, resulting in up to 4x improvement over YUI 3.8.1 for some common use cases, from the non-event based Core changes alone. We’re seeing even more significant gains when combined with the Custom Event optimizations discussed below for observable Attribute and Base implementations.

Backwards Compatibility Note

A significant chunk of the improvement mentioned above comes from optimizing the way we aggregate the “static” ATTRS collection for Base or BaseCore based objects. We now cache the results of the aggregation while creating the first instance of a given “class”, and reuse the cached aggregation for subsequent instances.

As a result, if you’re modifying the ATTRS collection of a “class” after an instance has potentially been created, you’ll need to change your code to use the new static modifyAttrs() method. This way the code knows the static properties have changed and won’t continue to use an out-of-date cache.

We didn’t come across any code in the library or during the PR which was doing this modification, so we believe this is a fairly rare case.

For more details about this change check out Bases‘s HISTORY.md.

CustomEvent Performance Improvements

Along with Attribute and Base, we also improved CustomEvent performance for some common use cases. The improvements started out mainly targeting the “no listeners” use case, however while working on this area, we also tried to make sure the “20%” features didn’t weigh down the more common “80%” code paths. These changes result in improvements from 2x up to 6x depending on the use case, even outside the targeted “no listeners” use cases.

For more details about the CustomEvent changes, see CustomEvent’s HISTORY.md.

Future Performance Work

There are a couple of further performance optimization areas in BaseCore and CustomEvent we couldn’t get to in time for 3.10.0. We plan to put out a PR for these additional optimizations early in the 3.11.0 sprint cycle. Like the ATTRS change above, they could have some minor backwards compatibility impact but hopefully the gains make them worth it (see comment ).

AutoComplete, Console, and DataTable Language Updates

YUI Contributor Alberto Santini added Italian language files for Console, AutoComplete, and DataTable. Thanks Alberto! Contributing language files is an excellent way to make contributions to the YUI codebase.

Y.Tree Improvements

Ryan Grove (@yaypie) has added an extension to Y.Tree called Tree.Sortable which can be mixed into any Tree class to provide customizable sorting logic for nodes. He has also added findNode(),find(), traverseNode(), and traverse() methods to assist with building extensions for Y.Tree. For more details, check out the HISTORY.md entry.

Deprecations and Removals

In this release we have officially deprecated Profiler. If you are looking for good profiling tools, check out the developer tools built in to most modern browsers, which typically include profiling JavaScript. We also removed the dom-deprecated and node-deprecated modules. They have been deprecated for some time and they were due for removal from the repo.

Using grunt for Release Builds

Dav Glass (@davglass) has converted the build system over to using grunt. Both dev and release builds are now done using this task runner, which has been a frequently requested feature for some time now. grunt also integrates with yogi to allow you to run both tests and builds. If you want more details on how to use grunt, please take a look at the new BUILD.md file included in this release.

And More!

This release continues the trend of having lots of community pull requests and issues fixed. There were a total of 365 commits by 22 authors between 3.9.1 and this release. There have been significant updates and changes to several unit tests as well as we continue to improve the CI process and weed out unstable tests. You can find out more about this release by checking out the previous blog post for PR1. There is also a change history rollup for this release.

PR Adoption

We would like to have more “real world” adoption of PRs in the future, especially for changes as broad as the infrastructure changes mentioned above, due to the level of customization on top of them. In addition to the unit and functional tests, this helps us validate the changes we make each cycle in real-world applications, and helps us avoid having to have a rapid point release once a new version is out. In other words, you can make a real difference in the quality of a release by testing our PRs in your staging environments.

A big shout out goes to Eduardo Lundgren at Liferay for trying the 3.10.0 PR out for us and letting us know how it went. (Check them out at JAX.de this week as well!)

Let us know if you have ideas to help with PR adoption across the community.

By Andrew WooldridgeApril 24th, 2013

Yeti 0.2.21 Released

We’re using Yeti to test YUI on all of our Target Environments. In CI, we use Yeti with Selenium to start and stop browsers. Today’s release improves issues we’ve found while using Yeti with Selenium. Here’s what’s new in 0.2.21.

Use Only Launched Browsers

When specifying browsers to launch, Yeti 0.2.21 will ignore browsers that are manually connected and will only use browsers launched by Selenium to test that batch.

Recognize Browsers & Environments Used by Sauce Labs

We’ve included browser names, versions, and OS options that are used by Sauce Labs. We also added latest as a version. New options include:

  • Windows 2003
  • Windows 2008
  • Windows 2012
  • Mac 10.6
  • Mac 10.8
  • iPad
  • iPhone

These can be used together to launch browsers like this:

  • -b chrome/xp
  • -b "ie/6/windows 2003"
  • -b "ie/10/windows 2012"
  • -b "iphone/6/mac 10.8"
  • -b firefox/latest/xp

Full Changelog and Bugfixes

We also fixed a few bugs. The full changelog is below:

  • Batches that use WebDriver only use browsers launched by WebDriver, not existing browsers.
  • Accept latest as a WebDriver browser version.
  • Add browsers used by Sauce Labs.
  • Fix server-side wd-url command-line option.
  • Fix issue with echoecho JSONP when using a query string like &callback=foo.
  • Fix possible hang during WebDriver browser launching.
  • Fix possible quit before JUnit XML was completely written to stdout.

Upgrade Now & Release Links

You can upgrade now as usual: npm install -g yeti.

  • Compare 0.2.21 source code to 0.2.20
  • API documentation
  • Unit code coverage
  • Functional code coverage

What’s Next

We continue to improve Yeti as we use it to test YUI 3.10.0. Support for HTTP proxies during Yeti’s installation is coming soon thanks to an in-progress pull request by @ryanvanoss which is coming in the next release.

By Reid BurkeApril 11th, 2013

YUI 3.10pr1

We are pleased to announce the arrival of YUI 3.10pr1 today. It is available via Yahoo! CDN, an archived download, or on npm. Our YUI Library staging website has also been updated to reflect the changes in this release. Please take note of the testing advisory below.

What’s New in This Release?

We have been hard at work for a while now on some deep changes to YUI that dramatically improve performance. This preview release includes the results of this performance work. Also included in this release is the new grunt-based build system that Dav Glass has been working on. Ryan Grove has included some improvements to Y.Tree as well.

Attribute and Base Performance Improvements

On Chrome 25, compared to 3.8.1, we’re seeing the following improvements (numbers in ops/sec):

Benchmark 3.8.1 3.10pr1 x Change
new BaseCore() 51,871 153,532 3
new MyBaseCore() [extends BaseCore] 51,980 140,016 3
MyBaseCore with 10 simple value attributes 20,535 45,541 2
MyBaseCore with 20 varied attributes (using perf. best practices) 11,699 19,153 2
MyBaseCore with 10 simple value attributes – set() 799,081 2,239,983 3
MyBaseCore with 10 simple value attributes – get() 2,527,214 10,424,878 4

When combined with the work in CustomEvent and EventTarget (see below) , we’re seeing:

Benchmark 3.8.1 3.10pr1 x Change
new Base() 13,696 48,067 4
base.set() 74,202 332,063 4
base.get() 2,330,865 10,810,890 5

AttributeCore and BaseCore have seen dramatic performance improvements. These in turn improve Attribute and Base which many components depend upon, including custom components. One of the key performance changes introduced this PR is the caching of the static ATTRS aggregation which occurs when you instantiate a Base-based object. Before this change, YUI would re-aggregate ATTRS for every instance created, resulting in about 1/3 of the time required for Base instantiation. Now for the second instance onwards, YUI re-uses the cached aggregation improving performance substantially. Note however, as a result of this change, if you touch the ATTRS collection on a ‘class’ directly there’s the potential for breakage (this is a rare case). The cache won’t know about your modifications if they come in after the first instance of the class is created. If you have such code in your custom components, it will need to use the new modifyAttrs() static method. For more details see Base‘s HISTORY.md.

CustomEvent and EventTarget Performance Improvements

On Chrome 25, compared to 3.8.1, we’re seeing the following improvements:

Benchmark 3.8.1 3.10pr1 x Change
Low-level Publish (over regular publish) - 1,404,890 5
Publish 261,855 531,777 2
Fire With Payload – 10 listeners 146,386 275,239 2
Fire – 10 listeners 176,905 347,636 2
Fire With Payload – 2 listeners 160,905 351,084 2
Fire – 2 listeners 209,820 671,328 3
Fire With Payload – 0 listeners 835,323 4,791,071 6
Fire – 0 listeners 839,048 5,139,582 6
EventTarget Construction + Publish(foo) + Fire(foo) – no listeners 104,124 306,288 3

Another set of optimizations focus on CustomEvent and EventTarget, primarily for the ‘no listeners’ code path but also for custom events in general. The goal for these changes was to improve new Base() times. Base publishes and fires 2 events (init and initalizedChange) during construction, which for the 80% case do not have listeners. The theme for this set of changes was to do the following:

  • Try to fast-path common usage.
  • Try to avoid the cost of the 20% features on the 80% path.

For more details, take a look at the HISTORY.md for event-custom.

Algorithmic development and testing was done on Chrome for both sets of performance improvements above, but micro-optimizations for each specific browser were tested with jsperf across all browsers. The “x Change” that is presented in the data above was also tested across browsers and shown to exist beyond Chrome. YUI Developer Derek Gathright (@derek) posted some performance numbers using his new YUI Benchmark tool.

Y.Tree Improvements

Ryan Grove (@yaypie) has added an extension to Y.Tree called Tree.Sortable which can be mixed into any Tree class to provide customizable sorting logic for nodes. He has also added findNode(),find(), traverseNode(), and traverse() methods to assist with building extensions for Y.Tree. For more details, check out the HISTORY.md entry.

Using grunt for Release Builds

Dav Glass (@davglass) has converted the build system over to using grunt. Both dev and release builds are now done using this task runner, which has been a frequently requested feature for some time now. grunt also integrates with yogi to allow you to run both tests and builds. Dav solicited feedback from the community via our ‘yui-contrib’ mailing list and received responses that helped him make the best decision. This is a great example of a YUI developer making use of our Contributor Mailing List and Contributor Model in making changes for the better. If you want more details on how to use grunt, please take a look at the new BUILD.md file included in this release. Also, if you want to develop for YUI we encourage you to join the mailing list to keep up with the latest. Check out the Contributor Model to learn how additions and improvements are integrated into the project.

And More!

You can find the complete list of changes for this release on GitHub. We had a total of 214 commits by 11 authors since YUI 3.9.1. Also note that Luke Smith (@ls_n) recently updated the user guide for Y.Promise so check that out as well.

A Call for Deep Testing

Given that these performance improvements have a broad impact across many YUI components, we recommend that you take this preview release and try it out in a staging environment with your own applications. It is vital that we hear about any issues you may run into so that we can fix them in a timely manner before the full 3.10 release. Please take note of the potential change you may need to make to your custom code if you modify your ATTRS class directly after the first instantiation. If you do run into an issue, please file a ticket.

By Andrew WooldridgeApril 8th, 2013

YUI 3.9.1 Released

Today we have released YUI 3.9.1. You can find this release on the Yahoo! CDN, as a download, and on npm. The YUI Library website has been updated as well. This is a small release mainly intended to fix an issue with Handlebars but includes some other great fixes as well.

Updated Handlebars

There was an issue in the previous release with the version of Handlebars included in the source. This version would prevent you from doing anything more than the most basic Handlebars templates due to a regression with nested blocks. This regression was found by the automated testing from the Mojito team and highlighted a discrepancy between the npm version and source version of Handlebars. This release includes an updated version of Handlebars in both the source and npm builds which fixes this regression. We’ve subsequently added additional tests to check for this issue in the future. If you are using Handlebars in your applications you should definitely update to this latest version.

LazyModelList Fixes

Ryan Grove [@yaypie] included a few fixes to LazyModelList including an issue where a revived model would not update the original object when an attribute changed, as well as an issue where revived models did not have the same clientId as the original object. Thanks to ItsAsbreuk for filing the issues!

Y.Tree changes

Ryan also added a feature to Y.Tree adding a src option to all methods that trigger events. This is passed along to the event facade of the resulting event and can be used to distinguish between changes caused by different sources (such as user-initiated changes vs programmatic changes).

You can check out the details of all the changes in this release in the YUI 3.9.1 History Rollup as well.

By Andrew WooldridgeMarch 27th, 2013

Yeti 0.2.20 Released

Yeti 0.2.20 resolves a few issues, including bugs that could cause tests to be skipped or report incorrect results.

What is Yeti?

Yeti is a JavaScript test runner for browsers built on Node.js. We use Yeti to test YUI every one of our target environments before release. Since Yeti 0.2.0 released last year, Yeti was covered on the retired Yeti Blog. Since Yeti is becoming a very important part of YUI development, future Yeti news will be found right here on YUI Blog!

Changelog

  • Report results for the correct test. Never run tests twice.
  • Run Android tests faster by removing unneeded timeout between tests. (c252285)
  • Improve error messages that can occur during WebDriver launching. (559d887, 048a722)
  • Allow client to set wd-url for a Hub to launch browsers.
  • Prevent calling WebDriver launcher callback twice, which can cause a crash. (ac13083)

Release links

  • Quick start
  • API documentation
  • Unit code coverage
  • Functional code coverage

What’s next: focus on YUI 3.10.0

As we prepare to ship a well-tested YUI 3.10.0 release, we’ll be using Yeti quite a bit. Expect incremental improvements in Yeti releases over the next few weeks as we continue to abuse it daily.

Yeti 0.2.20 tests Firefox and Chrome—simultaneously, using 12 instances of each browser—inside our upcoming CI build for YUI. This new setup will replace our existing CI build that tests one browser instance at a time. We’ll be working to hook up our public build results to use our Yeti-based CI setup over the next couple weeks.

By Reid BurkeMarch 20th, 2013
« Older Entries

Pages

  • About
  • Contribute
  • YUI Jobs

Recent Posts

  • YUI Weekly for May 17th, 2013
  • Yahoo’s International Team Is Hiring!
  • YUICompressor 2.4.8 Released
  • YUI 3.10.1 Released to Fix SWF Vulnerability
  • YUI Weekly for May 10th, 2013

Archives

Categories

  • Accessibility (25)
  • CSS 101 (6)
  • Design (51)
  • Development (590)
  • Frontend Jobs at Yahoo (13)
  • Graded Browser Support (8)
  • In the Wild (63)
  • Miscellany (11)
  • Open Hours (44)
  • Performance (23)
  • Releases (25)
  • Target Environments (11)
  • Yeti (3)
  • YUI 3 Gallery (29)
  • YUI Events (45)
  • YUI Implementations (55)
  • YUI Theater (146)
  • YUI Weekly (37)

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
© 2013 YUI Blog