Re-experience the low threshold flag football and accelerate the "rush" to the youth group.

Original title: Sports and social interaction attract young people.

-Why are emerging sports so popular (part two)

(Source: vision china)

Light equipment, heavy experience, high socialization and low threshold make minority projects enter the public’s field of vision and create new scenes for the in-depth development of national fitness. The industry generally believes that in recent years, the public’s enthusiasm for outdoor sports has become increasingly high, which has given the soil for the rapid development of minority projects: triggering community interaction through online sharing, promoting potential users to participate in offline experiences, and then stimulating more online sharing, thus forming a agglomeration effect and a positive cycle among youth groups.

-editor

At night, the football field in Beijing Laojuntang Park is brightly lit, and the teams of two flag football clubs are playing a friendly match. The attacking player hangs a colorful waist flag around his waist, and the defending player pulls out the opponent’s waist flag instead of a collision confrontation to stop the attack. Both sides come and go, both tactical and physical competition, but also the joy of "tearing famous brands" game.

Seeing the enthusiasm of everyone, Sun Mowen, a young man after 1995, was quite emotional. Since he initiated the establishment of a flag football club last winter, nearly a thousand people have participated in the activities in just a few months, with 4-5 activities every week, and the places are often robbed in 10 minutes.

This summer, after Frisbee became the first popular sport, flag football also accelerated its "rush" to the youth group. Light equipment, heavy experience, high socialization and low threshold make minority projects enter the public’s field of vision and create new scenes for the in-depth development of national fitness.

Bring social distance closer on the sports field.

In people’s impression, rugby is a fierce sport, with heavy protective gear and high-intensity physical requirements, which makes it difficult for ordinary people to participate. As a "simplified version" of football, the flag football continues its characteristics of tactical game and teamwork, and gets rid of the high requirements for equipment and venues. The low antagonism greatly reduces the threshold for participation. "The rules are relatively simple, and most novices can master it after two or three activities, and even directly participate in the competition." Sun Mowen said.

Sun Mowen initiated the establishment of the club with the original intention of "letting more people play with us". This sport was introduced to China as early as 2003, and it has been tepid until it entered the public’s field of vision this year. Strong social attributes are the key to quickly "bonding" fans. "Waist flag rugby requires timely communication and division of labor between teammates. The novice field organized by the club has 30 people at a time, and the activity lasts for two hours, so that teammates can have a basic understanding, especially to enhance team cohesion. " Sun Mowen said.

Relying on the community and clubs to meet the dual needs of finding fresh sports experience and offline socialization has become a unique starting point for project promotion. In the eyes of the industry, when participants find companions with the same lifestyle and form a strong sense of identity, they are more willing to continue to invest time and energy in this sport.

Jin Xin, a young man born in 1980s, is engaged in the financial industry in Shanghai. Last October, he joined a waist flag football club, which witnessed the rapid growth of the club’s membership doubling. "I met some like-minded partners in the flag football activity, and later I had a pleasant cooperation at work." Jin Xin said that the communication in the sports field is more pure, and the consistency of interests shortens the social distance.

According to the data, there are about 45 national flag rugby communities and societies, and there are about 150 community organizations and off-campus training institutions. Compared with traditional sports such as football and basketball, emerging sports with stronger sense of games and mixed teams of men and women can better meet the needs of youth groups, and even novices can quickly integrate into the team. As some people have commented, Frisbee and flag football have both sports value and emotional and social value.

Online promotion forms community interaction.

In April this year, Zhao Xinjia, a girl from Tianjin, first came into contact with flag football under the leadership of her friends. "There is no collision in this sport. Even if you can’t run fast or jump high, it doesn’t matter. You can use flexibility to run and attack." Now, she has become an active member of the club, playing several rounds every week.

Another reason why Zhao Xinjia is fascinated by flag football is online sharing. After each activity, she will post sports notes on social platforms and record her progress with photos and videos. "I will also read other people’s sports notes and exchange experiences with each other. Waist flag football pays attention to strategy and cooperation, and there is a lot of room for learning and advancement. "

Feeling the online sharing needs of participants, many clubs have introduced the follow-up business. When Sun Mowen organizes flag football activities, he always invites professional photographers to capture hundreds of photos on the spot, and then makes the materials into photo albums and videos for everyone to download. The wide spread of fans online is tantamount to natural advertisements. "There are many novices who are pushed through social platforms and attracted by photos of club activities to sign up." Sun Mowen said that this also promoted the club to build its own brand more carefully.

Emerging sports have a distinctive trend label, which is in line with the pursuit of fashion and personality of contemporary young people. The online platform where young users gather has therefore become the best carrier for "incubating" niche projects. When Xiaohongshu, a life social platform, was launched, the related search volume of "Frisbee" increased by about 24 times compared with the same period of last year, and the original content of "Waist Flag Rugby" also ushered in rapid growth after March this year.

People in the industry generally believe that in recent years, the public’s enthusiasm for outdoor sports has become more and more high, giving the minority projects a soil for rapid development. Combing this process, the great help of online promotion can be clearly seen: online sharing can trigger community interaction, promote potential users to participate in offline experience, and then stimulate more online sharing, thus forming a agglomeration effect and a positive cycle among youth groups.

Market expansion stimulates consumption potential

The popularity of minority sports has also opened up a blue ocean for the fitness market. Although this "small and beautiful" business has just taken the first step of exploration, many people have seen the consumption potential behind it.

