Category: Performance

  • Performance Testing with k6

    Performance Testing with k6

    Stuart Bingë | May 13, 2020

    There’s an old adage in the software industry – premature optimization is the root of all evil. A corollary to this should be – no optimization is just as bad as premature optimization. It is often true that effort spent optimizing a system before features are properly implemented, correct and stable is effort wasted, but

  • Next Generation Virtual Scrolling

    Next Generation Virtual Scrolling

    Dylan Schiemann | September 25, 2019

    Rendering large data sets in the browser while optimizing for performance and accessibility is a complex problem. The current approach to handling long lists of data is using an infinite scroll pattern to incrementally load and render data just before the data enters the view. This approach comes with trade-offs that we will look at

  • Using WebAssembly with Web Workers

    Using WebAssembly with Web Workers

    James Milner | July 22, 2019

    When building web apps, writing processing intensive code can be a challenge. One issue is getting predictable running times across browsers and JavaScript engines that optimise different code paths differently, as well as producing code that doesn’t interfere with user experience. Since 2010 we’ve had a standardised way to manage interactivity for long, non-DOM related

  • Deploying a Dojo App with Docker

    Deploying a Dojo App with Docker

    Rory Mulligan | July 16, 2019

    So you’ve built an amazing app using Dojo and now you are ready to go live. After a bit of research, you learn that traditional deployments are challenging! Luckily, the days of FTPing files are long gone, and we can rely on Docker for fast, reliable deployments. Using Docker will not only document your build

  • Getting Started with AssemblyScript

    Getting Started with AssemblyScript

    James Milner | April 23, 2019

    In a previous post we looked at how to compile the popular programming language Go to WebAssembly. WebAssembly is a new programming language which provides a compact binary format for the web. In this post we’ll explore another WebAssembly target language called AssemblyScript. AssemblyScript allows developers to write strictly typed TypeScript (a typed superset of

  • Compiling Go to WebAssembly

    Compiling Go to WebAssembly

    James Milner | January 15, 2019

    For many years there has been the only way to write client-side logic for the web; JavaScript. WebAssembly provides another way, as a low-level language similar to assembly, with a compact binary format. Go, a popular open source programming language focused on simplicity, readability and efficiency, recently gained the ability to compile to WebAssembly. Here

  • TC39 Binary AST Proposal to Improve JavaScript Performance

    TC39 Binary AST Proposal to Improve JavaScript Performance

    Dylan Schiemann | November 30, 2018

    WebAssembly has grown in popularity due to its ability to improve application performance and support transpilation of source code in other languages into something that may get leveraged in a web browser. Every time the JavaScript language gets challenged, the community strives to create mechanisms to improve performance bottlenecks, which we have seen over the

  • Reflecting on ffconf 2018

    James Milner | November 14, 2018

    Last Thursday I was lucky enough to get over to the highly regarded web development conference ffconf in Brighton. This was my first time at the event and I can say that it lived up to and even exceeded my expectations. In this post I want to share with you the key takeaways from the

  • The Return of SharedArrayBuffers and Atomics

    The Return of SharedArrayBuffers and Atomics

    James Milner | September 19, 2018

    A common complaint of modern web apps is the concept of jank; web pages being unresponsive to user input and frame rates being low. Left unmitigated, this problem leads to a poor quality experience for end users of our web applications. You might ask: is this what causes jank? One common cause apart from complex/inefficient

  • FullStack London 2018 – Improving User Experience With Web Workers

    FullStack London 2018 – Improving User Experience With Web Workers

    Lisa Flood | July 27, 2018

    At this months’s FullStack London 2018, SitePen Engineer James Milner presented the talk “Improving User Experience With Web Workers”. Web browsers use single-threaded JavaScript to perform tasks; business logic, layout, reflows, and garbage collection. This means complex and heavy JavaScript functions can block the main thread from rendering. This results in low frame rates and

  • Improving Performance with the Paint Timing API

    Improving Performance with the Paint Timing API

    Umar Hansa | October 6, 2017

    Introduction Outline Accessing paint metrics from JavaScript Reporting paint timing metrics to a server Viewing paint metrics in the Chrome DevTools Browser Implementations Traditionally, front-end performance focused primarily on page load times as an important performance metric. Commercial web performance dashboards would show granular level performance metrics for back-end aspects, like database lookup times, template

  • Blockchain Basics

    Blockchain Basics

    Paul Bouchon | September 21, 2017

    “Blockchain” is the newest term to enter the tech industry’s buzzword repertoire. Whether a company is processing sub-second banking transactions or transporting artisanal goat cheeses across state lines, it seems as though any company not investigating this technology, the same technology that powers infamous cryptocurrencies like Bitcoin, will surely go the way of the dodo.

  • Event Delegation: Pattern or Anti-Pattern?

    Event Delegation: Pattern or Anti-Pattern?

    Neil Roberts | July 11, 2017

    A significant amount of work on JavaScript toolkits and frameworks has centered around trying to fix, normalize, and optimize browser implementations. Doing so requires making many assumptions about what the problems are, how our tools will be used by developers, and what we expect of the future. The assumptions made often turn out to be

  • Functional reactive programming and Observables in JavaScript, TypeScript, and Dojo 2

    Functional reactive programming and Observables in JavaScript, TypeScript, and Dojo 2

    Dylan Schiemann | February 27, 2017

    Functional programming and reactive programming principles are not new to JavaScript, but their adoption has recently become widespread across most modern frameworks and toolkits. The ease of using these approaches has improved as we’ve finally seen the decline of legacy browsers, and as we’ve seen the introduction of functional and reactive paradigms within ES6 and

  • Dojo FAQ: How do I optimize a Dojo app for mobile?

    Dojo FAQ: How do I optimize a Dojo app for mobile?

    Nick Nisi | February 14, 2017

    Web applications can be deployed to many environments, including desktops, tablets, and mobile devices. We can even deploy web applications natively using a wrapper such as Apache Cordova to gain access to device features such as GPS, battery, and accelerometer data. However, it is not always optimal to package our application into a universal layer

  • Moving 4-ward with Intern

    Moving 4-ward with Intern

    Jason Cheatham | February 10, 2017

    The motivation for Intern 4 is to make it easier to author tests with ES6+ features within tests, with or without transpilation. Want to skim? Here’s the Intern Roadmap which lists our high level status for each Intern release going forward. Or if you’re curious to know the details for our plans for Intern this

  • Accessibility Testing with Intern

    Jason Cheatham | December 13, 2016

    Intern already has a wide array of capabilities and today we’re pleased to announce one more: accessibility testing. Thanks to a generous award from Mozilla Open Source Support we’ve created the intern-a11y plugin, which allows users to run accessibility tests on pages or components using Intern.

  • FullStack 2016

    Dylan Schiemann | July 20, 2016

    FullStack is a large London JavaScript conference hosted at the Skills Matter CodeNode. The conference brings together an impressive line-up of speakers and workshops covering five tracks over three full days of festivities. We were invited to speak at FullStack, and also enjoyed many of the other sessions and met many great engineers. The sudden

  • Building Better Enterprise Web Applications Part 3: SitePen solutions

    Dylan Schiemann | June 30, 2016

    In this installment of our series on building web applications, we look at the SitePen approach to solving challenges in web application development. We employ all of the solutions described in part 2 of the blog series. Additionally, we have some overarching principles we apply to our work. The right architecture and an emphasis on

  • Building Better Enterprise Web Applications Part 2: Solutions

    Dylan Schiemann | June 29, 2016

    While there are many challenges today with building web applications, there are also many options to address the issues we face with technology, process, and people, allowing us to reap the benefits of the web as an application platform. Technology solutions While many of the challenges with today’s web applications come from the vast array of

  • Building Better Enterprise Web Applications: Challenges

    Dylan Schiemann | June 28, 2016

    Web applications provide many benefits. Most organizations seek to improve the efficiency and effectiveness of business processes through the use of software. The benefits of web applications include: Simple distribution model for end users (e.g. no installation required) Instant propagation of changes Unified code base to support many platforms (desktop, tablet, mobile, etc.) Easy piloting

  • Stronger JavaScript?

    Kit Kelly | October 8, 2015

    The V8 team (the JavaScript engine that powers Chrome, Opera, Node.js, MongoDB, etc…) are moving forward with an experiment in defining a stronger version of JavaScript that ensures that code being run is behaving well, and introducing run-time typing based on TypeScript’s typings. V8’s motivation is always performance, and a more stringent set of ECMAScript

  • Minimizing Dijit Instances in dgrid

    Kris Zyp | April 14, 2015

    Dijit and dgrid provide a powerful set of user interface components, allowing for fast construction of sophisticated web applications with excellent performance and interactivity. However, one particular configuration of dgrid that can impact memory and performance: heavy use of persistent Dijit editors within grid cells. The dgrid’s Editor plugin makes it very easy to leverage

  • Legitimate, memory-efficient privacy with ES6 WeakMaps

    Matthew Wistrand | March 19, 2015

    When writing object-oriented source code, you generally only want to expose a very specific API to whomever is using it. In many languages you would control this by marking methods and properties you do not want other developers to use as private. However, if you have been writing JavaScript for any amount of time, you

  • Memory Consumption: the Externality of Programming

    Memory Consumption: the Externality of Programming

    Kris Zyp | March 17, 2015

    Performance is a critical part of most applications. Research continually shows that good performance is essential for a good user experience. Reasonable load times, smooth animations, and responsive interaction gives user a sense of interaction and immersion, whereas slow load times frustrate users, and choppy animation and interaction quickly makes an experience awkward and disconcerting.

  • Robust JavaScript Application Architecture

    Dylan Schiemann | January 8, 2015

    In October, 2014, I was coerced invited to deliver a talk at the first FullStack conference in London, a conference focused on Node.js, JavaScript and hackable electronics. The conference was an interesting cross-section of all things related to JavaScript. A topic that’s been on my mind lately is how to choose a robust architecture that’s

  • REST tips

    REST tips

    Kris Zyp | June 24, 2014

    At SitePen, we have long been advocates for building web applications on a RESTful architecture. Over the last several years, it has been exciting to see organizations increasingly provide RESTful endpoints for the Dojo-based front-ends that we support and develop. A well-designed REST backend can be a excellent foundation for manageable, scalable applications, that will

  • Local Database Stores

    Kris Zyp | June 17, 2014

    Modern browsers have powerful new database capabilities that enable applications to store data locally, and perform advanced indexed queries without a network connection. Applications can be built with offline support without any disruption to data interaction, including searching. However, these database capabilities have traditionally been difficult to use across browsers since Safari only supports WebSQL

  • Dojo Tutorial: Feature Detection and Device Optimized Builds

    Dojo Tutorial: Feature Detection and Device Optimized Builds

    Dylan Schiemann | January 25, 2013

    As part of our great updates to the Dojo Tutorials for Dojo 1.8, we’ve been busy creating several new tutorials. Feature Detection and Device Optimized Builds Dojo 1.7+ now uses the popular has() pattern for feature detection in combination with a has()-aware build system. While it is easy enough to write feature detection tests with

  • Working with Dojo and AMD in Production

    Working with Dojo and AMD in Production

    Dylan Schiemann | August 27, 2012

    In our recent post on dgrid and Dojo Nano, we showed a technique of using nested require statements in order to make use of optimized layers using the Dojo build system. As a refresher, a layer is Dojo’s terminology for a file that combines many JavaScript resources into a single file. This improves the performance

  • How To Migrate a Module to AMD

    How To Migrate a Module to AMD

    Kris Zyp | July 24, 2012

    Dojo 1.7 added full support for asynchronous module loading, defined with the widely adopted asynchronous module definition (AMD) format. The new module loader and module format offer faster module loading, better performance, and wide interoperability. However, for many, upgrading from the legacy Dojo module format to AMD is daunting, since the new module formats look

  • Now Supporting all Major Toolkits!

    Now Supporting all Major Toolkits!

    Dylan Schiemann | July 19, 2012

    We have been providing JavaScript and Dojo support to freelancers, start-ups and Fortune 500 companies for nearly a decade. As we intently watch enterprise organizations everywhere begin to roll out AMD (read about why AMD matters) and the associated code improvements, we are thrilled with the industry’s direction toward toolkit interoperability! Why? Because! Our masterful

  • AMD for the Business-Side

    AMD for the Business-Side

    Dylan Schiemann | July 10, 2012

    You may have seen our recent blog entitled “AMD: The Definitive Source” which exhaustively explained Asynchronous Module Definition. AMD is a topic with significant technical nuances but the purpose of THIS article is to explain the value of AMD for your business. AMD is an emerging defacto standard for efficiently developing modular JavaScript applications and

  • AMD: The Definitive Source

    Kris Zyp | June 25, 2012

    So what is AMD? As web applications continue to grow more advanced and more heavily rely on JavaScript, there has been a growing movement towards using modules to organize code and dependencies. Modules give us a way to make clearly distinguished components and interfaces that can easily be loaded and connected to dependencies. The AMD

  • dgrid and Dojo Nano Build

    Dylan Schiemann | June 11, 2012

    You’ve likely read that the new dgrid can be as small as 32KB gzipped when including just its minimal dependencies. However, if you use the standard settings for the Dojo Web Builder or a standard Dojo build profile, you end up with a build that’s closer to 100KB gzipped. So, how do you actually get

  • Understanding dojo.require

    Cody Lindley | March 29, 2010

    Dojo provides a feature-rich system for including JavaScript modules. Before we begin this journey to explore this concept in depth, you should know that absolutely no knowledge of the Dojo module, packaging, and build system are required to use Dojo. You can easily get started using Dojo by using a script element referring to a

  • Efficient Lazy Loading of a Tree

    Kris Zyp | January 27, 2010

    Dojo 1.4 sports a fantastic tree widget, complete with ARIA compliance, keyboard accessibility, and internationalization (including right-to-left layout for appropriate countries and languages). For large tree data sets, we want to be able to only load the necessary data for the visible nodes of the tree. As a user expands a node, we then want

  • Managing Widget Templates in Dojo 1.4

    Managing Widget Templates in Dojo 1.4

    Sam Foster | January 20, 2010

    This article introduces dojo.cache and presents a technique for externalizing your widget templates in swappable configuration files, where they can be referenced by a custom templateKey widget property. Introducing dojo.cache Dojo 1.4 adds a new core utility called dojo.cache. To appreciate it we first have to review how Dijit’s templatePath works. When you define a

  • Performance Testing of the Top 100 Sites is Misleading at Best

    Performance Testing of the Top 100 Sites is Misleading at Best

    Dylan Schiemann | January 11, 2010

    Recently, a number of performance tests have been released that are based on the performance of the top 100 web sites such as SpriteMe savings, the IE8 100 top sites test results, or the JSMeter research. These are in direct contrast with tests such as ACID3 which attempt to test the future of the web

  • Why We Love Chrome Frame

    Why We Love Chrome Frame

    Dylan Schiemann | September 22, 2009

    Google today announced Chrome Frame, a plug-in that selectively upgrades Internet Explorer without breaking existing sites. Think of it as working like Flash, but for open web technologies, replacing Internet Explorer’s entire rendering engine for sites that include a single meta tag indicating that they would prefer to use Chrome Frame rather than IE. So

  • Dynamic Stylesheets

    Sam Foster | March 13, 2009

    New to Dojo 1.2+ is This is a collection of methods which give you the ability to query the stylesheets collection in a document, add and remove rules, and dynamically create new sheets. In this article I’ll explain why and where this is of use, and walk through a split-panel demo that uses dynamic

  • Dojo Toolbox First Look

    Kevin Dangoor | July 8, 2008

    In the middle of May, we were given a mission: create a speedy, offline API documentation viewer and a graphical Dojo build tool. Here we are at the beginning of July, and the result is the Dojo Toolbox 1.0. This article is a first look at this new application. Adobe® AIR™ has received a good

  • A Quick JavaScript Load Profiler

    Mike Wilcox | July 1, 2008

    I was doing some research on script loading speed tests. Each script load required the page to be refreshed, making it difficult to log the time to Firebug and get an average. It was certainly too much trouble to write some PHP scripts and connect to a database; and possibly even worse would be having

  • String Performance: an Analysis

    Tom Trenka | May 9, 2008

    Recently I was writing a “tips and tricks” blog post that was going to focus on the idea that it is better to use an object as a “string buffer”; the idea was that by passing this object around to various functions and pushing string fragments into it, you can get better performance from a

  • Why Apple is Investing in WebKit Performance

    Why Apple is Investing in WebKit Performance

    Kevin Dangoor | March 24, 2008

    Today, I was eating lunch alone at a restaurant and reading some news via my iPhone’s EDGE connection. Suddenly, Surfin’ Safari – Blog Archive » Optimizing Page Loading in the Web Browser made even more sense. Apple has been putting actual dollars into making Safari and the underlying open source WebKit really, really fast. Safari

  • Mobile Gears could help network latency

    Jason Cline | March 5, 2008

    Mobile application development has many challenges. The announcement of Google Gears on Mobile Devices will help solve the problems of network connectivity, network latency, and limited bandwidth. On the desktop, a lot of the focus on Gears was its ability to allow applications to function when your computer was not connected to the network. In

  • Dojo 0.9 Update: M2

    Dojo 0.9 Update: M2

    Alex Russell | May 13, 2007

    This past Friday, we pushed Dojo 0.9 Milestone Release 2 out of the nest. This is the last milestone before Beta and the system is starting to take a recognizable shape. Only thinner. Here’s what’s new and awesome in M2: Dijit has landed! Holy cow is it fast. Stay tuned for themes and more widgets.

  • Writing RPM packages is easier than you might think

    Writing RPM packages is easier than you might think

    Torrey Rice | March 10, 2007

    Hello, Writing RPM packages seems to intimidate some, but it can be easier than you might guess. Below, I will: point out the online reference RPM documentation describe one method of configuring a build environment outline a simple specfile (sysreport package) describe the process of building the package from the specfile introduce a few convenient

  • Going Data-Driven

    Going Data-Driven

    Alex Russell | January 7, 2007

    Dylan’s last post on performance is only one in a series we’ll be running on the topic, and as promised this post is all about the tools of the trade for doing Ajax app performance tuning and how to use them. Here at SitePen, we often get called into a project when the heat is

We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.Privacy Policy