Think first of the contribution your organization can make to the community, a non-profit, or local business. Use this as an opportunity to connect and engage on a higher level to develop relationships and partnerships that add real value. The discovery process does not end with realizing your true identity and potential. It begins again each day as you continue to grow, visualizing the future of your brand.
A business never plans to fail, more often they fail to plan. The answers to these questions will offer enlightenment and guidance that can improve the relationship between brand and consumer. Using it wisely will strengthen company culture and employee engagement.
However, connecting this feedback to inspire successful marketing campaigns, creative advertising, and transform the sales process, is a challenge every organization faces. Hiring an experienced and creative branding agency can produce the best results. Download the full guide today or contact us to turn your answers into a successful brand strategy.
Save my name, email, and website in this browser for the next time I comment. Posted by jmcsweeney In Blog 0 comment. The Basics of Brand Discovery Start by asking questions that deconstruct and simplify your business goals.
What are our core values? What problem do we solve for our customers? What products or services are the most profitable for us? How do we measure success?
A fully server-rendered experience can also be achieved out of the box with Next. The approach has its downsides. As a result, we do gain full flexibility of client-side apps while providing faster server-side rendering, but we also end up with a longer gap between First Contentful Paint and Time To Interactive and increased First Input Delay. Rehydration is very expensive , and usually this strategy alone will not be good enough as it heavily delays Time To Interactive.
In Vue, we can use renderToStream that can be piped and streamed. With React Suspense, we might use asynchronous rendering for that purpose, too.
On the client-side, rather than booting the entire application at once, we boot up components progressively. Sections of the applications are first broken down into standalone scripts with code splitting, and then hydrated gradually in order of our priorities.
In fact, we can hydrate critical components first, while the rest could be hydrated later. The role of client-side and server-side rendering can then be defined differently per component. We can then also defer hydration of some components until they come into view, or are needed for user interaction, or when the browser is idle.
For Vue, Markus Oberlehner has published a guide on reducing Time To Interactive of SSR apps using hydration on user interaction as well as vue-lazy-hydration , an early-stage plugin that enables component hydration on visibility or specific user interaction. The Angular team works on progressive hydration with Ivy Universal. You can implement partial hydration with Preact and Next.
With Next. For Vue, we can use Vuepress to achieve the same goal. You can also use prerender-loader with Webpack. Navi provides static rendering as well. Plus, all URLs have to be known ahead of time to generate all the pages. So some components might be rendered using prerendering, but if we need something dynamic, we have to rely on the app to fetch the content.
As JavaScript has a performance cost, as the amount of JavaScript grow with an application, aggressive code-splitting and deferring JavaScript will be absolutely necessarily to tame the impact of JavaScript. For such cases, a server-side rendering will usually be a better approach in case not much interactivity is required.
If it's not an option, consider using The App Shell Model. So, client-side or server-side? Both server-rendering and client-rendering are a disaster if done poorly. Whether you are leaning towards CSR or SSR, make sure that you are rendering important pixels as soon as possible and minimize the gap between that rendering and Time To Interactive. Stream HTML in chunks with server-side rendering, and implement progressive hydration for client-side rendering — and hydrate on visibility, interaction or during idle time to get the best of both worlds.
There are plenty of static-site generators and the pages they generate are often very fast. The more content we can pre-build ahead of time instead of generating page views on a server or client at request time, the better performance we will achieve.
Markus uses Eleventy and Preact as his tools, and shows how to set up the tools, add partial hydration, lazy hydration, client entry file, configure Babel for Preact and bundle Preact with Rollup — from start to finish. With JAMStack used on large sites these days, a new performance consideration appeared: the build time. In fact, building out even thousands of pages with every new deploy can take minutes, so it's promising to see incremental builds in Gatsby which improve build times by 60 times , with an integration into popular CMS solutions like WordPress, Contentful, Drupal, Netlify CMS and others.
Also, Next. Need an even more lightweight approach? In his talk on Eleventy, Alpine and Tailwind: towards a lightweight Jamstack , Nicola Goutay explains the differences between CSR, SSR and everything-in-between, and shows how to use a more lightweight approach — along with a GitHub repo that shows the approach in practice.
As with good ol' HTTP requests, when data is retrieved from an API, any delay in server response will propagate to the end user, hence delaying rendering. When a resource wants to retrieve some data from an API, it will need to request the data from the corresponding endpoint. A component that renders data from several resources, such as an article with comments and author photos in each comment, may need several roundtrips to the server to fetch all the data before it can be rendered.
Furthermore, the amount of data returned through REST is often more than what is needed to render that component. GraphQL provides a performant solution to these issues. Per se, GraphQL is a query language for your API, and a server-side runtime for executing queries by using a type system you define for your data.
In addition, because GraphQL is using schema metadata that tells how the data is structured , it can already organize data into the preferred structure, so, for example, with GraphQL, we could remove JavaScript code used for dealing with state management , producing a cleaner application code that runs faster on the client.
If you want to get started with GraphQL or encounter performance issues, these articles might be quite helpful:. For content-heavy websites that are dealing with a lot of third-party content, these options could potentially help speed up render times dramatically. Unless they don't. AMP is not what makes the biggest difference from a performance perspective.
A benefit for the website owner is obvious: discoverability of these formats on their respective platforms and increased visibility in search engines. Well, at least that's how it used to be. Obviously, a presence in a walled garden places developers in a position to produce and maintain a separate version of their content, and in case of Instant Articles and Apple News without actual URLs thanks Addy, Jeremy!
Notice that CDNs can serve and offload dynamic content as well. So, restricting your CDN to static assets is not necessary. Double-check whether your CDN performs compression and conversion e.
Katie Hempenius has written a fantastic guide to CDNs that provides insights on how to choose a good CDN , how to finetune it and all the little things to keep in mind when evaluating one. When choosing a CDN, you can use these comparison sites with a detailed overview of their features:. In practice, Brotli appears to be much more effective than Gzip. Opinions and experiences differ, but if your site is already optimized with Gzip, you might be expecting at least single-digit improvements and at best double-digits improvements in size reduction and FCP timings.
You can also estimate Brotli compression savings for your site. In fact, at the highest level of compression, Brotli is so slow that any potential gains in file size could be nullified by the amount of time it takes for the server to begin sending the response as it waits to dynamically compress the asset.
But if you have time during the build time with static compression, of course, higher compression settings are preferred. This might be changing though. The Brotli file format includes a built-in static dictionary , and in addition to containing various strings in multiple languages, it also supports the option to apply multiple transformations to those words, increasing its versatility.
In his research, Felix Hanau has discovered a way to improve the compression at levels 5 through 9 by using "a more specialized subset of the dictionary than the default" and relying on the Content-Type header to tell the compressor if it should use a dictionary for HTML, JavaScript or CSS. How often is it the case? According to Elena, we can get 5. Yet often turning on compression is one of the easiest wins to improve performance with a simple flip of a switch.
The strategy? Make sure that the server handles content negotiation for Brotli or Gzip properly. The future of responsive images might change dramatically with the wider adoption of client hints. Client hints are HTTP request header fields, e.
As a result, the server can decide how to fill in the layout with appropriately sized images , and serve only these images in desired formats. With client hints, we move the resource selection from HTML markup and into the request-response negotiation between the client and server. Client hints provide annotations on resulting image requests that enable resource selection automation. Service Worker provides full request and response management capabilities on the client.
A service worker could, for example, append new client hints headers values to the request, rewrite the URL and point the image request to a CDN, adapt response based on connectivity and user preferences, etc. It holds true not only for image assets but for pretty much all other requests as well. Client hints are supported in Chromium-based browsers , but they are still under consideration in Firefox.
Basically we can conditionally serve low-resolution background images with a 1x descriptor, and higher-resolution images with 2x descriptor, and even a print-quality image with dpi descriptor. Beware though: browsers do not provide any special information on background images to assistive technology, so ideally these photos would be merely decoration. So at the very least, we could explore using the WebP format for our images. So after many years of discussions and debates, as of today, WebP is supported in all modern browsers.
With JPEG, we can serve a "decent" user experience with the half or even quarter of the data and load the rest later, rather than have a half-empty image as it is in the case of WebP.
Ire Aderinokun has a very detailed tutorial on converting images to WebP , too — and so does Josh Comeau in his piece on embracing modern image formats. But other options are available , too.
Ah — shameless plug! It is also one of the first image formats to support HDR color support; offering higher brightness, color bit depth, and color gamuts. For illustrations and vector images, compressed SVG is undoubtedly the best choice. For photos, we use content negotiation methods with the picture element. You can go even further by swapping animated images with static images for customers who opt-in for less motion with prefers-reduced-motion :.
So is the future AVIF then? And if you need to quickly preview and copy or download all the SVG assets from a website, svg-grabber can do that for you, too. Every single image optimization article would state it, but keeping vector assets clean and tight is always worth mentioning.
Make sure to clean up unused assets, remove unnecessary metadata and reduce the number of path points in artwork and thus SVG code. Thanks, Jeremy! To improve the time needed to start the rendering of a critical image , lazy-load less important images and defer any scripts to load after critical images have already rendered. Edge workers use JavaScript streams that use chunks which you can control basically they are JavaScript that runs on the CDN edge that can modify the streaming responses , so you can control the delivery of images.
So you can use them on top of static JPEGs saved progressively for a particular landing page. Not good enough? Well, you can also improve perceived performance for images with the multiple background images technique. Keep in mind that playing with contrast and blurring out unnecessary details or removing colors can reduce file size as well.
Ah, you need to enlarge a small photo without losing quality? Consider using Letsenhance. These optimizations so far cover just the basics. Addy Osmani has published a very detailed guide on Essential Image Optimization that goes very deep into details of image compression and color management.
For example, you could blur out unnecessary parts of the image by applying a Gaussian blur filter to them to reduce the file size, and eventually you might even start removing colors or turn the picture into black and white to reduce the size even further. On Smashing Magazine, we use the postfix -opt for image names — for example, brotli-compression-opt.
Not an option? In the land of good news, video formats have been advancing massively over the years. For a long time, we had hoped that WebM would become the format to rule them all, and WebP which is basically one still image inside of the WebM video container will become a replacement for dated image formats.
Still, we could use WebM for most modern browsers out there:. But perhaps we could revisit it altogether. AV1 has compression similar to the H. The H. For now, the most widely used and supported encoding is H. Boris Schapira provides exact instructions for FFmpeg to optimize videos to the maximum.
Of course, providing WebM format as an alternative would help, too. Need to start rendering videos faster but video files are still too large?
For example, whenever hou have a large background video on a landing page? A common technique to use is to show the very first frame as a still image first, or display a heavily optimized, short looping segment that could be interpreted as a part of the video, and then, whenever the video is buffered enough, start playing the actual video. Doug Sillars has a written a detailed guide to background video performance that could be helpful in that case. Thanks, Guy Podjarny! For the above scenario, you might want to provide responsive poster images.
We can use Responsive Video Poster , a JavaScript library that allows you to use different poster images for different screens, while also adding a transitioning overlay and full styling control of video placeholders. The research shows that video stream quality impacts viewer behavior.
In fact, viewers start to abandon the video if the startup delay exceeds about 2 seconds. Beyond that point, a 1-second increase in delay results in roughly a 5. In fact, video stalls are unavoidable on 3G as videos play back faster than the network can supply content. Usually small screen devices cannot handle the p and p we are serving the desktop. According to Doug Sillars , we can either create smaller versions of our videos, and use Javascript to detect the source for smaller screens to ensure a fast and smooth playback on these devices.
Alternatively, we can use streaming video. HLS video streams will deliver an appropriately sized video to the device — abstracting the need to create different videos for different screens.
It will also negotiate the network speed, and adapt the video bitrate for the speed of the network you are using. To avoid the waste on bandwidth, we could only add the video source for devices that actually can play the video well.
Alternatively, we can remove the autoplay attribute from the video tag altogether and use JavaScript to insert autoplay for larger screens. Then we can target specifically browsers that actually support AV1 :. Finally, you can check how slow or fast your video streaming will be with Stream or Not. Both of them use a two-stage render for delivering web fonts in steps — first a small supersubset required to render the page fast and accurately with the web font, and then load the rest of the family async.
Need a quick win? Zach Leatherman has a quick min tutorial and case study to get your fonts in order. In general, it might be a good idea to use the preload resource hint to preload fonts, but in your markup include the hints after the link to critical CSS and JavaScript. According to Andy Davies, "resources injected using a script are hidden from the browser until the script executes, and we can use this behaviour to delay when the browser discovers the preload hint.
In general, Zach advises to preload one or two fonts of each family — it also makes sense to delay some font loading if they are less critical. Also, as typefaces evolve over time, the locally installed version might be very different from the web font, with characters looking very different. Google Fonts has followed suit by disabling local on the CSS results for all users , other than Android requests for Roboto. Nobody likes waiting for the content to be displayed. With the font-display CSS descriptor , we can control the font loading behavior and enable content to be readable immediately with font-display: optional or almost immediately with a timeout of 3s, as long as the font gets successfully downloaded — with font-display: swap.
However, if you want to minimize the impact of text reflows , we could use the Font Loading API supported in all modern browsers. This way, we group all repaints by loading all fonts asynchronously, and then switch from fallback fonts to the web font exactly once. To initiate a very early fetch of the fonts with Font Loading API in use, Adrian Bece suggests to add a non-breaking space nbsp; at the top of the body , and hide it visually with aria-visibility: hidden and a.
This goes along with CSS that has different font families declared for different states of loading, with the change triggered by Font Loading API once the fonts have successfully loaded:. If you ever wondered why despite all your optimizations, Lighthouse still suggests to eliminate render-blocking resources fonts , in the same article Adrian Bece provides a few techniques to make Lighthouse happy , along with a Gatsby Omni Font Loader , a performant asynchronous font loading and Flash Of Unstyled Text FOUT handling plugin for Gatsby.
Now, many of us might be using a CDN or a third-party host to load web fonts from. It's worth noting though that Google is doing quite a bit of work out of the box, so a server might need a bit of tweaking to avoid delays thanks, Barry! This behavior was a default in Safari for years. Initiate a high-priority, asynchronous fetch for the CSS file. Works in - most modern browsers. Subscribe to National Geographic.
Go Further. Animals How wild animals eaten at the first Thanksgiving are faring today. Animals Insecticides can cause lasting harm for generations of bees.
Animals See the microscopic world of plankton in stunning detail. Animals Photo Ark Photo Ark of at-risk species adds 12,th animal. Animals A deadly disease is wiping out Caribbean coral. Environment The surprising ancient history of the hedge apple. Environment Planet Possible Europe's butterflies are vanishing as small farms disappear.
Paid Content How technology can bring us closer to nature and help protect it. Paid Content The future of Kenai Fjords. Environment Planet Possible Small farms fight for centuries-old water rights in Colorado.
Environment COP26 nears conclusion with mixed signals and frustration. Environment Planet Possible India bets its energy future on solar—in ways both small and big. Environment As the EU targets emissions cuts, this country has a coal problem. During Hurricane Ida, Wildlife Agents deploy on search and rescue missions.
S4 E1 A New Beginning. A camel faces new challenges as he ages and a red panda welcomes two cubs. A functionally extinct species of turtle finds new life. S4 E3 Tiger's Day at the Dentist. Power tools are needed for an Amur tiger's root canal. S18 E1 Evading Capture.
The VRC crew race to catch a dog on the run. S18 E2 Life in a Cage. Lizzy and Toney rescue a trio of orphaned dogs. S18 E3 Mother of Chaos.
Tia lends a hand when Lizzy struggles to balance her work-home life.
0コメント