Take part in the two-hour activity 60-80 yuan, rugby gloves 150-300 yuan, plus the mouthguard 100 yuan, which is the cost of Jin Xin’s participation in the flag football activity. "Ordinary fans can wear ordinary sportswear and sports shoes, and the lower consumption threshold is also the reason why novices are willing to try this sport." At the club level, organizing an activity includes booking venues, novice training, drinking water, photography and other expenses. "There are more and more people participating now, but our club has not raised the price. I hope that coaches and photographers with higher cost performance can enhance the sports experience and make them really fall in love with the flag football." Sun Mowen said.

Although at this stage, emerging sports have not yet spawned a mature business model and industrial chain, Jin Xin is optimistic about the consumption potential of the participating groups: "These fitness experts have commercial value, and full cultivation can tap many opportunities, such as event organization, sports tourism, and sports brand promotion." It is reported that some flag football clubs in Shanghai have begun to make profits.

Let the public participate in the normalization, let the senior fans specialize, and finally let the project be competitive, which is regarded as the key to the further development of emerging sports. Wang Xueli, director of Tsinghua University Sports Industry Development Research Center, said: "For sports participants, with venues and activities, the consumption of sporting goods and sports services will naturally increase."

To the delight of people in the industry, "Ultimate Frisbee" was selected as a fashion sports project in the "Compulsory Education Curriculum Scheme and Curriculum Standards (2022 Edition)" recently promulgated. Now, there is a mature middle school league in Shanghai. "Emerging sports entering the campus will bring benefits to equipment research and development, coach training, talent reserve and consumption habits. Especially teenagers, if they start playing a sport from an early age, they will probably keep playing. " Xue Zhixing, deputy secretary general of the National Frisbee Promotion Committee, said.

Our reporter Li Shuo Tao Xiang ‘an

[Source: People’s Daily]
Reporting/feedback

Jianning Experimental Middle School: Dragon Leaping and Tiger Leaping across New Year’s Day Fun Garden

Red Net News December 31 ST(Correspondent Peng Yixiao, Shen Yao) As New Year’s Day approaches, winter warms up and the atmosphere of the New Year becomes more intense. Following the rhythm of the year-end bell, on December 29th, Jianning Experimental Middle School held a Spring Festival Garden Party in the Year of the Dragon.
In order to attract "customers" better, the students made full preparations, worked in groups to design posters, carefully selected items and determined commodity prices. In a cheerful atmosphere, students can’t wait to set up booths, put up posters, and place goods. After some busyness, small colored squares appear on the playground, and everything is ready.
"Opportunities don’t come every day. You should shoot when it’s time to shoot!" Accompanied by shouting, the garden party officially began! A wide variety of goods are neatly placed on the booth, including all kinds of books, exquisite and lovely dolls, all kinds of stationery, and delicious handmade food …
The "small stall owners" are lined up in class, and there are a wide range of goods in front of the booth. In order to attract the attention of "customers", they show their abilities, some use "buy one get one free" to promote sales, some carry goods to promote sales, and some attract customers through fancy hawking.
In the lively trading scene, "customers" wandered between the booths and carefully selected their favorite items. They had a good bargain, with laughter, hawking and bargaining one after another, and they merged into a cheerful bazaar symphony.
The Youth League Committee of the school also took advantage of this activity to set up a happiness tree on campus. Students can choose their favorite postcards, write down their memorable memories in 2023, or write down their beautiful wishes to realize in 2024 and hang them on the happiness tree.
Small flea market, full of growth experience. Through this activity, students can experience the process of buying and selling, gain the happiness of labor, and also receive an education of love, so that love can be passed on in the New Year.
Jianning Experimental Middle School has always attached great importance to students’ all-round development, helping students to establish the consciousness of caring for others and cultivate the good quality of being helpful. Jianning Experimental Middle School issued an initiative of caring donation, and all classes responded positively, taking out part of the profits from the garden fair and donating them to those in need.
Be polite in the new year, and good things happen. Students feel the joy of the New Year in the garden party, but also thank themselves for their hard work in the past year, and wish everyone a happy New Year in advance in the happy atmosphere of the garden party.
Reporting/feedback

The movie channel 2.27-3.4 will broadcast many classic love movies.

Special feature of 1905 film network Spring has arrived, everything is revived, and there is a vibrant scene everywhere. Flowers are red, willows are green, and the world is beautiful. It’s really fascinating. And spring is not only the season when flowers bloom and everything grows, but also the season when love is most likely to germinate.


From February 27th to March 4th, the movie channel has carefully prepared a number of love movies for everyone, so let’s welcome this season of love together.

Love+philosophy Show classical beauty

Film stills


"Coffee Commune" is a self-directed romantic comedy, starring,, and. It tells the story of a young man who came to Hollywood to pursue his movie dream, then fell in love and indulged in the famous coffee commune of that era.



The colors in the film are warm, colorful and full of hope. The classical atmosphere gives this classic "Woody Allen-style" story a little novelty, which makes the film filled with a charming illusory temperament and philosophical meaning.



In the film, director Woody Allen, with the help of the hero, said Socrates’ sentence that "an unexamined life is not worth living", and then retorted that "but a scrutinized life is not easy".


The development track of love cannot be planned. Now that we have chosen each other, we should bravely face everything that is coming.



In the film, the photographer’s dark shots are beautiful, turning the wooden office and dining room into fantastic scenes. Every shot glows with a vibrant classical beauty, which makes people want to take their lover in for a drink.


Beach+music Full of love


Film stills


In the classic film "What Tea in Summer", Summer came to Dandan Island, Malaysia after emotional trauma, and met the beach rescue team member Mo Tea, and they started a romantic love.



The film tells the audience a ups and downs love story in a relaxed and happy way. The whole film is very beautiful on location, with gorgeous colors to explain the beauty of life and the enthusiasm of love.



Vivid illustrations, colorful transitions, relaxed and funny dialogues, and pure and lovely songs and soundtracks have all become the unique features of this film. Songs such as "The girl on the other side looks over" and "The waves are blossoming" in the film are still regarded as confession songs for girls by many boys.

Love+martial arts Heroic spirit burst into flames


Film stills


The martial arts film Yang Guo and Little Dragon Girl, released in 1983, was directed by Huashan, starring, etc. Based on the novel "The Condor Heroes", the film tells the story that Yang Guo and Xiao Longnv met and fell in love, and because of various misunderstandings, they interpreted a love-hate story.



This film is a rare martial arts work in Leslie Cheung. Compared with other versions, Yang Guo played by Leslie Cheung has the youthful temperament of a handsome and beautiful boy.



While Weng Jingjing’s little girl Long Mingyan is moving, she has a little more Jianghu temperament.



A pair of martial arts experts bring a full screen of youth. Do you love them?



Simple Cinderella Gorgeous princess


Film stills


Cinderella, the first live-action version, is a fantasy drama film directed by, starring, etc. Based on fairy tales, the film adds innovative adaptation, and the main line of the story still revolves around Cinderella’s courage in difficulties and her romantic love with the prince.



Many classic scenes in the original work are also presented in the film one by one, including the fairy godmother turning the pumpkin into a carriage, Cinderella’s gorgeous transformation, and the loss of crystal shoes on the steps of the palace.



The blue dress worn by Cinderella in the film was carefully sewn with many tiny Swarovski crystals, and it is said that a total of 10,000 were used.



This movie makes the sparkling Cinderella come to you from the fairy tale. In reality, no matter what the person you love wears, I believe that in your eyes, it will shine like wearing 10,000 crystals.


Be on the screen many times Achieve the best work


Stills of the movie Jane Eyre


Jane Eyre, released in 1970, is a classic film directed by Delbert Mann and starring susannah york and George C. Scott. The film is adapted from Charlotte Brontexq’s masterpiece of the same name and tells the story of several emotional experiences in Jane Eyre’s life.



Jane Eyre has been repeatedly put on the screen for 8 times, and the British version in 1970 is recognized as the highest artistic and production level.



Jane Eyre in the film is like the struggle history of "Cinderella" in real life. She bravely faces difficulties and setbacks and pursues equality between men and women and between the poor and the rich. As she herself said, "I have the same soul and heart as you."

Over the years, many well-known romantic films at home and abroad have been growing up from generation to generation, adding a touch of sweet color to our ignorant period. So many excellent love movies, which one is the classic that you can’t surpass in your heart?


Program preview:


February 27th (Monday) Coffee Commune

February 28th (Tuesday) "Summer Tea"

On March 2nd (Thursday), Yang Guo and Little Dragon Girl

March 3rd (Friday) "Cinderella"

March 4th (Saturday) Jane Eyre


Pioli: I don’t know whether CDK will stay in the team next season; We represent the city of Milan

Live on May 21st, Beijing time, in the early morning of May 21st, in the 36th round of Serie A, AC Milan beat Sampdoria 5-1 at home. After the game, coach Pioli was interviewed.

Pioli said: "It’s good for us to have a game to play, because we have to get rid of the negative impact of the Champions League elimination. We scored a lot of goals in this game, which will only help us move forward in Serie A.. We still have two games to play this season, and then we will get the final result. Obviously, our performance in the Champions League group stage exceeded expectations, and we were eliminated in the group stage last year. On the other hand, our performance in the league failed to meet expectations.

"Our performance in the league was too unstable and we didn’t get many victories like this game. Next we will play against Juve, and we will try our best to prepare and remember that when we play beautiful football, we can do well. In the past two seasons, our journey has been extraordinary, far exceeding anyone’s expectations. We turned the balance sheet positive, helped a young team grow and won the league title, and also entered the semi-finals of the Champions League.

"It’s true that we represent Milan. We should be competitive in Italy and Europe. We have raised our standards, but some mistakes in Serie A this season have affected our position. I am proud of the decision made by the club, the board of directors and my players, because I know we are trying to improve ourselves. I believe we will learn more from this season than last season, because difficulties will help you become mature and understand things better.

"Gill is a strong player and the team has a solid foundation. The club has done a good job in renewing players’ contracts. We must also remember that there are no substitute players now, and everyone needs to contribute. I am proud of what we have been doing. The peak is beautiful and the trough is painful, but we know what we want to do and who we are, and we will continue to grow and make our fans happy. The team has had ups and downs this season, but the fans have always been positive. They have always stood by us and performed impeccably.

"I don’t know whether moral Kate Lare can stay in the team next season. We haven’t discussed the details yet. People forget too quickly how our young players struggled at the beginning, such as Tonali and Leo. Every player who comes to Milan needs time to realize what it means to play in such a stadium full of expectations and atmosphere. It takes time and patience, and we have both.

"My goal is to change this team."

Don’t pretend, the Paris coach’s outrageous operation was filmed! Mbappé trusted him wrongly and delayed Messi’s peak.

Fans who have paid attention to this season’s big Paris match should know that at the beginning of the season, everyone expected the new coach Garti to bring a different offensive rhythm to the team. Let Messi, Neymar and Mbappé feel different from Pochettino. But then everyone understood that Garti, who had been replaced, was a second-rate coach.

Originally, Garti wasn’t the coach that Barley wanted to invite last summer, but when Zidane didn’t come for many times, the season was about to start, so there was really no way to find a suitable candidate. Then please come out, Campos and Mbappé are more than any recognized coach Garti. Garti’s coaching ability was good in the first few games of the season, but as the season went on, everyone found that his coaching ability was not much better than Pochettino’s.

In this Ligue 1 match, when Barley drew with the opponent 1-1, the sideline shot was also given to coach Garti. The broadcast footage also captured Garti’s tactical board. You can clearly see that there is nothing on Garti’s tactical board except the names of his own players on the field. That is to say, Garti actually didn’t think of any tactics to help the team break the deadlock, but simply watched the game.

If this game was not the last moment, Mbappé relied on his own personal ability to complete the single-handed goal. Then Paris will encounter a draw again. It can be said that Garti’s coaching is really without tactics, and he simply relies on the big Paris stars to finish the crushing in the Ligue 1 competition. However, in a higher level of Champions League competition, it is difficult for Gabriel to win. I have to say that Mbappé trusted him wrongly, and he also delayed Messi’s peak.

All four teams won at home, and Real Madrid continued to follow Barcelona.

Last night and early this morning, there were four rematches in the 25th round of La Liga. The four home teams all scored points-Real Madrid beat the Spaniard 3-1 at home, while elche tied Balado Lide 1-1 at home; Certa beat Vallecano 3-0 at home, while Valencia beat Osasuna 1-0 in Mestalla and escaped from the relegation zone.

In terms of standings, Real Madrid shortened the gap with Barcelona to 6 points. Vallecano and Osasuna both lost and still ranked seventh and eighth; Valencia’s home win pushed Seville and almeria into the relegation zone, and the two teams will also have a direct dialogue in this round.

Real Madrid C.F.

Spanish

three

one

Real Madrid welcomes Spaniards at home. The Spaniard who fought away from home scored in the 8th minute, Ruben Sanchez crossed, and Jose Lu seized the opportunity to score 0-1. In 22 minutes, Venesius hit the right foot in the penalty area to equalize the score, 1-1. In 39 minutes, Chuameni assisted Militao to score a header, and 2-1, Real Madrid took the lead and entered the second half. In the 93rd minute, asensio, who came off the bench, received a pass from Na Qiao and scored another point. Real Madrid won 3-1 at home.

Elche

Real Valladolid Club de Fútbol

one

one

Elche, which ranks at the bottom, welcomes Balado Lide who has escaped from the relegation zone at home. Four minutes after the opening, Balado Lide was assisted by Olasa to score a goal by Lalin, 0-1. In 16 minutes, Plano hit the door slightly at a small angle. In 34 minutes, Boyer’s header missed. Elche trailed 0-1 in the first half. In 59 minutes, Boyer’s long-range shot was blocked. In 84 minutes, Raul Guti hit the door in the restricted area and was thrown. In 96 minutes, Morent volleyed and scored a tie, 1-1. Since then, Mesa and Hogela have been sent off for the second yellow card in this game. In the end, each side will get one point.

Certa Vigo

Vallecano

three

Zero

Certa, who played at home, took the initiative. In the 5 th minute, Bega’s long-range shot was saved. In 11 minutes, Lejon hit the door slightly higher outside the restricted area. In 41 minutes, aspas missed the goal from the left side of the penalty area. In the first half, the two sides drew a blank. In the 51st minute, Harvey Garland assisted aspas to score a goal from the left in the restricted area, 1-0. Then, carles Perez’s shot caused a Sis own goal, 2-0. In 85 minutes, aspas scored his second goal in this game, and Certa beat Vallecano 3-0.

Valencia

Osasuna

one

Zero

In the 6th minute, Diaca missed the header. In 11 minutes, Abd shot high. In 33 minutes, Hugo Duro shot in the restricted area and was saved. In the first half, the two sides drew a blank. Easy side fight again, 55 minutes, Avila shot high from the left side of the restricted area. In 74 minutes, Lino assisted Kluivert to score the only goal in the game, 1-0. In 89 minutes, Valencia got a penalty opportunity, and Hugo Duro was saved from the penalty, and the score remained unchanged. In the end, with the goal of Kluiwitt, the Bat Corps, which ranked second to last, won the game 1-0 and gained 3 valuable points.

Archsummit direct hit | Build a smooth natural flutter page

Instructors

Amoy Technology Department | Leisure Fish Technology | Cloud

"Fully strengthening the flutter fluidity, sharing challenges, online monitoring tool construction, optimization means to precipitate in component containers, and finally optimized advice."

Zhang Yunlong (cloud from), idle fish client experts.Since Netease, byte, Ali is running. At the current Department of Alibaba, there are currently responsible for idle fish APP packages, fluidity, start-up equation experience.

Outline

This sharing revolves around FLUTTER fluidity, respectively: 1.Flutter fluidity optimization challenge; 2. List container and flutterdx component optimization; 3. Performance measurement and devTool extension; 4.Fltter sliding curve optimization; 5. Performance optimization suggestions.

FLUTTER fluency optimization challenge

Business complexity challenge

FLUTTER has always been known by everyone, and the list controls displayed by Flutter Gallery (shown in the left) is indeed very smooth. But the actual business scene (shown on the right) is more complex than the Gallery list demo:

  1. Same card, more and complex (such as rounded) view control;

  2. When the list scroll, there are more view logic, such as scrolling control of other controls and disappearing;

  3. Card controls, there are more business logic, such as a different label, activity price, etc. based on background data, and there is also common business logic, etc.

  4. Because idle fish is an e-commerce app, we need to have certain dynamic capabilities to deal with frequently changed activities. Here we use the Flutter Dynamicx components of Ali to implement our dynamic capabilities.

Framework challenge

Let’s look at the overall flow of the list, here only pay attention to the free scroll phase after the finger is released.

  1. When the finger is released, the initial speed is calculated based on ScrollDragController.end;

  2. UI Thread requests RequestFrame to Platform Thread, and calls BegInframe to UI Thread at Platform Thread.

  3. The UI Thread Animate phase trigger list slides a little distance while registering the next frame callback to Platform Thread;

  4. Ui Thread Build Widget, generate / update the renderObject tree through the three tree DIFF algorithm of Flutter;

  5. UI Thread RenderObject Tree Layout, Paint Generates an Scene object, and finally passed to Raster Thread to draw on-screen;

The above flow must be completed in 16.6 ms to ensure that the frame cannot be guaranteed. Most of the cases, there is no need to build a new card, but when the new card enters the list area, the entire calculation amount will become huge, especially in complex business scenes, how to ensure all calculations within one frame of 16.6ms, Is a small challenge.

The figure above is a sliding devTool sample, and the Carton stage occurs when the new card is on the screen, and the other phases are very smooth, because the scrolling speed is attenuated, so the carton interval is also getting bigger. Because most of the time is very smooth, the average FPS is not low. However, the new card is built at the time of production, which gives us a stylish body feeling.

Challenge of dynamic capabilities – Flutter Dynamicx

The free fish APP card uses the self-developed Flutter Dynamicx to support our dynamic capabilities. Basic Principle: Online Edit Layout DSL, generate DX files and send it. The end side generates the DXComponentWidget by parsing the DX file and combines the back card data, and finally generates Widget Tree. FLUTTER DYNAMICX technology brings dynamic update capabilities, unified monitoring capabilities (such as dxcomponentwidget monitoring cards), good research and development insecurity (online DSL and Android Layout, and optimize Android), online editing capabilities;

But in performance, we also pay a certain price: DX cards add time to the template loading and data binding overhead, Widget wants to recursively create through WidgetNode traverses dynamically, and the view nesting layer will be deeper (followed by later).

Description: Flutter Dynamicx Reference Ali Group DSL Rules Realization

User’s sense of physical challenge

I have already described above, and the card in the FLUTTER list is more obvious.

When Android RecycleView occurs, the physical feel is not obvious, and the FLUTTER list has occurred when the card occurs, not only the time pause, but also a hopping on the OFFSET, and the physical feeling of small card is also changed. It is obvious;

Suppose the list content is simple enough, scrolling does not happen, we also found that the Flutter list and Android RecycleView are not the same:

? Use ClampingscrollPhysics to feel the feeling of similar magnets when the list is stopped.

? Use BOUNCINGSCROLLLPHYSICS, the list is started, and the speed attenuation is faster;

On the 90Hz machine, the early flutter list is not smooth, the reason is that the touch sampling rate is 120 Hz, and the screen refresh rate is 90Hz, causing partial screens to be 2 touch events, part is a 1 touch event, last Resulting in rolling OFFSET effects. When the Flutter 1.22 version, RESAMPLINGENABLED can be used to re-sample the touch event.

List container and flutterdx component optimization

Telling the challenge of Flutter fluidity optimization, now share how you optimize the smoothness and precipitate into PowerScrollView and Flutter Dynamic components.

PowerScrollView design and performance optimization

PowerscrollView is a snarefish team’s self-developing Flutter list assembly, with better packages and supplements on the Sliver Agreement: Data increased deletion, complement local refresh; layout, supplemented the waterfall flow; incident, supplement the card on the screen , Away, scrolling events; control, support for scrolling to Index.

In terms of performance, the waterfall flow layout optimization, local refresh optimization, card division optimization, and sliding curve optimization.

PowerScrollView Waterfall Flow Layout

PowerScrollView Waterfall Flow Layout provides longitudinal layout, lateral layout, mixed arrangement (transverse card and ordinary card mix). Nowadays, most of the listings of the hiped fish are available in PowerScrollView’s waterfall flow layout, such as the home page, search results page, etc.

PowerScrollView Waterfall Flow Layout Optimization

First, through conventional cache optimization, cache each card upper corner X value and which column belonging.

Compared to the Slivergrid card into the list area, the waterfall flow layout, we need to define Page, card admission to create and leave the field destruction need to be units. Before optimization, Page calculates cards in a screen visual area, and in order to determine the starting point Y value of Page, the primary layout needs to calculate the Page N and N + 1 two pages, so the amount of cards involved in the layout calculation is much lower, and the performance is low. After optimization, the approximation of all card height averages calculates Page, which greatly reduces the number of participating in the layout card, and the number of cards destroyed by Page also becomes less.

After the column cache and paging optimization, use the idle fish Self-developing Benchmark tool (follow-up) to compare the waterfall flow and GridView, view the number of frames and the worst frame consumption, can find that performance performance is basically consistent.

PowerScrollView local refresh optimization

Leisure fish products expect users to browse products more smooth, will not be loaded by loadmore, so the list is required to trigger LoadMore during scrolling. FLUTTER SLIVERLIST When the LOADMORE supplement card data, the List control is tender, and the slterlist building will destroy all cards and recreate it, and the performance data can be imagined very bad. PowerScrollView provides a layout refresh optimization: all cards on the cache screen, no longer recreate, ui thread Optimize from the original 34MS to 6MS (see the lower left picture), the right image is viewed by Timeline, the depth and complexity of the view built Optimize.

PowerScrollView card fragmentation optimization

The second figure 2 card is the early search results page of the idle fish, and it is not a waterfall flow. To view the Timeline chart when the card is created (adding DX Widget creation and PerformLayout overhead), you can find that the complexity of the card creation is extremely large. On the normal mid-range machine, the UI Thread consumes more than 30ms, to be optimized to 16.6ms It is very difficult to use routine optimization. For this purpose, two cards can be disassembled, and each frame is used to render.

Directly see the source code, the basic idea is to mark the card widget, when the card is true, the right card first _BuildPlaceHoldercell builds the Widget (empty Container), and register the next frame. In the next frame, the right card is modified with NeedShowRealcell for True, and self-laminate, and then build real content.

Is it delayed to build a true content of the card, will it affect the display content? Because the FLUTTER list has a cacheextends area on the visual area, this part of the area is not visible. In most scenarios, users don’t see the scene of the blank card.

Also using the FLUTTER BENCHMARK tool to perform performance test, you can see 90 points before and after the card division, 99 packet consumption has a significant downgrade, and the number of lost frames is also reduced from 39 to 27.

Note Here, when listening to the next frame, you need widgetsbinding.instance.scheduleframe to trigger the RequestFrame. Because when the list is displayed, it is possible because there is no callback from the next frame, resulting in the task of the delay display queue, eventually makes the first screen content display is incorrect.

Delayed framing optimization ideas and suggestions

Comparison of Flutter and H5 design:

  1. DART and JS are single-threaded models that need to be sequenced and deserialized across threads;

  2. Flutter Widget is similar to H5 VDOM, there is a DIFF process.

Early Facebook In React Optimization, the Fiber Architecture is proposed: Based on the VDOM Tree’s Parent Node → Sub-node → Brothers Node → Sub-node, the VDOM Tree is converted to the Fiber data structure (chain structure), and the reconcile phase is implemented. Interrupt recovery; based on the Fiber data structure, the control section continues in the next frame.

Based on React Fiber thinking, we propose its own delayed framing optimization, not just left and right card size, further, render content disassembled as the current frame task, high-excellent delay task and low delay tasks, the upper screen priority is sequentially changed Low. Where the current frame task is the left and right white Container; the high-optovel delay task is exclusively frame, where the picture portion also uses Container placeholders; in the idle fish scene, we dismantled all DX image widget from the card, as low as low Excellent delay tasks and is set to no more than 10 in one frame consumption.

By disassembling the 1 frame display task to 4 frames, the highest UI on the high-end machine will be optimized from 18 ms to 8 ms.

Description 1: Different business scenes, high-yogle and low-probing task settings have different description 2: Slide on the low-end machine (such as Vivo Y67), the sub-frame scheme will let the user see the list whitening and content Upable process

FLUTTER-DYNAMICX Component Optimization – Principle Explanation

Edit the "Class Android Layout DSL", compile the binary DX file. The end side is downloaded, loaded, and resolved, and the WidgetNode Tree is generated. See the right figure.

After the business data issued in the background, the Widget Tree is generated by recursively traversing WidgetNode Tree, and finally appears.

Description: Flutter Dynamicx Reference Ali Group DSL Rules Realization

FLUTTER-DYNAMICX Component Optimization – Cache Optimization

I know the principle, it is easy to discover the flow in the red box in the picture: binary (template) file parsing load, data binding, Widget dynamic creation has certain overhead. To avoid repeated overhead, we have cached DXWIDGETNODE and DXWIDGET, and the blue selection code shows the Widget cache.

FLUTTER-DYNAMICX Component Optimization – Independence ISOLATE Optimization

In addition, the above logic is placed in a stand-alone ISOLATE, and the maximum amount is lowered to the lowest. After the line technology grayscale AB experiment, the average carton bad frame ratio is reduced from 2.21% to 1.79%.

FLUTTER-DYNAMICX Component Optimization – Hierarchical Optimization

FLUTTER DYNAMICX provides class Android Layout DSL, adds Decoration layers to implement each control Padding, Margin, Corner, adds the Decoration layer; to implement the DXContainerRender layer. Every layer has its own clear duty, the code level is clear. However, since the increase in 2 layers caused the Widget Tree hierarchy, the DIFF logic of 3 trees became complicated and the performance becomes low. To do this, we merge the Decoration layer and the DXContainerRender layer, see the middle Timeline diagram, which can be found that the optimized flame grading and complexity becomes low. After the line technology grayscale AB experiment, the average carton bad frame ratio is reduced from 2.11% to 1.93%.

Performance measurement and devtool extension

Tell the optimization tool, which is described here to make a measure of how to measure, and the build / extension of the tool.

Offline scene – Flutter BenchmarkWhen the FLUTTER is detected, the calculation consumption on the UI Thread and Raster Thread is required. So the Flutter optimizes before and after comparison, using the time consuming data of the UI Thread and Raster Thread of each frame.

In addition, the fluency performance value is affected by the operating gesture, the scrolling speed, so the error based on the measurement results of manual operations will have errors. Here, use the WidgetController control list control FLING.

The tool provides the interval between the scrolling speed, the number of scrolls, the scroll, and the like. After the scrolling test is completed, the data is displayed by the UI and Raster Thread frame, 50 points, 90 points, and 99-positioned frame consumption, and give performance data from a variety of dimensions.

Offline scenario – Based on the recording screen

Flutter Benchmark gives multi-dimensional measurement data at the Flutter page, but sometimes we need a horizontal comparison competition app, so we need to have a tool transverse to more different technologies. The idle fish is self-developed in the Android side to self-developed the recording screen data. Imagine the mobile phone interface into multiple screens, get the screen data (byte arrays) (byte arrays) by sending VirtualDisplay, interval 16.6 ms, using the Hash value of the byte array represents the current picture, the current 2 The Hash-read hash value is unchanged, and the Carton is considered.

In order to ensure that the fluency detecting tool app itself does not have a carton, it is read, which is compressed, and the compression ratio on the low-end machine is higher.

Through the detection of the tool without invading, a rolling test can be detected, the average FPS value (57), the frame distribution is variance (7.28), 1S time, the large number of large cards (0.306), large card cumulative time (27.919). Intermediate array display frame distribution: 371 represents the number of normal frames, 6 generations 16.62ms of small cardon quantity, 1 generation 16.63MS quantity.

Here is the definition of the big Carton: Carton, greater than 16.6 * 2 ms.

Offline Scene – Performance Detection Based on DEVTOOL

In addition, the scenes of the idle fish are also extended DevTool. In a Timeline map extended time-consuming, greater than 16.6ms red highlight, convenient development.

Online scene-Flutter high available detection FPS implementation principle

Online scene, idle fish self-developed Flutter high available. The basic principle is based on 2 events:

  • Ui.window.onbeginframe event

    • Engine notifies the VYSNC signal arrival, notify UI Thread to start preparing the next frame building

    • Trigger schedulerbinding.handlebeginframe callback

  • Ui.window.ondrawframe event

    • Engine Notification UI Thread Start Draw Next Frame

    • Trigger schedulerbinding.handledrawframe callback

Here we have recorded a frame start event before the Handlebeginframe processing, and the end of the frame is recorded after HandledrawFrame. Each frame here needs to calculate the list control offset value, and the specific code implementation is implemented. When the entire accumulated exceeds 1, executes a calculation, filtering out the scene without scrolling, calculates the FPS value using each frame.

Online Scene – FlutterBlockcanary Line Stack Stack Detection

After using Flutter high available to get the online FPS value, how to locate the stack information, you need to collect stack information. Free fish collects carton stacks using the self-developed Flutterblockcanary. The basic principle is that the signal is transmitted in the C layer, such as 5ms once, each signal receives the Dart Ui Thread stack collection, the resulting series of stacks are aggregated, and the same stacks in a row are considered to have occurred in Carton, this This stack is the stack of Carton we want.

The following figure is the stack information collected by Flutterblockcanary, and the middle framefpsRecorder.getscrolloffset is a Carton call.

Online scene – FlutterBlockcanary Detects overreservation

In addition, FlutterBlockcanary also integrates over-rendering detection capabilities. Replace the Buildowner object by replying widgetsflutterbinding, replacing the buildowner object, and rewrive the ScheduleBuildFor method to intercept Element. Based on the dirty ELEMENT node, extract the depth of the dirty node, the number of direct child nodes, the number of all child nodes.

Based on the number of all child nodes, in the idle fish details page, we are positioned to the "Quick Question View" during scrolling, and the number of transes and all child nodes are too large. View the code, positioning the view hierarchical level, by sinking the view to the leaves node, the number of stasible Build nodes is optimized from 255 to 43.

FLUTTER sliding curve optimization

The front told Tarton optimization means and measures and standards are mainly surrounded by FPS. But from the user’s physical feel, we found that Flutter also has many optimal points.

FLUTTER list slide curve and native curve

Compare the scroll curve of OFFSET / TIME, you can find that the Flutter BouncingScrollsimulation and iOS scroll curve are close, Clampingscrollsimulation and RecyClerView are close. Check the Flutter source code, it is true.

Because BouncingScrollsimulation has rebound, many pull-down refreshes and load more features are based on BOUNCINGSCROLLSIMULATION package, which causes the Flutter page sliding, physical and native Android pages inconsistent.

Flutter list performance and optimization under fast sliding

Although the Clampingscrollsimulation slides and Android RecyclerView is close, but in the quick sliding scenario, you can find that the flutter list scrolls quickly stops, and quickly slides. For the reason, you can see the moment that the sliding curve is stopped, and the speed is not a decline, and it will speed up, finally reach the end point, and stop. Based on the source code formula, the curve can be discovered that flutter clampingscrollsimulation is approximated by the Formula Fitting Method to approximate the Android RecyclerView Curve. In the case of rapid sliding, the focus of the formula curve is not 1 corresponding value, but the right image is broken, the speed will become fast.

It can be understood that the FLUTTER’s formula fit is not ideal. In the near future, there is also a PR proposed using DART to implement the RecyclerView curve.

Flutter list performance and optimization in the case of Carton

The first chapter is mentioned in the case of the same FPS, such as the FPS 55, the native list feels smooth, and the styles of the FLUTTER list are more obvious. One reason here is that the native list usually has multiple thread operations, and there is a lower probability of the big Carton; the other reason is that the same small carton’s body, FLUTTER has obvious statter, and the native list can’t feel. So why?

When we build cards, we deliberately create small Carton, compare the flutter list and RecyclerView before and after, and you can find that RecyclerView Offset does not hop, and the Flutter curve has a lot of burrs, because Flutter scrolling is based on D / T curve calculation, When a carton occurs, △ t doubles, and OFFSET also trips. It is also because of time pause and offset jump, let users know that the Flutter list is not unstoppable in small Carton.

By modifying the Y=D (T) formula, in the case of Carton, ΔT-16.6ms will ensure that the small Carton case is not hopped. In the case of Great Carton, it is not necessary to reset the ΔT to 16.6ms, because in the parking time, it has been clearly allowed to give the user to feel the carton, OFFSET does not have a trip only to make the list rolling distance short.

Performance optimization

Finally share some suggestions for performance optimization.

  1. In optimization, we should pay more attention to the user’s body, not only the performance value. The upper right map is visible, even if the FPS value is the same, but the taste occurs, the body feels clearly; the bottom of 2 game recording screens, the left side average 40 fps, the average of 30 fps, but the body feels is more smooth .

  2. Not only should I pay attention to the performance of UI Thread, but also pay attention to the overhead of Raster Thread, such as the characteristics / operation of Save Layer, but also causing Carton.

  3. In terms of tool, it is recommended to use different tools in different scenarios. It should be noted that the problem of tool detection is a stable reproduction problem or the occasion of data jitter. In addition, it is also necessary to consider the performance overhead of the tool itself, and the tool itself needs to be as low as possible.

  4. In terms of optimization ideas, we must broaden the direction. Most optimized ideas of Flutter are optimized computing tasks; and multithreading direction is not, refer to the independent ISOLATE Optimization of Flutter Dynamicx; in addition, it is difficult to digestive tasks for one frame Whether it is possible to disassemble multiple frame time, try to make a card per frame, priority to the user.

  5. Finally, I recommend paying attention to the Flutter community. The Flutter community continues to have a variety of optimization, regularly upgraded Flutter or dimensions, CHERRY-PICK optimization submission, is a good choice.

Performance analysis tool usage suggestions

Flutter tool, the first push is the official devtools tool, the Timeline and CPU Flammatic maps can help us discover problems well; in addition, Flutter also provides a wealth of Debug Flags to assist our positioning problems, familiar with each Debug switch Role, I believe that there will be no homage to our daily research and development; in addition to official tools, performance logs are also good auxiliary information, as shown in the lower right corner, the idle fish Fish-Redux component outputs the task overhead in the scroll, can It is convenient to see that at that moment.

Performance analysis tools themselves

Performance testing tools inevitably have certain overhead, but must be controlled within an acceptable range, especially on the line. A case in front sharing the FLUTTERBLOCKCANARY detection tool, discovers the framefpsRecorder.getscrolloffset time consumption, and the logic is just that Flutter is highly available to scroll offset. See the right front source code of the right picture, each frame needs to be recursively traversed to collect RenderViewPortBase, which is a small overhead. Finally, we avoid the repetition calculations during the scroll through the cache optimization.

Carton optimization suggestions

Reference official documents and excellent performance articles, precipitated a lot of routine optimization methods in the UI and GPU side, such as refreshing the minimum widget, using itemextent, recommended using Selector and Consumer, etc., avoid unnecessary DIFF computing, layout calculation, etc. Reduce SAVELAYER, replace half-transparent effects using images, alleviate the overhead of the Raster thread.

Because of the reasons, only part of the sequence, more common optimization suggestions see the official documentation.

Use the latest Flutter Engine

As mentioned earlier, the Flutter community is also active, Framework and Engine layers have an optimized PR income, which mostly can make the business layer without perception, and better optimize performance from the bottom viewing angle.

Here, there is a typical optimization scheme: existing flutter solution: When each VSYNC signal arrives, it triggers the build operation. At the end of Build, start register the next vsync callback. In the case where a carton does not occur, see Figure Normal. However, in the case of carton, see Figure Actual Results, just over 16.6ms here, because it is a registration listening to the next vsync callback, triggered the next build, for this, a large amount of time in the middle. Obviously, what we expect is, at the end, immediately execute, assuming enough to execute enough, this time the screen is still smooth.

If the team allows, it is recommended to upgrade the flutter version regularly; or maintain your own Flutter independent branch is also a good choice. From the community Cherry-Pick optimization, you can guarantee that business stability can also enjoy the community contribution. In short, I recommend you to pay attention to the community.

Summarize

In summary, the challenges, monitoring tools, optimization methods, and recommendations are shared by Flutter fluidity optimization. Performance optimization should be people-centered, develop monitoring indicators and optimization points from actual physical fitness; fluency optimization is not one, the above share is not all, there are many optimized means to pay attention: How to better multiplex Element, how to avoid Platform Thread busy leading to vsync signal lacking, etc., is a point that can be concerned. Only the continuous technical enthusiasm and conscious spirit can optimize the APP performance to the ultimate; technical teams also have access to open source communities, other teams / companies to connect, That stone stone, Can be attacked.